|
|
|
|
|
|
|
|
|
|
||
|
||
|
|
There is a crack, a crack in everything. That's how the light gets in. |
|
Es ist ein TSR Programm im
vollen Umfang, hat aber eine ärgerliche Eingenschaft, denn zu zufälligen
Zeiten erscheint der Nag Screen, der uns auffordert, dieses Teil zu Kaufen.
Es kontrolliert das BIOS, zeigt den Speicherinhalt in Assembler, Hex und
im Textformat an und vieles mehr. Nicht schlecht für nur 40K.
|
Alle Anfänger können von meinen Fehlern lernen und es in Zukunft besser machen
Los geht`s mit der
Anleitung ...
SOFTICE laden, und im Windows File Manager
die Option "Quick View" auf das Zielfile (MAP.EXE) anwenden. OK,
es ist ein MS-DOS Programm, aber das soll uns nicht von der Arbeit ablenken.
Mein erster Schritt ist das Durchsuchen des Quelltextes nach lesbaren Texten. Jedes noch so kleines Bruchstück hilft uns, den Ablauf besser zu verstehen.
Ein kleiner Tip: -Benenne die MAP.EXE in MAP.TXT um und öffne sie im Notepad
Auf der anderen Seite
merkt Wordpad, das es eine ausführbare Datei ist, und öffnet
sie nicht.(Wer weis warum?)
OK, was sehen wir.... Ah, einen Hinweis,daß
das Programm beginnt mit:-
MZ;0 Uÿÿì Ü LZ91
Dieser sagt uns, daß
die Datei durch den DOS Packer LZEXE V0.91 komprimiert wurde.Wir könnten
noch weiteren Text lesen, das aber ist momentan nicht von echtem Interesse.
Wir könnten, wenn wir wollten, diese Datei jetzt entpacken, z.B. mit
UNP oder UNLZEXE, aber daß ist im Moment nicht notwendig. Beim Start
des Programm`s wird es ja eh im Speicher entpackt und wir können darauf
zugreifen.
Das Entpacken des Programm`s,
damit wir ein "Dead Listing" vom Code erstellen können (mehr dazu
später, alles zu seiner Zeit) hilft uns nicht viel, da unser Wissen
über Assemblerbefehle und der Aufbau des internen Code`s begrenzt
ist oder im Monent nicht vorhanden ist
Starten wir nun die MAP.EXE mit einen Doppelklick im Dateimanager. Während wir auf den NAG Screen warten testen wir die Eigenschaften des Programm`s aus. es dauert nicht lang und der NAG Screen erscheint. Hier stellen wir folgendes fest:-
1. Beim ersten Mal haben wir 2-3 sec Pause, ehe wir wieder eine Taste drücken können. Das ist der Standard für diese NAG Screen`s . Alle folgenden NAG Screen`s bestehen aus 3 Abschnitten:-
1b. Anzeige der Nachricht.
2-3 seconds
Anzeigen der erforderlichen
Taste zum Schliessen des Windows
Bei dem nächsten NAG Screen drücke
Strg und d zusammen, um SOFTICE in der 2-3 sec Pause
zu Starten SOFTICE
sollte jetzt folgenden Code Anzeigen:-
:0715.959D
:0715.959F :0715.95A4 :0715.95A7 :0715.95AA :0715.95AC :0715.95AF :0715.95B1 |
mov es, ax
mov bx, cs:[884D] mov ax, es:[bx] add ax, 0024 ;ROM BIOS Zeitroutine. jb 95B1 cmp ax, es:[bx] ;Du solltest irgendwo ja 95AC ;hier landen ret ;Auftrag beendet |
Beispiel:
:0715.959D
:
:
:
:...........Speicherinhalt ( Memory offset)
:......................Speicherplatz
(memory segment)
Diese 8 Zeilen ist die Routine, welche
die 2 sec. Pause generiert, bevor wir mit einer Taste weitermachen können.
An dieser Stelle habe ich in SOFTICE STACK
eingetippt, um nach irgentwelchen Anhaltspunkten zu suchen, ehe ich mit
der RET Anweisung fortfahre. Leider wurde nichts angezeigt.
Der STACK ist einfach eine Stelle im Speicher des Computer`s, wo die Stelle der momentanen Position (Speicheradresse) hinterlegt wird, bevor das Programm gestoppt wird, oder etwas anderes tut .Er wird also genutzt zum momentanen speichern von Speicheradressen etc.
Eine
RET Anweisung in Assembler bewirkt, das die gerade abgearbeitete Routine
zuende ist und ein Sprung zu der Stelle erfolgt, von der aus diese Routine
aufgerufen wurde.
Wenn du jetzt
F10 mehrere Male drückst wirst du sehen, daß SOFTICE ständig
dieselben zwei Zeilen ausführt:-
:0715.95AC
cmp ax, es:[bx]
:0715.95AF
ja 95AC
Was hier passiert, ist,das im Register AX der Wert des long integer des Counter`s vom ROM BIOS abgelegt und 24 dazugezählt wird. Die Stelle 04Ch ist bei allen PC`s vorhanden. Die Zeile mit der cmp ax,es:[bx] Anweisung vergleicht nun den Wert vom AX Register und den Wert vom ROM BIOS.
Die ja 95AC Anweisung erzeugt eine Schleife,bis der ROM BIOS Counter den selben Wert hat wie das AX Register. Das sind die 2-3 sec. Pause!
Bewege jetzt deinen Cursor unter diese
beiden Zeilen, also auf die Zeile:
:0715.95B1 C3 ret
Jetzt tippe Here
Nach 2-3 sec. stoppt SOFTICE an den Beiden
Zeilen, von denen wir gerade sprachen.
Drücke nochmal F10..
Jetzt kommen wir an die zweite NAG Screen
Routine:
:0715.94EB E882F3
:0715.94EE 2E3B064B88 :0715.94F3 7307 :0715.94F5 5E :0715.94F6 5F :0715.94F7 5A :0715.94F8 59 :0715.94F9 5B :0715.94FA 58 :0715.94FB C3 *** NIGEL'S NAG SCREEN ROUTINE :0715.94FC 2E8B1ED494
|
call 8870
cmp ax, cs:[884B] jnb 94FC pop si pop di pop dx pop cx pop bx pop ax ret * Referenced by a (C)onditional Jump at Address: 0001.94F3(C) mov bx, cs:[94D4] mov si, [bx] mov cx, [si] mov di, 05F0 and cx, 00FE sub di, cx mov cs:[8850], di mov cx, [si] push cx push si call 95BD mov ah, cs:[013D] mov di, cs:[8850] call 5C2C pop si add si, 0002 call 5C79 call 86E0 call 959B ;unser 2-3 sec. Pause Routine mov si, 9591 ;hier landen wir nach dem RET mov di, cs:[5C25] sub di, 0016 mov ah, cs:[013D] push ax call 5CDA mov ah, 2C ;hole Time vom BIOS int 21 and dh, 0F add dh, 41 pop ax mov al , dh sub di, 0004 stosw call 95B6 mov ah, 00 ;lese Tastenanschlag int 16 and al, DF cmp al , dh jne 9559 ;lese die Tasten bis es die richtige ist call 8870 add ax, 0028 mov word ptr cs:[884B], ax pop cx call 95E5 add word ptr cs:[94D4], 0002 cmp word ptr cs:[94D4], 94D4 jb 958A mov word ptr cs:[94D4], 94AA pop si pop di pop dx pop cx |
Es gibt eine Vielzahl von Wegen, die aus dieser Routine herausführen, aber auf diese möchte ich jetzt nicht weiter eingehen sondern mich auf die Hauptsache konzentrieren. Wenn wir die oberen Zeilen anschauen, sehen wir die Stelle, wo wir von der 2-3 sec. Pause Routine zurückkehren.
Ok, jetzt müssen wir die NAG Screen`s
ausschalten.
Wie tun wir das? Sollen wir alle Stellen im Programm suchen,die diese NAG Screen`s erscheinen lassen, oder sollen wir die Stelle suchen, wo die Entscheidung getroffen wird, ob überhaupt NAG Screen`s erscheinen sollen?! Geht dir schon ein Licht auf?
Let's crack on...
Wir können in SOFTICE sehen,wo die
Routine des NAG Screen`s startet und wo sie endet. Sie startet in der Zeile:-
:0715.94FC 2E8B1ED494 mov bx, cs:[94D4]
Weil: über dieser Zeile sehen wir eine RET Anweisung, die uns in 99 von 100 Fällen sagt, das hier eine Routine zuende ist und eine neue beginnt.
Einfach gesagt: jede
Routine endet mit einer RET Anweisung und die nächste Anweisung ist
der Beginn einer anderen Routine.
Programmierer denken meist ganz praktisch, das heißt, sie legen alle zusammengehörenden Routinen in einen Bereich des Code`s. Es ist doch besser, bei einem Ausdruck die Routinen auf 4 oder 5 Seiten zu haben statt auf 100 oder 1000 Seiten.
Meist liegt der Code des Schutzsystems auch am Ende des Programmcodes.
Ok, genug des Geschichtsunterrichtes, laßt uns erfahren, wie wir es cracken können . ;-)
Wir könnten verschiedene Breakpoint`s setzen,aber das würde uns nicht viel nützen. Zwar würden wir das Schutzsystem besser verstehen lernen, aber unserem Ziel kämen wir nicht näher.
Wir erinnern uns: wir suchen eine Stelle, von der aus die NAG Screen Routine ausgelöst wird.
Das ist in den meisten Fällen irgendein Vergleich (CMP) gefolgt von einer Jump Anweisung, und zwar einen Jump, der zum Start der NAG Screen Routine springt.
Also scrollen wir
etwas hoch und runter, bis wir follgende Zeilen sehen:
:0715.94EB E882F3
call 8870
:0715.94EE 2E3B064B88
cmp ax, cs:[884B] ;hat
der AX den gleichen Inhalt wie
:0715.94F3 7307
jnb 94FC
;cs:[884b]
:0715.94F5 5E
pop si
Für das Ereichen unseres Ziel`s ist der Call 8870 unwichtig, er bereitet wahrscheinlich nur das AX Register vor, damit ein Vergleich überhaupt möglich ist.
Was uns interessiert ist die CMP Anweisung
und der folgende Jump Befehl. dieser hat zwei Möglichkeiten: entweder
springt er zu unserem NAG Screen, oder es geht weiter mit der folgenden
Zeile:
:0715.94F5 5E
pop si
Was, wenn wir ein Byte des
Sprungbefehls verändern, das heißt, wenn der Sprungbefehl ausgelöst
wird springt er nicht, wie normalerweise, zur NAG Screen Routine,sondern
einfach zur nächsten Anweisung.
So, jetzt brauchen wir nur folgendes zu tippen:-
e 94F3
Dies sagt SOFTICE, das wir den Speicherinhalt an der Stelle 94F3 bearbeiten möchten. Nun ändern wir den Wert 73 zu 90 und den nächsten Wert 07 auch zu 90
Jetzt nur noch ESC und x drücken
und SOFTICE verlassen.Nun hast du ein gecracktes Memory Map 2 Programm
was ohne die NAG Screen`s lauft. aber erinnere dich, es arbeitet nur so
lange, wie es im Speicher ist . Das Programm auf deiner Festplatte ist
unberühert, also uncracked...
|
Um diesen *crack* dauerhaft zu machen laden wir die MAP.EXE in unseren LieblingsHexEditor ( ich benutze HexWorkshop Version 2) und dann suche nach: 5756E882F32E3B06
000093F0 91932394 AA942EC7
064B8801 002E803E ..#......K.....>
00009400 5C010674 16505351
525756E8 82F32E3B \..t.PSQRWV....;
00009410 064B8873
075E5F5A 595B58C3 2E8B1ED4 .K.s.^_ZY[X.....
jetzt tausche die folgenden markierten BYTES:
000093F0 91932394 AA942EC7
064B8801 002E803E ..#......K.....>
00009400 5C010674 16505351
525756E8 82F32E3B \..t.PSQRWV....;
00009410 064B8890
905E5F5A 595B58C3 2E8B1ED4 .K.s.^_ZY[X.....
Speichere das ganze auf deiner Festplatte
Arbeit erledigt.
|
Wenn du nach Crack`s oder Serial Number`s
auf diesen Seiten suchst, dann verschwendest du deine Zeit. Suche lieber
im Web nach Warez, Crackz etc.
Essay by:
The Sandman
translated by:
BLACKHAwK
Page Created: 2nd May 1998