.........................................,,,,,,,,,,;;;;;;;;;;::::::::::W A R N U N G::::::::::;;;;;;;;;;,,,,,,,,,,............................................

              Dieses Tutorial dient ausschließlich Lernzwecken und ist nicht als Anstiftung zu einer illegalen
               Handlung zu  sehen! Sämtliche hier aufgeführten Übungen und Prozeße sollen lediglich das
               Verständnis von Programmierungsmöglichkeiten veranschaulichen und die diversen Möglichkeiten
               eines Schutzes gegen illegale Benutzung einer Software anzeigen.
               Dies kann unter Umständen Programmierern helfen, ihre Schutzmechanismen in eigenen Applikationen
               stark zu  verbessern! Sobald jemand unter Anleitung oder mit dem eigenen Wissensstand die
               Sicherheits-, Registrierungs- oder sonstigen Mechanismen umgangen bzw. ausgeschaltet hat, ist die somit
               funktionstüchtige und ohne Einschränkungen laufende Software SOFORT und ohne VERZÖGERUNG
               vom System zu entfernen.
               Dies beinhaltet die Deinstallation und das Löschen aller Datein und  Registrierungseinträge!

               DIE WEITERE BENUTZUNG GECRACKTER/GEPATCHTER  SOFTWARE IST ILLEGAL
               UND WIRD VOM GESETZTGEBER GEAHNDET!
               DER AUTOR/DIE GRUPPE ÜBERNIMMT KEINE VERANTWORTUNG FÜR JEGLICHE
               HANDLUNGEN  DIE GEGEN GELTENDES RECHT VERSTOßEN!!!

     ......................................,,,,,,,,,,;;;;;;;;;;::::::::::[NeuRom@nCerZ]::::::::::;;;;;;;;;;,,,,,,,,,,.............................................


Target- Programm:
Advanced Arj Password Recovery 1.07
Größe:
600 KB
Verwendete Toolz:
Softice ab 2.32 ; Hview 6.04

               Ziel  Prog ->  www.elcomsoft.com
               Schwierigkeit: Mittel -> Hard
               maked by Viper Zx
 
 
              Einschränkungen (unregistriert): -wordlist Attack ist deaktiviert
                                                              -Passwortlänge auf 5 beschränkt :-(

              Schutzart:                                 -Serialnummereingabe
                                                              -NEOLITE gepackt      Very importend!!!

              Schutzdeaktivierung:                 -Prog schreibt sich bei jedem Start selber zur Vollversion ;-)
 
               Los geht´s
 

               Prog installiert und gestartet wir sehen das die Passwortlänge nicht über 5 heraufgesetzt werden kann
               und die Wordlist Atacke deaktiviert, ist soweit sogut.
               Uns sticht natürlich sofort das Schlüsselsymbol ins Auge wir klicken drauf und es kommt die
               Serialnummerneingabe also eine Fake Nummer rein und O.K gedrückt es kommt eine kleine
               Grafikspielerei ;-) und einen BOX mit Invalid.... .:-(
               Ohhhhh eine BOX also Softice an (Ctrl+D) Breakpoint auf bpx messageboxa wieder eine
               Fakenummer rein und O.K gedrückt  an aus an aus.... Softice breakt wir drücken F12
               jetzt sehen wir die Messagebox drücken O.K und Softice kommt wieder angesprungen.
               In Softice scrollen wir nach oben und schauen mal nach ob da nicht etwa ein JNZ JZ etc. ist
               und tatsäschlich da ist einer, okay alle Break´s löschen (bc*) und einen auf den JZ setzen F9.
               Jetzt wieder eine Fakenummer eingeben Softice breakt an unserem JZ wir verändern
               diesen mit "a" Enter ins gegenteil ->jz 004026EE Enter ESC  Prog laufen lassen (F5).
               Bingo die "Good Boy" Meldung kommt also auf O.K und Passwordlänge raufsetzen
               ahhhhhh es geht nicht ?!?!?!?!?
               Das war also nur die reine Okay Ausgabe die wir gepatcht haben
               bc*  wieder break auf Messageboxa  Fakenummer rein o.k gedrückt Softice kommt,
               bis zum JZ hochscrollen und jetzt die Zeilen darüber anschauen hmmmmmm
               ein Test eax,eax darüber ein Call alle break´s löschen und einen Break auf den Call 004026E6
               Faknum.... etc. Softice kommt wir stehen auf dem Call jetzt drücken wir F10 um Zeile
               für Zeile abzuarbeiten auf dem test eax,eax sehen wir das das Register EAX 0 enthält
               würde es 1 (oder mehr egal Haupsache nicht 0) enthalten würde der JZ  004026EE das "richtige" machen.
               Die 0 bekommt das EAX Register aus dem Call dort muß die Abfrage Registriert oder Nicht erfolgen!!!
               F5 unseren Break können wir gleich lassen ,Faken.......... Softice breakt wieder auf dem Call
               JETZT F8 um in den Call reinzugehen ein bisschen mit denn Pfeiltasten runterscrollen um einen
               Überblick zu bekommen , es würde normalerweiße ausreichen direkt am Anfang jetz einen

                mov eax,00000001
                ret
                reinzuschreiben.

                Doch wir machen es anders (Warum??? Später mehr dazu) wir lassen denn Call mit F10 Zeile für Zeile
                abarbeiten bis wir aufeinmal bei einem 004023AD xor eax,eax stehen das bedeutet er springt weil ja eine Falsche
                Serial drinsteht auf diese Adresse  die  jetzt das Register EAX auf 0 setzt sprich "Unregistriert" das wollen
                wir doch nicht oder??? ;.-)
                Am xor eax,eax "a" gedrückt und diesen in einen mov eax,ecx umgeschrieben dies hat zur folge das
                jetzt aus dem ECX Register der dort enthaltene Wert in das EAX Register verschoben wird und dieser
                muß ja nur größer als 0 sein (mann kann auch ein anderes Register nehmen Hauptsache der enthaltene Wert
                ist größer als 0).
                Break´s löschen Prog laufenlassen F5 wieder die "Good Boy" Meldung auf O.K und Jaaaaaaaaaaa
                das Schlüsselicon wird deaktiviert ,Wordlistattack aktiviert und die Passwordlänge kann beliebig erhöht
                werden.

                Wir haben es mal wieder geschaft!!!!!
                Hview F4 F3 F5 die betreffende Stelle eingegeben Ahhhhhhhhhhhhhhh eine Rote Meldung  Nicht gefunden
                WIESO????
 
                 Wir schauen uns im Hexeditor denn Anfang des Programm´s an und was sehen wir das Prog ist mit
                 NEOLITE gepackt. SCHEI............!!!
 
                 Jetzt sagen manche bestimmt geht nicht zu Patchen, die Serial Sniffen wäre die einzige Möglichkeit das Prog zu
                 Registrieren ein paar Cracker mit mehr Erfahrung würden das Prog  Process Patcher (super Tool)
                 benutzen.Dieses Patcht das Prog beim aufrufen direkt im Speicher ->

                 Eingaben für  Process Patcher 2.4:
 
                 Number of bytes to patched
                 2
 
                 0x4023AD:0x33:0x8B
                 0x4023AE:0xc0:0xC1
 
 
 

                 Und das war´s jetzt???? NEEEEEEEEEEEEIIIIIIIIIIINNNNNNN!!!
 

                 Hinweis :Das ist der Schwere Teil des Crack´s aber auch der Coolste ;-)!!!
                               Wer das verstanden hat kann vom Prinzip her (alle)  z B. Folder Remaker ;unbekannter Packer) gepackten
                               Prog´s umschreiben!!! (muß das aber erst noch mit anderen Packern etc. testen)
 
 

                 Okay auf zum  Hardcore Crack ;-)
 

                 Ersteinmal was zum Ablauf eines gepackten Programm´s anders als bei nicht gepackten Prog´s wo
                 die Codezeilen  im Speicher wie im Hexeditor schön ordentlich immer an der gleichen Stelle stehen
                 und man seine "Änderung ;-))" schön durchführen kann.
                 Bei gepackten Prog´s ist das alles aber ganz anders und zwar entpackt sich das Prog erst im Speicher
                 aber die ENTPACKERROUTINE darf ja nicht gepackt sein ;-) die Arj.exe ist ja auch nicht mit Arj
                 gepackt ;-).
                 Also müßen wir ersteinmal das Prog gleich am Entry Point (wo das Prog losläuft) breaken dort ist
                 es ja noch ungepackt. Wie machen wir das und wie bekommt man denn Entry Point raus???
                 Ganz einfach denn Entry Point bekommt man z.B mit Wdsam32 raus AAPR disassemblieren viel
                 wird da natürlich nicht angezeigt aber der Prog Entry Point steht da :-).(Hview zeigt es unter Header auch an)
                 Das wäre bei unserem Programm 00401000 doch wie halten wir auf diesem an???
                 Dazu Laden wir AAPR in Hview gehen mit F5 an 00401000 und sehen einen JMP diesen ändern wir in
                 CC (Int 3) es wird nur die Kennung E9 überschrieben diese  merken uns aber.
                 In Softice setzen wir einen Break auf Interupt 3 "BPINT 3".
                 Jetzt starten wir AAPR Softice kommt würden wir das Prog jetzt mit F5 weiterlaufen lassen tät es abschmieren.
                 (Int3 klar?) also müssen wir denn ursprünglichen Programmcode wieder herstellen (die E9)und das geht so.
                 Wir drücken in Softice d eip (eip=Startadresse des Prog´s) und sehen im Codefenster (oben) bei 00401000
                 unser CC mit der Maus klicken wir auf dieses bis der Cursor dort blinkt jetzt schreiben wir unsere E9 wieder
                 zurück und drücken Enter.Das Prog ist wieder lauffähig :-) (nur im Speicher ;-)).
                 Wir sehen auch oben rechts bei Softice die Kennung des Packer´s "Neolite.......).
                 Wir stehen auf unserem JMP und drücken F10 und arbeiten Zeile um Zeile ab als wir über denn Call bei
                 Adresse  004010AF  kommen steht aufeinmal nicht mehr Neolite .... im Fenster sondern irgentwelcher
                 Programmcode, irgentwelcher NEIN das komplett entpackte Prog im Speicher und wir stehen bei
                 Softice ebenfalls schon auf einer NUR IM SPEICHER EXISTENTEN Stelle hier können wir nicht´s
                 mehr machen.
                 Okay also über dem Call dürfen wir nicht drüberweg, gehen wir eben hinein (F8) und weiter mit F10
                 Zeile für Zeile bis wieder der entpackte Code im rechten Fenster auftaucht das passiert bei Adresse
                 00401816 in diesen Call gehen wieder hinein F8 und weiter bei Call 006D09A0 passiert´s wieder
                 Prog entpackt DOCH JETZT HALT!!! Diese Adresse merken wir uns.
                 Und zwar die CODEFOLGE  E881030000                  .

                 Jetzt ersteinmal eine Erklärung zum besseren Verständnis.

                 Wenn wir über denn Call bei 006D09A0 gehen ist das Prog im Speicher entpackt und wo befinden wir uns???
                 Das werden wir gleich wissen Hview an Prog laden F4 F3 F7 bei Suchen auf HEX gehen und unsere
                 Bytefolge eingeben E881030000  BIIIIIINNNNGOOOOOOO!!!
                 Dieser Codeteil ist noch ungepackt wir können ihn editieren und im Speicher ist nach dem Call das Prog
                 an dieser Stelle schon entpackt. COOL
                 Wir merken uns als erstes die Call Adresse als Offset (unter Hview bekommt man das Offset wenn man F3
                 zum edidieren drückt).. aus 006D09A0 im Speicher wird unter Hview 00401928 ->Offset 00000F28
                 Was bedeutet das alles ???
                 Wir stehen nach dem Call, DAS PROG IST IM SPEICHER ENTPACKT an einer ungepackten sprich mit
                 dem Hexeditor manipulierbaren Stelle.
 

                  Was können wir jetzt machen???
                  JA, wir können jetzt das Prog registrieren. WIE???

                  Und so geht´s:

                  Dazu brauchen wir eine Freie Stelle im Programm wo wir unseren Patch unterbringen können.
                  Wir nehmen Hview laden AAPR und nehmen die Hex Ansicht F4 F2.
                  Drücken F5 geben unsere "CallAdresse" ein 00000F28 ab hier scrollen wir solange nach unten
              (WICHTIG!!!
               nur nach unten die Freien Stellen die man mit Hview oberhalb sieht sind UNBRAUCHBAR da man
               da beim Programmablauf an INVALID Stellen kommt.Ebenso UNBRAUCHBAR sind freie Stellen
               die bei dem gepackten Code auftauchen man kan NUR die freien Stellen beim noch ungepackten
               Code nehmen!!!)
                  bis wir eine Freie Stelle entdecken diese kommt bei Offset 00001FB7 dort ist viel Platz :-). Adresse merken!!!
                  Jetzt gehen wir wieder zu unserem Call 00000F28  dieser muß ausgeführt werden (zweck´s entpacken)
                  also auf die nachfolgende Zeile mov edx,[esi][00004] aus der machen wir einen Call 00001FB7 
                  dieser führt uns zu der freien Stelle dort geben wir unseren Patch ein ->
 
                   Hview Schreibweise:

                   mov b,[004023AD],08B         ;die Adresse kennen wir doch noch ;-)
                                                                  ;das bedeutet gehe zu Adresse 004023AD, ist ja im Speicher entpackt ;-)
                                                                   und ändere das xor zu mov (8B)

                   mov b,[004023AE],0C1          ;ändere eax zu ecx (C1)

                   Ja das ist unser Patch denn wir im ersten Teil des Tutor´s gemacht haben.

                   jetzt die durch unseren Call überschriebene Codezeile:

                   mov edx,[esi][00004]
                   ret                        ;wir gehen aus unseren Call wieder raus und das Prog läuft weiter
 
                   Alles Speichern Pog starten Softice kommt ,achso wir haben ja noch unseren INT 3 drin.
                   ändern wieder die Stelle d eip E9 und drücken gleich mal F5 ob es aucch funktioniert
                   ahhhhhhhhh  doch was ist das ein Absturz WIESO????

                   Also AAPR wieder starten und mit F10 hinterher bis zu unserem Call  00001FB7 stehen
                   hier F8 wir kommen zur freien Stelle wo unser Patch ist.
                   Doch was ist das es steht nur noch ein geringer Teil unseres Patches da?!?!?
                   Der Rest ist von einem anderen Code überschrieben wurden. SCHEI......
                   Ja unter Hview war dort viel platz aber jetzt :-(
                   Also eine größere Freie Stelle suchen!!!

                   Anmerkung: an dieser Stelle hätte ich fast aufgegeben , es gibt nämlich keine andere GROßE Freie Stelle
                                      die NICHT überschrieben wird. (bei Folder Remaker war das besser ;-))

 

                    Was JETZT?????
 

                    Ich habe eine weile gepraucht (2-Tage) bis mir etwas auffiel und mir eine Idee kam.

                    Wir laden eine ungepatchte Version von AAPR!!!
                    Nur den Int 3 müssen wir wieder reinschreiben ;-)
                    Mit Softice gehen wir bis zur Stelle 00000F28 jetzt lassen wir das Prog mal Zeile für Zeile weiterlaufen (F10).
                    da kommt ein JZ der SPRINGT und das interesante daran nach dem JZ kommen noch ein paar Zeilen die aber
                    scheinbar gar nicht abgerufen werden er SPRINGT ja vorher weg er würde aber sowieso nach 4 Zeilen auf einen
                    JMP treffen der ebenfalls an die gleiche Stelle wie der JZ springt.
                    Gleich mal testen nach dem JZ Break´s setzen bis auf den JMP und AAPR laufen lassen er hält nicht an :-)
                    Dieser Code wird also nicht ausgeführt!!!

                    Das machen wir uns zunutze das ist nämlich viel Platz.
 
                    Hview an Prog laden an Stelle 00000F28  springen.
                    Denn Cmp bei 00000F3E brauchen wir schon nicht also, ab hier bis zum 00000F57  JMP 00000E99  können
                    wir schreiben ;-). Alles Offset Adressen!!! F3 bei Hview!!!
 
                    mov b,[004023AD],08B
                    mov b,[004023AE ],0C1
 
                   dann der JMP 00000E99

                   Okay das war´s :-) wir testen das, starten Prog Int 3 :-) F5 schmiert ab :-(!!!!
                   Heeee was ist los das kann doch nicht war sein !!!

                   Also mit Softice verfolgen, wenn wir dann wieder bei unserer Änderung ( 00000F3E )stehen
                   passen wir genau auf Zeile für Zeile erster mov o.k zweiter mov o.k Änderungen wurden durchgeführt ????
                   Wir kommen auf den JMP jetzt verfolgen wir mit F10 aber weiter und Uppppps wir kommen nochmal an unsere
                   Stelle erster mov o.k zweiter mov. Absturz!!!

                   Er führt unseren Code also mind. 2 Mal aus, das darf er aber nicht die Änderung darf aber nur einmal erfolgen!!!
                   Was jetzt ,keine Panik wir haben ja Platz.

                    Er darf also nur einmal unsere Mov ´s ausführen.
 
                    Das machen wir so:

                    wo jetzt unser erster mov steht schreiben wir mit Hview:
 
                    test eax, eax               ; eax hat beim erstenmal  0
                    jne 00000F57            ; dieser jne wird erst ausgeführt wenn EAX mehr als 0 hat  (JNE ist dasselbe wie JNZ unter Sice)
                                                      ; wenn er springt dann hinter die mov´s ;-)

                    mov b,[004023AD],08B                       ; unser Patch
                    mov b,[004023AE],0C1
                    JMP 00000E99
 
                    So wir testen das mit Sofice wir kommen also an bei dem test eax,eax schauen wir ins Register EAX
                    und sehen das es 0 hat ist ja Super der jnz (jne Hview) wird nicht ausgeführt es geht auf unseren Patch und dann
                    Springt der JMP wir machen weiter. Okay wir kommen das zweite mal der test eax,eax kommt EAX
                    hat mehr als 0 der jnz wird ausgeführt wir springen direkt über die Mov´s zum JMP Jeeeeeppppiiiiii.
                    Es müßte gehen die mov´s werden nur noch einmal ausgeführt. Also F5 und Prog laufen lassen.
                    Ahhhhhhhhh er schmiert ab WAS IST JETZT LOS !!!! Ich war am heulen ;-).

                    Das ganze wieder mit Softice überprüfen 1 mal mov´s werden ausgeführt 2 mal werden nicht ausgeführt
                    und weiter 3 mal werden nic.... Hoppla werden wieder ausgeführt SCHEI....
                    EAX enthält wieder eine 0. Die ganze Routine wird 4 mal ausgeführt!!!
 

                    Aber die mov´s dürfen nur einmal ausgeführt werden!!!
                    Mit denn Registern klappt es aber nicht. Das war´s ich bin am ENDE.
                    Doch dann der Geistesblitz ich patche meinen Patch ist das nicht COOL??? (vieleicht geht´s auch noch irgendwie anders
                                                                                                                                        aber ich verstehe nicht soviel von ASM ;-))

                    Wir erinnern uns der test eax,eax muß bleiben auch der JNE er springt nicht beim ersten mal  geht
                    über die mov´s  und jetz fügen wir noch einen mov ein der unseren JNE zum JMP macht (geil) so das er
                    ab dem 2 mal auf NUR noch auf den JMP springen kann und unsere Mov´s werden nur beim erstenmal ausgeführt.

                    Listing:

                    test eax, eax
006D09B8   jne 00000F57                            ;Offset Adresse
                    mov b,[004023AD],08B
                    mov b,[004023AE],0C1            ; Keine Offset Adressen
                    mov b [006D09B8],0EB            ;ändert den jne auf jmp /die Adresse bekommt man mit Softice raus!!!
                    Jmp 00000E99                           ;Offset Adresse
 
 
                    Wir ändern noch den Int 3 auf E9 speichern ab.
                     Luft anhalten wir starten das Prog doppelklick (oder Enter) ;-)
 
                     JAAAAAAAAAAAAAAAAA ein CRACKER ist geboren.

                    Das Prog startet ohne Probleme und ist Registriert wie wir es von Process Patcher
                    her kennen nur das es sich selber umschreibt ohne FREMDE hilfe!!!
 

 
 Meine Grüße gehen an alle Mitglieder von NeuRoM@nCerZ, besonderen DANK gilt MAEX denn ohne
 sein Know How über ASM wäre ich NIE soweit gekommen!!!
 

Viper Zx
[NeuRoM@nCerZ]
 
 

GCCNavigator
ForumEssaysCrackMesToolsLinx
KontaktMainUpdates