2017-10-23 6 views
0

Ich kämpfe für ein paar Wochen mit zlib aufblasen Alghorithmus.Zlib aufblasen unerwartete Dekompressionsfehler

Ich möchte Pakete aus dem populären Spiel namens Tibia dekomprimieren. Sie haben es mit zlib aufblasen algorithms komprimiert. Aber es scheint, dass sich etwas geändert hat. Kannst du es überprüfen, vielleicht wirst du etwas entdecken, das mir fehlt?

Packet komprimiert: - nicht direkt aufgeblasen werden kann (seiner rohen Huffman feste Codierung - wahrscheinlich)

DA 22 A6 CB 10 99 5F AA 50 9C 9A AA 90 A8 90 05 B4 2F B5 44 41 C3 B1 28 D7 CA 50 53 8F CB B3 44 A1 3C 35 33 3D A3 58 C1 C8 44 CF C0 40 21 BF 4A 0F 

Packet dekomprimiert mit Reverse Engineering:

B4 16 2D 00 59 6F 75 20 73 65 65 20 61 20 6A 61 63 6B 65 74 20 28 41 72 6D 3A 31 29 2E 0A 49 74 20 77 65 69 67 68 73 20 32 34 2E 30 30 20 6F 7A 2E 

Dekomprimierte Paket mit zlib deflate komprimiert werden, CyberChef deflate/php deflate Funktionen:

db 22 a6 cb 10 99 5f aa 50 9c 9a aa 90 a8 90 95 98 9c 9d 5a a2 a0 e1 58 94 6b 65 a8 a9 c7 e5 59 a2 50 9e 9a 99 9e 51 ac 60 64 a2 67 60 a0 90 5f a5 07 00 

Daten stimmen an einigen Stellen überein, aber im Allgemeinen ist es anders. Weißt du, was der Fall sein könnte?

Ich lege ein Bild von RE eine aufblähenden Funktion: Screenshot from IdaPro

/// edit: Ich habe es geschafft, dieses Problem zu beheben, indem 00 00 ff ff Zugabe vor wenigen Pakete und Fütterung zStream mit Paket ohne es zu Reseting. Jedenfalls kann ich immer noch nicht alle Pakete aufblasen.

Hier Pakete sind in der richtigen Reihenfolge:

  1. http://wklej.org/hash/6aee9e223f0/txt/ - aufgeblasen richtig
  2. http://wklej.org/hash/bd371e7f510/txt/ - aufgeblasen richtig

Und hier ist das Paket, das nicht aufgeblasen werden kann -

  • http://wklej.org/hash/8f15935dc15/txt/ richtig aufgeblasen ...

    CA059BC6043619009FC9FFFFE831 
    
  • Antwort

    0

    Ihr Paket, das nicht aufgepumpt werden kann, ist wahrscheinlich Teil eines längeren Stroms komprimierter Daten, wobei andere Pakete ihm vorausgehen und ihm folgen. Sie müssen alle als einen einzelnen Stream dekomprimieren, damit die Dekomprimierung erfolgreich ist.

    +0

    Um ehrlich zu sein, habe ich Input-Hex-Stream aus dem Speicher kopiert, habe es Länge mit übergebenen Länge Parameter überprüft und dann Ausgabepuffer kopiert. Was ist seltsam, ich kann es nicht aufblasen wo immer sonst ... es ist zlib aufblasen, inflate wurde mit -15 param eingeleitet ... ist es möglich, dass ich Paket für Paket mit diesem dekomprimieren muss? ... Sie müssen wissen, dass ich extrahiert habe Funktionsparameter (auch zstream struct-Inhalt) im laufenden Betrieb von der Arbeits-App aus aufladen – Mateusz

    +0

    Komprimierung funktioniert durch Bezugnahme auf vorherige Daten. Dieses Paket bezieht sich auf Daten, die in einem vorhergehenden Paket sein müssen. Auch dieses Paket hat einen festen Block, der nicht der letzte Block ist, daher müssen komprimierte Daten folgen. –

    +0

    Nun, ich habe eine Lösung gefunden, indem ich 00 00 ff ff vor dem Aufblasen von Paketen hinzugefügt habe. Aber es funktioniert nicht für alle Pakete ... weißt du vielleicht irgendein zuverlässiges Handbuch über Zlib-Streams mit Z_SYNC_FLUSH? Bei kurzen Paketen erhalte ich "ungültige gespeicherte Blocklängen". Ich habe meine Frage mit Beispielen aktualisiert – Mateusz