Forum: Mikrocontroller und Digitale Elektronik Unbekannte Firmware disassemblieren


von Olli Z. (z80freak)


Lesenswert?

Ich frage mich wie man vorgeht um die Firmware einer unbekannten 
Plattform zu disassemblieren. IDA Pro wäre vorhanden, sowie ein paar 
Grundkenntnisse zum Thema.

Als Übungsobjekt habe ich ein Firmware-Update meiner Dashcam (Nextbase 
212G) angehangen. Ich habe das Gerät, da neu, noch nicht geöffnet, weiss 
also nicht was drin werkelt.

Wie würdet ihr vorgehen? Erfahrungswerte nutzen? Das Image nach 
Signaturen durchkämmen? Analysetools nutzen?

von Lotta  . (mercedes)


Lesenswert?

Erstmal mehere Geräte anschaffen, damit man
Verlustmaterial hat.

Gerät öffnen und auslesen
Im Binary nach Strings und Signaturen suchen.
Auf nen Skandal warten, der die Firma zum
Update zwingt.
Im Update ist dann meist der Grund vermerkt.
Update machen und ein Diff des alten Binarys mit dem
neuen.
Dann kennt man schon die sicherheitsrelevanten Stellen.

Job in der Entwicklungsabteilung der Firma erstreben.
Sich an den Entwicklungsingenieur ranmachen.
Quelltext kopieren.
Sich freuen.

Jetzt kann man auch sehen, was IDA denn so aus dem
Binary/Quellcode gemacht hat. ;--)

Fazit:
Ida hilft erst nach langer Zeit, ein bissel "Gegenspionage"
macht eher Spaß!!!  ;--)))))

mfg

: Bearbeitet durch User
von Olli Z. (z80freak)


Lesenswert?

Ich suche immer gern nach der FCC-ID, da findet man auch interne Fotos 
und mit etwas Glück erkennt man den Prozessortyp...

Strings untersuchen, ja, das ist auch eine Idee, aber was sucht man da?

von Dirk B. (dirkb2)


Lesenswert?

Olli Z. schrieb:
> unbekannten
> Plattform zu disassemblieren.

Tja.

von Lotta  . (mercedes)


Lesenswert?

Olli meinte:

> Strings untersuchen, ja, das ist auch eine Idee,
> aber was sucht man da?

Nach Referenzen ins internet, wie URL's zum Beispiel,
nach Standard Passwörtern.
Da sollte man denn auch mal ROT13 übers Binary
laufen lassen.

Vor allem ist es wichtig, den Compiler zu kennen.
Dann kann man nämlich eigene Funktionen schreiben
und sehen, was IDA draus macht, wo sind die Frames,
wo die Datensegmente u.s.w.


mfg

von . . (Gast)


Lesenswert?

Nunja, das Firmware.bin ist erst mal nur Codeblob mit einem Header.
Keine Ahnung ob das noch weiter struckturiert ist. Ist aber scheinbar 
nicht verschlüsselt.
Das Problem hier ist, unbekannte CPU und unbekannter Adressbereich, also 
wo das Ding hingeladen wird.

von . . (Gast)


Lesenswert?

Die Bezeichnung "IMX322LQJ" taucht im bin auf.

von Olli Z. (z80freak)


Lesenswert?

.                                                . schrieb im Beitrag 
#6096355:
> Die Bezeichnung "IMX322LQJ" taucht im bin auf.

Dann hätten wir schonmal den Bildsensor gefunden :-)

von Olli Z. (z80freak)


Lesenswert?

.                                                . schrieb im Beitrag 
#6096345:
> Das Problem hier ist, unbekannte CPU und unbekannter Adressbereich, also
> wo das Ding hingeladen wird.

Ganz genau, das ist die Challenge :-)
Also bei Imageuntersuchung habe ich auch nach Compilernamen und 
ähnlichem gesucht. Also wäre eine Idee nach Strings zu googlen die nicht 
lesbarer Text sind in der Hoffnung das eine Chipbezeichnung passt?

Ich bin mir auch nicht sicher ob das Update-Image wirklich die volle 
Firmware, oder wenigstens die vollständige Applikation enthält oder nur 
einen Patch.

von . . (Gast)


Lesenswert?

hmm, MIR3D? Ist dar ein Barcodesensor drin?
Hat das Ding Wifi? Einige Strings deuten darauf hin.
Das ist vielleicht ein "Universalupdate" für verschiedene Modelle, oder 
da ist Zeug drin, welches da nicht rein gehört.

von . . (Gast)


Lesenswert?

Und was mag "only_Thisan" bedeuten?

von Olli Z. (z80freak)


Angehängte Dateien:

Lesenswert?

.                                                . schrieb im Beitrag 
#6096380:
> hmm, MIR3D? Ist dar ein Barcodesensor drin?
Nope.
> Hat das Ding Wifi? Einige Strings deuten darauf hin.
Ebenfalls nicht.

> Das ist vielleicht ein "Universalupdate" für verschiedene Modelle, oder
> da ist Zeug drin, welches da nicht rein gehört.

Definitiv. Der Hersteller hat so einige Modelle am Start und wird nicht 
jedesmal neue Firmware produzieren.

Ganz am Anfang des Images steht "NT96650" und das ist zufällig ein 
"Novatek NT96650BG-ES" für den, wenn man einfach mal nach Googled, 
gleich ein Datenblatt findet :-)

"High Performance 32-bit CPU, MIPS32 24Kec with ASE DSP extension". Dann 
würde ich mal tippen "MIPSB (Big Endian)". Leider findet er aber keinen 
Code.

: Bearbeitet durch User
von Hannes J. (Firma: _⌨_) (pnuebergang)


Lesenswert?

Wer ein bisschen Literatur zum systematischen Vorgehen haben möchte, 
allerdings nicht speziell für Embedded 
https://www.amazon.com/Practical-Reverse-Engineering-Reversing-Obfuscation/dp/1118787315

von Olli Z. (z80freak)


Lesenswert?

Was ich auch immer gern mach ist die Dateigröße im Header eines Image zu 
suchen um sowas wie eine Struktur zu entdecken. Oft wird aber nicht der 
gesamte Teil sonder nur der Nutzdatenteil angegeben, also suche ich 
immer nach einem Wert <= der Gesamtlänge.

Die Gesamtlänge ist 0x00230FCE und gleich in den ersten 16 Byte werde 
ich an 0x0000 000C fündig: 0x00230FBE:
1
Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
2
3
00000000  42 43 4C 31 9F CD 00 09 00 48 1A 6C 00 23 0F BE  BCL1ŸÍ...H.l.#.¾
4
00000010  BB 00 04 00 80 00 00 00 00 BB 04 04 BB 08 08 BB  »...€....»..»..»
Also 16 Bytes weniger als die Gesamtlänge. Damit startet für mich das 
Image ab Position 0x0000 0010.

Der String "BCL1" ist sicher ein custom-magic filetype vom Hersteller, 
den ignoriere ich einfach mal.

Dann wäre noch die Frage was die Bytesequenz: "9F CD 00 09" sowie "00 48 
1A 6C" bedeuten?

Auffällig ist auch, das die Binarylänge nicht 32-Bit aligned ist, da 
bleiben 2 Byte über. Hier denke ich immer gleich an eine CRC-16 
Prüfsumme. Passt aber leider nicht.

Was mir auch auffällt ist, das der restliche Bytecode auffälig oft 
"0xBB" enthält. Jetzt kenne ich aber die MIPS Assemblersyntax überhaupt 
nicht, vielleicht ist das ja normal.
1
Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
2
3
00000010  BB 00 04 00 80 00 00 00 00 BB 04 04 BB 08 08 BB  »...€....»..»..»
4
00000020  10 10 BB 20 20 BB 0C 0C 4E 54 39 36 36 35 30 20  ..»  »..NT96650 
5
00000030  31 30 30 30 30 30 30 30 32 30 31 30 30 37 30 31  1000000020100701
6
00000040  6C 1A 48 00 55 AA B4 32 BB 10 30 4C 44 3A 47 53  l.H.Uª´2».0LD:GS
7
00000050  BB 04 31 20 20 20 BB 04 04 BB 04 14 FF FF FF FF  ».1   »..»..ÿÿÿÿ
8
00000060  BB 04 04 BB 24 70 44 52 41 4D 49 4E 46 4F BB 08  »..»$pDRAMINFO».
9
00000070  40 BB 2C 3C BB 04 04 53 54 52 47 BB 0C 40 BB 0E  @»,<»..STRG».@».
10
00000080  1E 70 00 00 00 50 00 00 BB 05 82 23 F0 00 00 00  .p...P..».‚#ð...
11
00000090  10 BB 12 81 70 42 44 56 52 32 31 32 47 2D 42 2D  .»..pBDVR212G-B-
12
000000A0  52 30 31 2E BB 31 82 31 80 1B 3C 2C 49 7B 8F D0  R01.»1‚1€.<,I{.Ð
13
000000B0  FF 7B 23 00 00 7D AF 04 00 7F AF 08 00 68 AF 0C  ÿ{#..}¯...¯..h¯.
14
000000C0  00 69 AF 10 00 6A AF 14 00 6B AF 18 00 6C AF 1C  .i¯..j¯..k¯..l¯.
15
000000D0  00 6D AF 20 00 6E AF 24 00 6F AF 28 00 78 AF 2C  .m¯ .n¯$.o¯(.x¯,
16
000000E0  00 79 AF 1E 12 00 0C 21 E8 60 03 18 00 00 42 BB  .y¯....!è`....B»
17
000000F0  0C 82 38 BB 08 08 BB 10 10 BB 14 14 FA 11 00 0C  .‚8»..»..»..ú...
18
00000100  BB 1C 81 1F 0C 12 BB 1E 20 00 80 1B 3C 34 49 7B  ».....». .€.<4I{
19
00000110  8F 08 00 60 13 BB 0C 81 50 60 BB 07 81 50 14 00  ...`.»..P`»..P..
20
00000120  7F AF 22 11 00 08 21 E8 60 03 00 80 1D 3C 2C 49  .¯"...!è`..€.<,I
21
00000130  BD 8F 60 FF BD 23 00 00 BD AF 14 00 BF AF 00 80  ½.`ÿ½#..½¯..¿¯.€
22
00000140  08 3C 04 49 08 25 00 00 00 AD BB 04 0C 1C BB 0B  .<.I.%....»...».
23
00000150  0C 38 49 08 25 BB 04 3C BB 05 10 BB 37 85 10 EA  .8I.%».<»..»7….ê
24
00000160  BB 0B 81 60 FF FF FF FF 43 4F 44 45 BB 0C 83 70  »..`ÿÿÿÿCODE».ƒp
25
00000170  70 1A 48 80 EC B1 65 80 00 00 00 80 2C 4C 0B 00  p.H€ì±e€...€,L..
26
00000180  2C 4C 0B BB 05 86 10 BB 08 08 BB 10 10 BB 1C 20  ,L.».†.»..»..». 
27
00000190  04 00 00 00 30 4C 0B 80 3C CE 3C BB 05 6C 01 BB  ....0L.€<Î<».l.»
28
000001A0  37 83 14 BB 34 34 BB 38 38 03 01 BB 12 83 60 02  7ƒ.»44»88..».ƒ`.
29
000001B0  60 0A 40 00 3C 0B 3C 24 50 4B 01 82 5E 0A 00 A6  `.@.<.<$PK.‚^..¦
30
000001C0  00 60 11 BB 04 18 0F 00 00 00 01 B0 08 3C 00 00  .`.».......°.<..
31
000001D0  09 8D 02 00 0A 3C 25 48 2A 01 00 00 09 AD 00 60  .....<%H*......`
32
000001E0  0A 40 02 FF 0B 34 00 60 8B 40 BB 04 0C 40 01 0B  .@.ÿ.4.`‹@»..@..
33
000001F0  3C 00 01 0D 3C 27 58 60 01 BB 04 44 25 50 4D 01  <...<'X`.».D%PM.
34
....
35
Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
36
37
00230F80  44 80 A0 7A 44 80 00 7D 00 00 6C 7A 44 80 5C 7A  D€ zD€.}..lzD€\z
38
00230F90  44 80 44 AC 00 00 28 7A 44 80 18 7A 44 80 80 BB  D€D¬..(zD€.zD€€»
39
00230FA0  00 00 00 E4 79 44 80 D4 79 44 80 00 FA 00 00 A4  ...äyD€ÔyD€.ú..¤
40
00230FB0  79 44 80 98 79 44 80 88 58 01 00 6C 79 44 80 60  yD€˜yD€ˆX..lyD€`
41
00230FC0  BB 04 18 77 01 00 34 79 44 80 28 79 44 80        »..w..4yD€(yD€

von . . (Gast)


Angehängte Dateien:

Lesenswert?

yup.
Hier ist die Häufigkeit der Werte.

od -vtu1 -An -w1 FW212GB.bin | sort -n | uniq -c > d1.txt

sort -k1 -n -k2 d1.txt -o d2.txt

von Paula Q. (bytebuffer)


Lesenswert?

Such mal nach Novatek FW unpacking script von "nutsey".

Supported Novatek firmware types:

    2 BCL partitions in a row.
    1 FullComp BCL partition.
    1 PartComp BCL partition.

von Olli Z. (z80freak)


Angehängte Dateien:

Lesenswert?

Paula Q. schrieb:
> Such mal nach Novatek FW unpacking script von "nutsey".

Das war ein sehr guter Hinweis! Habe dieses Tool herunterladen und 
ausführen können (hätte jetzt gern gewusst wie es arbeitet, aber Sourcen 
waren nicht zu finden):
1
$ ./ntfwtool.exe FW212GB.bin FW212GB_unpacked.bin
2
decompress FW212GB.bin to FW212GB_unpacked.bin...
3
Input file: 2297782 bytes
4
Output file: 4725356 bytes

Also offensichtlich ist das doch komprimiert, nur das der Text 
weitesgehend erhalten blieb... schlau ;-) Also ist der Algo eher kein 
RLE sondern was anderes. Naja...

Diesen entpackten Code kann ich nun mit "MIPS (Big Endian)" laden und ab 
Adresse 0x400 sah es mir nach Code aus. Dort mal bei IDA "c" gedrückt 
und schon erhalte ich zahlreiche Subs! :-)

Das Resultat scheint mir jetzt noch kein direktes Firmware-Image für den 
Prozessor zu sein, sondern noch ein Format aus dem u.a. die Firmware in 
das Flash geladen wird. Ganz sicher bin ich mir aber nicht.
1
Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
2
3
00000000  00 04 00 80 00 00 00 00 00 00 00 00 00 00 00 00  ...€............
4
00000010  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
5
00000020  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
6
00000030  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
7
00000040  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
8
00000050  4E 54 39 36 36 35 30 20 31 30 30 30 30 30 30 30  NT96650 10000000
9
00000060  32 30 31 30 30 37 30 31 6C 1A 48 00 55 AA B4 32  20100701l.H.Uª´2
10
00000070  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
11
00000080  4C 44 3A 47 53 36 35 30 20 20 20 20 20 20 20 20  LD:GS650        
12
00000090  00 00 00 00 FF FF FF FF FF FF FF FF 00 00 00 00  ....ÿÿÿÿÿÿÿÿ....
13
000000A0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
14
000000B0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
15
000000C0  44 52 41 4D 49 4E 46 4F 20 20 20 20 20 20 20 20  DRAMINFO        
16
000000D0  FF FF FF FF FF FF FF FF 00 00 00 00 00 00 00 00  ÿÿÿÿÿÿÿÿ........
17
000000E0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
18
000000F0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
19
00000100  53 54 52 47 49 4E 46 4F 20 20 20 20 20 20 20 20  STRGINFO        
20
00000110  00 00 00 00 00 00 00 00 00 00 00 00 00 00 70 00  ..............p.
21
00000120  00 00 50 00 00 00 80 00 00 00 F0 00 00 00 10 00  ..P...€...ð.....
22
00000130  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
23
00000140  4E 42 44 56 52 32 31 32 47 2D 42 2D 52 30 31 2E  NBDVR212G-B-R01.
24
00000150  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
25
00000160  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
26
00000170  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
27
00000180  00 80 1B 3C 2C 49 7B 8F D0 FF 7B 23 00 00 7D AF  .€.<,I{.Ðÿ{#..}¯
28
00000190  04 00 7F AF 08 00 68 AF 0C 00 69 AF 10 00 6A AF  ...¯..h¯..i¯..j¯
29
000001A0  14 00 6B AF 18 00 6C AF 1C 00 6D AF 20 00 6E AF  ..k¯..l¯..m¯ .n¯
30
000001B0  24 00 6F AF 28 00 78 AF 2C 00 79 AF 1E 12 00 0C  $.o¯(.x¯,.y¯....
31
000001C0  21 E8 60 03 18 00 00 42 00 00 00 00 FF FF FF FF  !è`....B....ÿÿÿÿ
32
000001D0  FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
33
000001E0  FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
34
000001F0  FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
35
00000200  FA 11 00 0C 00 00 00 00 00 00 00 00 00 00 00 00  ú...............
36
00000210  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
37
00000220  0C 12 00 0C 00 00 00 00 00 00 00 00 00 00 00 00  ................
38
00000230  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
39
00000240  00 80 1B 3C 34 49 7B 8F 08 00 60 13 00 00 00 00  .€.<4I{...`.....
40
00000250  00 80 1B 3C 2C 49 7B 8F 60 FF 7B 23 00 00 7D AF  .€.<,I{.`ÿ{#..}¯
41
00000260  14 00 7F AF 22 11 00 08 21 E8 60 03 00 80 1D 3C  ...¯"...!è`..€.<
42
00000270  2C 49 BD 8F 60 FF BD 23 00 00 BD AF 14 00 BF AF  ,I½.`ÿ½#..½¯..¿¯
43
00000280  00 80 08 3C 04 49 08 25 00 00 00 AD 00 80 08 3C  .€.<.I.%.....€.<
44
00000290  1C 49 08 25 00 00 00 AD 00 80 08 3C 38 49 08 25  .I.%.....€.<8I.%
45
000002A0  22 11 00 08 00 00 00 AD 00 00 00 00 00 00 00 00  "...............
46
000002B0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
47
000002C0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
48
000002D0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
49
000002E0  EA 11 00 0C 00 00 00 00 00 00 00 00 FF FF FF FF  ê...........ÿÿÿÿ
50
000002F0  43 4F 44 45 49 4E 46 4F 20 20 20 20 20 20 20 20  CODEINFO        
51
00000300  70 1A 48 80 EC B1 65 80 00 00 00 80 2C 4C 0B 00  p.H€ì±e€...€,L..
52
00000310  2C 4C 0B 80 00 00 00 00 2C 4C 0B 80 00 00 00 00  ,L.€....,L.€....
53
00000320  2C 4C 0B 80 00 00 00 00 2C 4C 0B 80 00 00 00 00  ,L.€....,L.€....
54
00000330  2C 4C 0B 80 00 00 00 00 2C 4C 0B 80 00 00 00 00  ,L.€....,L.€....
55
00000340  2C 4C 0B 80 00 00 00 00 2C 4C 0B 80 04 00 00 00  ,L.€....,L.€....
56
00000350  30 4C 0B 80 3C CE 3C 00 FF FF FF FF 01 00 00 00  0L.€<Î<.ÿÿÿÿ....
57
00000360  FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
58
00000370  FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
59
00000380  FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
60
00000390  FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
61
000003A0  FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
62
000003B0  FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
63
000003C0  FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
64
000003D0  FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
65
000003E0  FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
66
000003F0  FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
67
00000400  03 01 00 0C 00 00 00 00 00 00 00 00 00 00 00 00  ................
68
00000410  00 00 00 00 02 60 0A 40 00 3C 0B 3C 24 50 4B 01  .....`.@.<.<$PK.
69
00000420  82 5E 0A 00 A6 00 60 11 00 00 00 00 0F 00 00 00  ‚^..¦.`.........
70
00000430  01 B0 08 3C 00 00 09 8D 02 00 0A 3C 25 48 2A 01  .°.<.......<%H*.
71
00000440  00 00 09 AD 00 60 0A 40 02 FF 0B 34 00 60 8B 40  .....`.@.ÿ.4.`‹@
72
00000450  00 60 0A 40 40 01 0B 3C 00 01 0D 3C 27 58 60 01  .`.@@..<...<'X`.
73
...

In der Datei findet sich auch sowas:
1
Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
2
3
003C9B00  68 00 00 00 FF FE 43 00 68 00 65 00 63 00 6B 00  h...ÿþC.h.e.c.k.
4
003C9B10  20 00 56 00 65 00 72 00 73 00 69 00 6F 00 6E 00   .V.e.r.s.i.o.n.
5
003C9B20  00 00 FF FE 50 00 53 00 74 00 6F 00 72 00 65 00  ..ÿþP.S.t.o.r.e.
6
003C9B30  20 00 45 00 72 00 72 00 6F 00 72 00 00 00 FF FE   .E.r.r.o.r...ÿþ
7
003C9B40  50 00 6C 00 61 00 79 00 00 00 FF FE 50 00 61 00  P.l.a.y...ÿþP.a.
8
003C9B50  75 00 73 00 65 00 00 00 FF FE 53 00 74 00 6F 00  u.s.e...ÿþS.t.o.
9
003C9B60  70 00 00 00 FF FE 4D 00 6F 00 76 00 65 00 00 00  p...ÿþM.o.v.e...
10
003C9B70  FF FE 53 00 61 00 76 00 65 00 00 00 FF FE 4E 00  ÿþS.a.v.e...ÿþN.
Also wurde da Text, warum auch immer, in Words gepackt, also wohl nur 
das HIWORD genutzt. Ich gehe bislang noch von einer 32-Bit Architektur 
aus. Womöglich war aber Platz kein Problem und einfacher als aus einem 
Word zwei ASCII-Zeichen zu machen?!

: Bearbeitet durch User
von Dirk B. (dirkb2)


Lesenswert?

Olli Z. schrieb:
> Also wurde da Text, warum auch immer, in Words gepackt,

UTF-16 macht sowas.
Der BOM ist ja auch mit dabei (0xFEFF)

von Paula Q. (bytebuffer)


Lesenswert?

Um das Dunkle für euch noch ein wenig heller zu dimmen, noch einige 
Links

http://git.p-mc.eu/ntk/bfc4ntk

http://git.p-mc.eu/ntk-leaks

von Olli Z. (z80freak)


Lesenswert?

Dirk B. schrieb:
> Olli Z. schrieb:
>> Also wurde da Text, warum auch immer, in Words gepackt,
>
> UTF-16 macht sowas.
> Der BOM ist ja auch mit dabei (0xFEFF)
Ja, stimmt, daran hatte ich nicht mehr gedacht...! Vor jedem String 
steht das. Aber da es immer 0xFF 0xFE ist, würde das doch auf Little 
Endian deuten. Auch das das "Nutz"-Byte des Word zuerst kommt deutet 
stark auf LE.

Diese Texte unterscheiden sich vom Rest da sie wohl am Display zu sehen 
sind und der überwiegende, ASCII-basierende Teil sind interne Meldungen 
von Libs und fürs Debugging.

Komisch, bin bislang von Big Endian ausgegangen. Ok, the NT96650 kann 
laut Datenblatt beides. Womöglich kann er sogar während der 
Programmausführung umschalten? Ich hab von MIPS leider Null Peil, 
vielleicht gibt es da Initialisierungen, oder der Chip macht das 
aufgrund von Pins nach dem Reset?

von Olli Z. (z80freak)


Angehängte Dateien:

Lesenswert?

Für mich sehen diese Datenblöcke irgendwie aus wie Bilder (vermutlich 
eher Icons), für Euch auch?
1
Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
2
3
00305230  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
4
00305240  00 00 F8 0F 00 00 00 00 FE FF 01 00 00 00 FE FF  ..ø.....þÿ....þÿ
5
00305250  1F 00 00 00 FC FF FF 01 00 00 F8 FF FF 0F 00 00  ....üÿÿ...øÿÿ...
6
00305260  F8 3F E0 FF 00 00 E0 1F 00 FC 03 00 C0 1F 00 C0  ø?àÿ..à..ü..À..À
7
00305270  1F 00 80 3F 00 00 FE 00 00 7F 00 00 F0 07 00 FC  ..€?..þ.....ð..ü
8
00305280  00 00 80 1F 00 F8 03 00 00 FE 00 E0 07 00 00 F0  ..€..ø...þ.à...ð
9
00305290  03 80 1F 00 00 C0 0F 00 3F 00 00 00 7E 00 FC 00  .€...À..?...~.ü.
10
003052A0  00 00 F8 01 F0 03 00 00 E0 07 E0 07 00 00 80 3F  ..ø.ð...à.à...€?
11
003052B0  80 1F 00 00 00 FC 00 7E 00 00 00 F0 03 F8 01 00  €....ü.~...ð.ø..
12
003052C0  00 C0 0F E0 07 00 00 00 3F 80 1F 00 00 00 FC 00  .À.à....?€....ü.
13
003052D0  7E 00 00 00 F0 03 F8 01 00 00 C0 0F E0 07 00 00  ~...ð.ø...À.à...
14
003052E0  00 3F 80 1F 00 00 00 FC 00 7E 00 00 00 F0 03 F8  .?€....ü.~...ð.ø
15
003052F0  01 00 00 C0 0F C0 0F 00 00 80 1F 00 3F 00 00 00  ...À.À...€..?...
16
00305300  7E 00 FC 00 00 00 F8 01 E0 07 00 00 F0 03 80 1F  ~.ü...ø.à...ð.€.
17
00305310  00 00 C0 0F 00 FE 00 00 80 3F 00 F0 03 00 00 7E  ..À..þ..€?.ð...~
18
00305320  00 C0 1F 00 00 FC 01 00 FE 00 00 F8 03 00 F0 07  .À...ü..þ..ø..ð.
19
00305330  00 F0 07 00 80 7F 00 F0 1F 00 00 FC 0F F8 3F 00  .ð..€..ð...ü.ø?.
20
00305340  00 E0 FF FF 3F 00 00 00 FF FF 7F 00 00 00 F0 FF  .àÿÿ?...ÿÿ....ðÿ
21
00305350  7F 00 00 00 00 FF 7F 00 00 00 00 E0 3F 00 00 00  .....ÿ.....à?...
22
00305360  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
23
00305370  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................

Zumindest sieht das mit https://rawpixels.net/ ab Offset 0x88FEE mit 
einer Breite von 256 Pixeln dargestellte verdächtig nach einem Bild aus 
;-)

: Bearbeitet durch User
von Olli Z. (z80freak)



Lesenswert?

Hallo, nachdem das ja beim ersten Mal gut geklappt hat, habe ich hier 
noch ein etwas komplizierteres Übungsobjekt :-)

Es handelt sich um den Graphicprozessor eines Navigationssystems. Dieser 
wird mittels eines Cyclone-II (FPGA) erzeugt. Er lädt seine Firmware aus 
einem Flash-Speicher und auch einen externen SDRAM-Chip.

Ein Dump des Flashs aus einem solchen System habe ich beigefügt 
(fx_graphicsboard_flash_S29GL...bin). Das ist von einer älteren Version 
der Firmware.

Jetzt gibt es dazu eine Update-CD in der man u.a. die Datei "fgs.dnl" 
findet. Das Format dieser Datei habe ich wohl weitesgehend 
entschlüsselt. Im großen und ganzen verwendet der Updater diese um 
Paketweise die Daten an den Cyclone-II zu senden, welcher dann das Flash 
updated. Um aus der DNL wieder Einzeldateien zu erhalten habe ich mir 
ein kleines Programm in C geschrieben (dnl_unpack.exe). Die DNL besteht 
insgesamt aus 3 Dateien,

flash_application_area_00070000.bin => Dies wird wohl die Hauptanwendung 
sein die ausgeführt wird. Laut DNL-Datei wird sie mit der Startadresse 
0x70000 in den externen Flash geschrieben.

flash_fds_area_00020000.bin => Enthält nur irgendwelche Konfigdaten

flash_testmanager_area_00030000.bin => Keine Ahnung was das ist, 
vielleicht eine alternative Software für Funktionstests.

Nun finde ich darin auch ein paar Strings, vor allem in der App sind 
zahlreiche, inkl. verschiedener Sprachen. Aber ich habe noch nicht raus 
welche Prozessorarchitektur mit dem FGPA emuliert wird. Ich vermute ARM, 
hab auch schon beides mal auf Gut Glück probiert, sowohl LE als auch BE, 
aber da bekomme ich nur Müll raus als Code.

In der App findet man Hinweise zu einem uC/OS-II, was wohl das 
zugrundeliegende RTOS sein wird. Hier gibt es eine umfangreiche Doku 
dazu: https://doc.micrium.com/pages/viewpage.action?pageId=16879190

Gepackt oder verschlüsselt sehen mir die aus dem DNL extrahierten 
Dateien nicht aus. Einige Teile sind identisch mit dem Flash-Speicher 
Inhalt, obwohl es unterschiedliche FW-Versionen sind.

So, ich bin erstmal ratlos... habt Ihr eine Idee wie man weiterkommt?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.