Löse dieses Hex-Rätsel! - Was ist bei meiner Ausgabe-Umleitung falsch gelaufen?

641
Mel

Im Anschluss an meine Frage TF101 Android: Image Block Device über ADB, in dem ich erfolglos versuchte, ein Roh-Image eines Block Devices durch Ausgabeumleitung zu speichern, versucht diese Frage festzustellen, was schief gelaufen ist.

Situation :

Ein Blockgerät auf einem Android-Gerät wurde zweimal ausgelesen.

  1. Einmal (nicht erfolgreich) mit: Adb-Shell su -c "dd if = / dev / block / mmcblk0p7" | pv> faulty.raw
  2. Einmal (erfolgreich) nicht mit Ausgabeumleitung, sondern durch Verwendung von netcat, was zu erfolgreichem.raw führt

Das Dateisystem ist ext4. Die Roh-Image-Dateien wurden mit dem folgenden Befehl verglichen:

cmp -l faulty.raw successful.raw | mawk 'function oct2dec(oct, dec) ; return dec} ' | head -n 100 

Die resultierende Ausgabe zeigt nur die Unterschiede zwischen den beiden Dateien im Hex-Format. Die erste Spalte ist der Datei-Offset, die zweite Spalte gibt den Wert im fehlerhaften Image und die dritte Spalte den Wert im erfolgreichen Image an.

Kann jemand sehen, was mit dem Befehl bei der Ausgabeumleitung aus diesem binären Vergleich schiefgelaufen ist? Außerdem: Kann das (fehlerhafte) Bild durch Korrekturen wiederhergestellt werden? Die Dateigrößen sind vergleichbar

0000040D AE 37 0000040E 5D 8A 0000040F 22 2A 00000411 1D BE 00000412 03 01 0000042D 2B 30 0000042E AD 47 0000042F 1B 20 00000431 2B 30 00000432 AD 47 00000433 1B 20 00000435 B7 B9 00000490 0D 3D 00000491 2E 1E 00000493 30 D8 00000494 7B ED 00000495 56 44 00000498 4B 8B 00000499 62 59 0000049B 20 C0 0000049C 4D 6B 0000049D 2C BF 000004A0 0D 3D 000004A1 2E 1E 000004A3 68 10 000004A4 B6 49 000004A5 61 59 000004A8 4B 8B 000004A9 62 59 000004BB E0 C0 000004BC 16 46 000004BD AD 82 000004C3 20 C0 000004C4 4D 6B 000004C5 2C BF 000004E9 58 00 000004EA 40 00 000004EB 17 00 0000050D 0D 0A 0000050E 0D F3 0000050F 0A 02 00000510 F3 00 00000511 02 03 00000513 03 00 0000051D 00 FA 0000051E 00 79 0000051F FA 00 00000520 79 00 00000521 00 05 00000522 00 06 00000523 05 00 00000524 06 00 00000525 00 FA 00000526 00 79 00000527 FA 00 00000528 79 00 00000529 00 06 0000052A 00 06 0000052B 06 00 0000052C 06 00 0000052D 00 05 0000052E 00 86 0000052F 05 00 00000530 86 00 0000055D 00 1C 00000561 1C 02 00000563 02 00 00000579 00 14 0000057A 00 D2 0000057B 50 63 0000057C 4F 12 0000057D 54 00 0000057E 12 00 00001001 00 03 00001002 00 04 00001003 03 00 00001004 04 00 00001005 00 04 00001006 00 04 00001007 04 00 00001008 04 00 00001009 00 05 0000100A 00 04 0000100B 05 00 0000100C 04 00 0000100F 00 F6 00001010 00 1F 00001011 F6 01 00001012 1F 00 00001013 01 04 00001015 04 00 00001021 00 03 00001022 00 84 00001023 03 00 00001024 84 00 00001025 00 04 00001026 00 84 00001027 04 00 00001028 84 00 00001029 00 05 

Arbeitstheorie

Könnte dies möglicherweise auf eine Nichtübereinstimmung der Codepage zwischen dem Android-Gerät und dem Gerät zurückzuführen sein, auf dem Adb ausgeführt wird? Ich denke aus zwei Gründen daran:

  1. Die übereinstimmenden Bytes sind oft "00", was meiner Meinung nach in verschiedenen Codepages gespeichert ist.
  2. Es scheint eine überraschend große Anzahl von direkten Konvertierungen zu geben Byte1 -> Byte2. Zu viele, um völlig zufällig zu sein.

Beispiele:

  • 20 -> C0 (siehe 0000049B und 000004C3)
  • 62 -> 59 (siehe 00000499 und 000004A9)
  • 0D -> 3D (siehe 00000490 und 000004A0, jedoch bei 0000050D und 0000050E unterschiedlich)
  • 1B -> 20 (siehe 0000042F und 00000433)
  • 2B -> 30 (siehe 0000042D und 00000431)
  • 2C -> BF (siehe 0000049D und 000004C5)
  • 2E -> 1E (siehe 00000491 und 000004A1)
  • 4B -> 8B (siehe 00000498 und 000004A8)
  • 4D -> 6B (siehe 0000049C und 000004C4)
  • AD -> 47 (siehe 0000042E und 00000432, jedoch abweichend bei 000004BD)

Wie Sie sehen, eine bemerkenswerte Konsistenz. Die Unterschiede können auf Änderungen am Blockgerät zwischen den beiden Bilddateien zurückzuführen sein.

Kann jemand die Codepage der ersten Datei identifizieren? (Wenn diese Theorie tatsächlich hält.)

1

1 Antwort auf die Frage

0
Mel

Es stellte sich heraus, dass das Problem viel einfacher war als meine Arbeitstheorie.

adb lief auf einem Windows-Rechner. Es wurde jedes '\ n' Zeichen durch '\ r \ r \ n' ersetzt. Die Datei wurde mit dem mehrzeiligen Perl-Skript dieser Antwort wiederhergestellt .