Inkasso Trojaner unpacking ASPack

Weiter geht es mit Teil 2 dieses Blogeintrages. Wer die Vorgeschichte nicht kennt: http://nbusch.de/?x= … y:entry130619-171120
Um dieses Tutorial nachvollziehen zu können braucht ihr Grundkenntnisse über Portable Executable (PE) Dateien (also .exe ;) ) und Grundlegende Kenntnisse über Reversing.

Nun wollte ich mir die sehr seriös wirkende Rechnung von „Nico Gross Inkasso“ angucken. [Ironie]Da meine gesamten Office Tools das, anscheinend brandneue, Dateiformat .com nicht kannten und ich die Rechnung nicht sehen konnte, dachte ich, dass ich sie genau analysiere.[/Ironie]
Also dachte ich mir, schaue ich mir mal den Dateikopf an.
Für die Leute mit Linux System (Die Leerzeichen müssen mit Backshlashes escaped werden):

hd Kostenrechnung\ Niklas\ Busch\ Inkasso\ Reichelt\ GmbH\ Online.com | more 

hex.png
Huuuuuuuuuuch, was ist denn das? Ein PE Header. Wer hätte denn damit gerechnet? Spätestens jetzt war mir das klar, was mir von Anfang an klar war, die Datei ist ein Trojaner. Also startete ich meine Windows VM und schaute, was ich noch über die Datei herausfinden kann.
Zuerst habe ich die Datei in ProtectionID geladen und geschaut, was ProtectionID dazu sagt.


protectionid.png
Das Ergebnis war ziemlich eindeutig, die Datei ist mir ASPack gepackt. Zum Glück hat ASPack keine Sicherheitsmaßnahmen gegen unpacking an Bord, weswegen das unpacking extrem leicht ist.
Also lud ich die Datei erst einmal in Ollydbg. Nach dem typischen Gemecker von Olly, dass die Datei möglicherweise gepackt ist, konnte ich auch endlich etwas sehen.
olly.png
Okay, das ganze sieht ja soweit ganz nett aus. Da wir zum entpacken der Datei auf der Suche nach dem OEP (Original Entry Point) sind, also dem eigentlichen Einstiegspunkt des Programmes, welches gepackt wurde, wollen wir im nächsten Schritt schauen, dass wir diesen finden.
Da ASPack immer die gleiche Routine durchläuft, bis es beim OEP ist, können wir diese anhand der letzten eindeutig durch Angabe der letzten zwei Assembler Befehle in dieser Routine finden.
Diese beiden Befehle sind:

push 0
ret

Nach eine Sequenz von Befehlen kann man mit der Tastenkombination Strg+S suchen. Nach dem ret springt das Programm aus der unpacking Routine zum OEP. An diese Stelle setzen wir nun einen Breakpoint mit F2.
breakpoint.png


Nun lassen wir Olly durch drücken von F9 bis zu dem Breakpoint laufen. Durch das drücken von F7 gehen wir genau einen Befehl im Programm weiter und sind nun am OEP des Programms. Der Code sollte an dieser Stelle extrem komisch im Programm aussehen. Daher sollte wir Olly den Code nochmal Analysieren lassen. Dies machen wir durch die Tastenkombination Strg+A. Danach sollte der Code in etwa so aussehen.
oep.png
Und damit haben wir den OEP erreicht. Nun müssen wir lediglich das Programm am OEP dumpen und die Imports rekonstruieren und dann sind wir schon fertig.
Zum dumpen brauchen wir das Ollydgb Plugin OllyDump. Dieses findet ihr in dem Zip unterhalb dieses Tutorials.
dump.png
Nun könnt ihr per Rechtsklick auf „Dump debugged Process“ klicken und dadurch einen Dump erzeugen. Diesen müsste ihr nun irgendwo speichern. Wichtig ist, dass ihr euch Entry Point unter Modify in die Zwischenablage kopiert. Außerdem müsst ihr unten den Haken bei „Rebuild Import“ raus nehmen. GANZ WICHTIG: Olly darf nach dem dumpen nicht geschlossen werden.
Als nächstes brauchen wir nun „ImpRec“. Ich benutze Version 1.7e, welche ebenfalls in dem .zip File enthalten ist.
imprec.png
Als „Attach to Active Process“ wählen wir nun die in OllyDGB geöffnete Datei aus. Jetzt müssen wir den richtigen Entry Point angeben, damit ImpRec nach Imports suchen kann. Dazu geben mir unten links im Feld „IAT Infos needed“ unter „OEP“ unseren Entry Ponint an, den wir uns zuvor in OllyDump kopiert hatten. Nach einem Klick auf „IAT AutoSearch“ sollte und ImpRec jetzt sagen, dass er etwas an der angegebenen Adresse gefunden hat. Da dies der Fall ist, können wir uns jetzt alle Imports durch „Get Imports“ anzeigen lassen. Danach sollte euer Bild aussehen, wie abgebildet. Um nun unsere Datei wieder lauffähig zu machen müssen wir nur noch die Imports in unserer gedumpten Datei reparieren. Dafür klicken wir auf „Fix Dump“ und wählen die durch OllyDump gedumpte Datei aus. Der Dateiname wird von ImpRec beibehalten, jedoch hat die reparierte Datei einen „_“ am Ende des Dateinamens.


reshacker.png
Wenn wir uns die reparierte Datei nun in Resource Hacker anschauen sehen wir auch nette Resorcen, die vom Aufbau sehr einem PE File ähneln. An diesem Punkt haben wir nun den Crypter gefunden, mit dem der eigentliche Trojaner gecryptet wurde.
Ich hoffe, dass ich noch genügend Zeit finde diesen auch zu entpacken und damit dann an die eigentliche Datei komme, um etwas Malware zu Reversen.

Download - Unpacking Tools