.........................................,,,,,,,,,,;;;;;;;;;;::::::::::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]::::::::::;;;;;;;;;;,,,,,,,,,,.............................................
|
|
|
|
|
|
|
|
|
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
|