RCE – SFT Loader 2006


Manually Unpacking Yoda’s Protector 1.03.3
Vor kurzem erschien der neue SFT Loader 2008 in der Final Version. Da wird es auch mal Zeit, dass man sich den alten 2006er mal genauer anschaut. Ich zeige euch hier wie man den lästigen Protector entfernt. Grundlegende Reverse Code Engineering Kenntnisse sollte man haben um alles gut zu verstehen.

Der SFT Loader 2006 ist geschützt mit Yoda’s Protector 1.03.3. Yoda’s Protector ist Open-Source und wurde schon seit 2004 nicht mehr weiterentwickelt.
Wir brauchen für’s unpacken folgende Tools:

Viele User beklagen sich das öfters mal ihr Windows einfriert (besonders gern die Taskleiste) beim Starten des Loaders. Dieses Problem wird durch diesen Protector verursacht. Genauer gesagt ist es auch eine Anti-Debugger Technik. Den Protector zu entfernen hat also mehrere Vorteile: Bessere Performance, weniger Fehler.

Wir laden die leecher.exe in den OllyDbg rein und setzen folgende Einstellungen:
Options -> Debugging options -> Events -> Häkchen bei Break on new module Klick
Plugins -> Hide Debugger -> Options -> Häkchen bei Unhandled exception tricks Klick
Bei dem 2. Plugin könnten wir noch mehr Anti-Debug Tricks ausschalten, aber ich finde den Rest sollte man per Hand fixen, dass es nicht zu leicht wird.

Danach starten wir das Programm im Debugger. Wir sollten wie eben konfiguriert bei einer neuen DLL halten. Nochmal starten und wir breaken in der user32.dll Klick. Nun entfernen wir das Häkchen wieder bei Break on new Module. Jetzt kümmern wir uns um die Anti-Debugger Tricks.
Die Tricks benutzen folgende Windows APIs:

  • BlockInput: Diese API ist für das Windows freezen verantwortlich
  • IsDebuggerPresent: Standard API fürs checken ob ein Debugger läuft
  • GetCurrentProcessId: Wenn das Programm durch einen Debugger gestartet wird holt diese API 2 unterschiedliche Process IDs (PID). Wenn diese PIDs nicht identisch sind -> Debugger erkannt.

In welcher Reihenfolge wir die APIs bearbeiten ist egal. Die Speicheradressen der APIs unterscheiden sich von PC zu PC.

API: GetCurrentProcessId
Um die API zu finden benutzen wird das Go to -> Expression (STRG+G) Feature in Olly. Einfach die API eingeben Klick und wir landen bei ihr Klick. Wir NOP’en (Markieren -> Rechtsklick -> Binary -> Fill with NOPs) alles bis zum RETN, danach benutzen wir ImpREC um die Process ID von Olly zu bekommen Klick. Wenn wir die haben schreiben (Rechtsklick -> Assemble) wir in die API „MOV EAX, PID“. Wobei die PID eben immer unterschiedlich ist. Klick

API: IsDebuggerPresent
Wieder mit Go to -> Expression finden Klick und alles NOP’en bis zum RETN. Wir schreiben in die API „MOV EAX, 0“. Klick

API: BlockInput
Zur API gehen (siehe oben), alles NOP’en bis zum RETN und ein Breakpoint (Rechtsklick -> Breakpoint -> Toggle) auf das RETN setzen. Klick

OEP finden
Nun sollten wir alle Anti-Debug Tricks erfolgreich ausgeschalten haben. Wir starten das Programm (F9) und breaken im RETN der BlockInput API (wir hatten ein Breakpoint da gesetzt). Nochmal starten und wir sollten noch einmal in der gleichen Stellen halten. Sollte das nicht der Fall sein habt ihr irgendwas falsch gemacht bei den APIs. Jetzt öffnen wir das Memory Window (ALT+M) und setzen ein Memory Breakpoint (Rechtsklick -> Set Memory Breakpoint on access) auf die Code Section des leechers Klick. Anschliessend führen wir das Programm nochmal aus und wir sollten beim Original Entry Point (OEP) halten Klick. Jetzt benutzen wir das OllyDump Plugin (Rechtsklick -> Dump debugged process). Das Häkchen bei Rebuild Import muss weg ansonsten sollten die Einstellungen so sein wie auf dem Screenshot. Danach auf Dump klicken und einen Speicherort auswählen.

Rebuild IAT
Wir lassen Olly so offen wie er ist und starten nochmal ImpREC. Wir wählen den Prozess der leecher.exe aus und schreiben bei OEP diese RVA rein: 1B1DCC. Danach gehen wir auf IAT AutoSearch und anschliessend auf Get Imports Klick. Jetzt noch oben auf Show Invalid. Wir machen einen Rechtsklick -> Trace Level1 (Disasm) und alle Imports sollten erfolgreich gefixt sein Klick. Wir klicken noch auf Fix Dump und wählen unseren vorher angefertigten Dump aus -> fertig.

Testen des entpackten Leechers
Der Loader sollte jetzt ohne Probleme starten und alles scheint OK zu sein. Aber sobald man etwas downloaden möchte kommt ein Error. Was ist da los? Haben wir einen Fehler gemacht? Nein, natürlich nicht. Der Entwickler hat noch einen kleinen Check eingebaut der die Dateigröße überprüft: Klick

Hex: 1B7740; Dec: 1800000
Leecher Dateigröße vor dem entpacken: 1327104 bytes
Leecher Dateigröße entpackt: ca. 2746633 bytes
Wir sehen also, vor dem entpacken ist die leecher.exe kleiner als 1800000 bytes und nach dem entpacken logischerweise größer, deshalb greift der Jump und wir springen in einen ERROR. Diesen Check kann man ganz leicht mit OllyDbg fixen. Einfach den Hex Wert erhöhen z.B. 3B7740 und Rechtsklick -> Copy to executable.

Man könnte den Loader natürlich jetzt weiter bearbeiten und analysieren, z.B. den Sniff-Schutz ausschalten oder die SFT Dateien genauer untersuchen, aber das möchte ich euch nicht zeigen. Findet es selber heraus. Übrigens ist der SFT Encrypter 2006 genauso geschützt. Man kann ihn also genauso leicht entpacken.

So das war’s. Dieser Artikel ist leider nicht sehr anfängerfreundlich. Wer aber auf den Geschmack gekommen ist und mehr wissen möchte, der sollte sich diese Tutorials anschauen: http://www.tuts4you.com/download.php?list.17
Demnächst zeige ich euch wie man den Protector von dem neuen SFT Loader 2008 entfernt.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *