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?
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
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?
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
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.
. . schrieb im Beitrag
#6096355:
> Die Bezeichnung "IMX322LQJ" taucht im bin auf.
Dann hätten wir schonmal den Bildsensor gefunden :-)
. . 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.
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.
. . 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
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
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€ |
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
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.
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
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)
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
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?
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.