Und hier ist noch ein Cracking Tut von WKz_Daedalus .

Diesmal widmen wir uns Heroes 3 ( Deutsche Version , naja mit der englischen mssts eigentlich genauso gehn )
Tja ihr wollt wissen wie man den Shit crackt, ich weisses : sieht fast so aus als wren wir'n gutes Team ! 
Ach ja wenn ihr die restlichen Tutz von mir gelesen habt, habt ihr vielleicht ein paar Rechtschreibfelha gemerkt :

DAS LIEGT ALLES AN DER SCHEISS SIEMENS TASTATUR UND AN DEN SCHEISS SIEMENS CELERON !!!!
ICH HASSE SIEMENS !!!!!!!!!!!!!!!!!!!!!!!!!!!

So jetzt zum Cracken :

Also an Tools brauchen wir das bliche ( Hiew, Windasm, Gehirn) und zustzlich noch nen anderen Hexeditor um nachher in die ausgenoptete Protection unsere Greetz reizuschreiben.
Lach nich !!! Das is alte Daedalus-Tradition !!!

So dann lass uns mal anfangen.
Ich hoffe installierst kriegst du's alleine !
So dann nimm mal die CD raus und starte Heroes3.
Und was passiert... Nachdem uns Das Shit-Prog darber aufgeklrt hat wie bse wir doch sind einfach keine CD reinzulegen, sehen ( oder besser sehen wir nicht ) ,dass es keinen Singleplayer-Mode gibt.
Sowas aber auch !
Also Standart-Prozedur : Datei mit WinDasm ffnen und nach denn allseits geliebten GetDriveTypeA suchen.
Whrend ihr sicherlich die File schon lange diasembeld habt, is mein geiler Celeron noch am Arbeiten;
In der nchsten Viertelstund kann ich euch also mal'n bisschen ber das Zeug erzhlen was ir so brauchen knntet:

- Softice 	
	Cooler Debugger sollte es unter www.crackstore.com geben
- PatchfX
	Patchmaker ( das heit er erstellt Exen die, die orginal-Datein in die gecrackten patchen ) keine Ahnung wo's den gibt, aber mailt mal Perf@gmx.net ( und sag dem blo nich woher du die Addresse has ! )
- Visual C++ oder ein anderer C++ Compiler
	musste wohl kaufen, wenn du nen' wirklich guten haben willst ( oder du ldst dir knapp 400 MB runter !)
- Visual Basic 
	Version 6 ist weitaus besser als 4 ( aber auch 30mal so gro)
- Mein Hex-Ascii String Translator wr vielleich auch nicht schlecht zum Passwort Cracken in Soft ice ( oder willste du etwa Strings im Kopf umrechnen ?)
Ooooohhhh.... schon fertig, in unglaublichen 4 Minuten; So'n Glck, ich war schon nahe am Geschwindigkeits-Rausch   
Na los, ffne die Improted Functions. Nein Bitte !!! Nicht so schnell !!!!!
Nachdem du ein paarmal geclickt hast, msstest du es zweimal finden :

1. Ziemlich in der Mitte; Der GetLogicalDrives sieht ziemlich gut aus
2. Ziemlich weit unten; eher uninterresante Gegend 
---> versuchen wir's mit Nummer 1 

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:004E70F7(C), :004E7178(C)						' Von hier wird die Routine gecallt
|
:004E7190 33C0                    xor eax, eax
:004E7192 C644242000              mov [esp+20], 00
:004E7197 B906000000              mov ecx, 00000006
:004E719C 8D7C2421                lea edi, dword ptr [esp+21]
:004E71A0 F3                      repz
:004E71A1 AB                      stosd
:004E71A2 AA                      stosb

* Reference To: KERNEL32.GetLogicalDrives, Ord:0120h			' Listet alle Drives auf
                                  |
:004E71A3 FF15F8A05B00            Call dword ptr [005BA0F8]

* Reference To: KERNEL32.GetDriveTypeA, Ord:0104h			' Das Heiligtum aller Copylock-Coder
                                  |
:004E71A9 8B35F4A05B00            mov esi, dword ptr [005BA0F4]
:004E71AF 33ED                    xor ebp, ebp
:004E71B1 8BF8                    mov edi, eax
:004E71B3 896C2410                mov dword ptr [esp+10], ebp
:004E71B7 BB02000000              mov ebx, 00000002
:004E71BC BA01000000              mov edx, 00000001
:004E71C1 8BCB                    mov ecx, ebx
:004E71C3 D3E2                    shl edx, cl
:004E71C5 85D7                    test edi, edx
:004E71C7 7522                    jne 004E71EB				' Nein dieser Jump beschleunigt blo das ( fast ) unvermeidbare
:004E71C9 8AC3                    mov al, bl
:004E71CB 0441                    add al, 41

* Possible StringData Ref from Data Obj ->"A:\"
                                  |
:004E71CD 68A44A5E00              push 005E4AA4				' Pusht Variablen fr den Call hier
:004E71D2 A2A44A5E00              mov byte ptr [005E4AA4], al		|
:004E71D7 FFD6                    call esi	<-----------------------| 	' Da das aber ein Call Esi ist, knnen wir den nicht nachgehen  				
:004E71D9 83F805                  cmp eax, 00000005				' Der Allbekannte Compare ( Lustig : Compare so ndern, das Game nur noch von Diskette aus gestartet werden kann )
:004E71DC EB0D                    jmp 004E71EB			--------|	' Kein Conditional Jump ???? Was soll'n das ???
:004E71DE 8B442410                mov eax, dword ptr [esp+10]		|
:004E71E2 885C0420                mov byte ptr [esp+eax+20], bl		|
:004E71E6 40                      inc eax				|
:004E71E7 89442410                mov dword ptr [esp+10], eax		|
									|
* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:	|
|:004E71C7(C), :004E71DC(U)						|
|									|
:004E71EB 43                      inc ebx  <----------------------------|
:004E71EC 83FB1A                  cmp ebx, 0000001A
:004E71EF 90                      nop
:004E71F0 90                      nop
:004E71F1 0FBE4C2410              movsx ecx, byte ptr [esp+10]

* Reference To: USER32.wsprintfA, Ord:02ACh				' Wahrscheinlich die geile Fehlermeldung
                                  |
:004E71F6 8B35A8A25B00            mov esi, dword ptr [005BA2A8]
:004E71FC 896C2418                mov dword ptr [esp+18], ebp

* Reference To: WINMM.mciSendStringA, Ord:0035h				' Hier der Rest von der Meldung 
                                  |
:004E7200 8B2DC8A25B00            mov ebp, dword ptr [005BA2C8]
:004E7206 894C241C                mov dword ptr [esp+1C], ecx

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004E736D(C)
|
:004E720A 8B44241C                mov eax, dword ptr [esp+1C] 

Tja Jungs, sieht schlecht aus.
Kein Conditional Jump denn wir einfach ndern knnen ?
Der Jump bei 4E71C7 berprft blo, ob es das aktuelle Laufwerk berhaupt gibt ( eigentlich schwachsinnig ).
Schade tut mir wirklich leicht, das is uncrackbar, wrden andere jetzt sagen.
Aber ihr habt ja noch mich.
Also mal nachdenken...
Hmmm, das ist wirklich ne schne Protection Scheme, wirklich Schade wenn die garnicht erst zum Einsatz kme
Gute Idee an sich also werfen wir mal nen Blick auf diese Zeilen :

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:004E70F7(C), :004E7178(C)
|
:004E7190 33C0                    xor eax, eax
:004E7192 C644242000              mov [esp+20], 00

War schliessen wir daraus : 004E70F7 und 004E7178 sind die Bsewichte.
Springe nun zu 4E70F7 ( mit goto Code Location ) und Schau dir das mal an :

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:004E7094(C), :004E70CD(C)						' Hieraus knnen wir schlieen, dass die obere Routine nur eine Unter-Routine ( aber die wichtigste ) einer anderen Routie ist
|
:004E70DF 50                      push eax
:004E70E0 E85C960B00              call 005A0741				' Callt Sub, die sooft gecallt wird, das wir da lieber nichts dran rumwerkeln
:004E70E5 83C9FF                  or ecx, FFFFFFFF
:004E70E8 33C0                    xor eax, eax
:004E70EA 83C404                  add esp, 00000004
:004E70ED BF1C136000              mov edi, 0060131C
:004E70F2 F2                      repnz
:004E70F3 AE                      scasb
:004E70F4 F7D1                    not ecx
:004E70F6 49                      dec ecx
:004E70F7 0F8493000000            je 004E7190				' Einer unserer beiden Jumps
:004E70FD 83C9FF                  or ecx, FFFFFFFF
:004E7100 33D2                    xor edx, edx

* Possible StringData Ref from Data Obj ->"d;^kIwuL{<fomaokXvdbyhIEnb"	' Cooler String
                                  |
:004E7102 BF087E5E00              mov edi, 005E7E08			' Beachte diese Funktion...
:004E7107 F2                      repnz
:004E7108 AE                      scasb					
:004E7109 F7D1                    not ecx
:004E710B 49                      dec ecx
:004E710C 741A                    je 004E7128				----------------|
											|
* Referenced by a (U)nconditional or (C)onditional Jump at Address:			|
|:004E7126(C)										|	
|											|
:004E710E 2892087E5E00            sub byte ptr [edx+005E7E08], dl	<-------|	|
:004E7114 83C9FF                  or ecx, FFFFFFFF				|	|
:004E7117 33C0                    xor eax, eax					|	|
:004E7119 42                      inc edx					|	|
										|	|
* Possible StringData Ref from Data Obj ->"d;^kIwuL{<fomaokXvdbyhIEnb"		|	|	' ...und diese; Was fllt dir auf ?
                                  |						|	|
:004E711A BF087E5E00              mov edi, 005E7E08				|	|
:004E711F F2                      repnz						|	|
:004E7120 AE                      scasb						|	|	
:004E7121 F7D1                    not ecx					|	|
:004E7123 49                      dec ecx					|	|
:004E7124 3BD1                    cmp edx, ecx					|	|
:004E7126 72E6                    jb 004E710E				--------|	|
											|
* Referenced by a (U)nconditional or (C)onditional Jump at Address:			|
|:004E710C(C)										|
|											|
:004E7128 8A0D1C136000            mov cl, byte ptr [0060131C]     <---------------------|

* Possible Ref to Menu: MenuID_006F, Item: ""
                                  |

* Possible Reference to Dialog: DialogID_0067, CONTROL_ID:8000, "Heroes of Might and Magic III"
                                  |
:004E712E 6800800000              push 00008000

* Possible StringData Ref from Data Obj ->"d;^kIwuL{<fomaokXvdbyhIEnb"
                                  |
:004E7133 68087E5E00              push 005E7E08
:004E7138 880D087E5E00            mov byte ptr [005E7E08], cl
:004E713E E8DE960B00              call 005A0821
:004E7143 83C9FF                  or ecx, FFFFFFFF
:004E7146 8BF0                    mov esi, eax
:004E7148 33C0                    xor eax, eax
:004E714A 83C408                  add esp, 00000008
:004E714D 33D2                    xor edx, edx

* Possible StringData Ref from Data Obj ->"d;^kIwuL{<fomaokXvdbyhIEnb"
                                  |
:004E714F BF087E5E00              mov edi, 005E7E08			' Schon Wieder das gleiche
:004E7154 F2                      repnz
:004E7155 AE                      scasb
:004E7156 F7D1                    not ecx
:004E7158 49                      dec ecx
:004E7159 741A                    je 004E7175		>-----------------------|
										|	
* Referenced by a (U)nconditional or (C)onditional Jump at Address:		|
|:004E7173(C)									|
|										|	
:004E715B 0092087E5E00            add byte ptr [edx+005E7E08], dl  <----|	|
:004E7161 83C9FF                  or ecx, FFFFFFFF			|	|
:004E7164 33C0                    xor eax, eax				|	|
:004E7166 42                      inc edx				|	|
									|	|
* Possible StringData Ref from Data Obj ->"d;^kIwuL{<fomaokXvdbyhIEnb"	|	|
                                  |					|	|
:004E7167 BF087E5E00              mov edi, 005E7E08			|	|	' Und nochmal das Gleiche
:004E716C F2                      repnz					|	|
:004E716D AE                      scasb					|	|
:004E716E F7D1                    not ecx				|	|
:004E7170 49                      dec ecx				|	|
:004E7171 3BD1                    cmp edx, ecx				|	|
:004E7173 72E6                    jb 004E715B		----------------|	|
										|
* Referenced by a (U)nconditional or (C)onditional Jump at Address:		|
|:004E7159(C)									|
|										|	
:004E7175 83FEFF                  cmp esi, FFFFFFFF	<-----------------------|
:004E7178 7416                    je 004E7190
:004E717A 56                      push esi
:004E717B E8C1950B00              call 005A0741
:004E7180 83C404                  add esp, 00000004
:004E7183 5F                      pop edi
:004E7184 5E                      pop esi
:004E7185 5D                      pop ebp
:004E7186 33C0                    xor eax, eax
:004E7188 5B                      pop ebx
:004E7189 81C42C020000            add esp, 0000022C
:004E718F C3                      ret						' Geht aus dieser abartigen Routine wieder raus


So und jetzt die Frage die mich sonst seit knapp 2 Minuten beschftigt :
Warum zum Teufel 4mal der Gleiche Code ( aber mit anderen Jumps ) ?
Warn die bekifft ? oder einfach nur Siemems-Arbeiter ?
ICH HASSE SIEMENS !!!!!!!!!!!!!!!!!!!!!!!!!!!

Na gut, nun zum 2.wichtigsten Teil : wie setzen wir nun den Kopierschutz ausser Kraft ?
Ganz Einafach wir nopen die beiden Jumps einfach weg !!!

Also die beiden Stellen notieren und die Jumps in Hiew wegnopen ( msstest du schon alleine hinkriegen ).
Ich wei es ist hart, aber du wirst es vielleicht schon schaffen.
Es gebe noch eine anderen mglichkeit zum Cracken, die Stelle wo der GetDriveType gecallt wird einfach in Mov eax,00000005 ndern, 
also den Computer vormachen, dass er bei einer Aktion, die er garnicht gemacht hat ein CD-Drive gefunden hat.
Dagegen sprechen aber 2 Grnde :
1. zu einfach
2. dann kann man in den ganzen schnen weggenopten Code nicht seine Gre reinschreiben
He, wie jetzt ?
Du weit doch ( oder solltest du zumindest ), da der ganze Dreckscode mit den Logical Drives jetzt berflssig ist, weil er nie mehr ausgefhrt wird.
Konkret die Stelle zwischen :

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:004E70F7(C), :004E7178(C)
|
:004E7190 33C0                    xor eax, eax
:004E7192 C644242000              mov [esp+20], 00

...

* Reference To: WINMM.mciSendStringA, Ord:0035h
                                  |
:004E7200 8B2DC8A25B00            mov ebp, dword ptr [005BA2C8]
:004E7206 894C241C                mov dword ptr [esp+1C], ecx

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004E736D(C)
|
:004E720A 8B44241C                mov eax, dword ptr [esp+1C]
:004E720E 85C0                    test eax, eax

Du kannst diese Offsets jetzt mit Gren an mich berschreiben ! Toll, was ? 
Schreib das am besten mit HexWorks32 oder Ultraedit.

Wenn ihr Vorschlge fr neue Tutz oder Kritk habt mailt mir:

		WKz_Daedalus@gmx.net
		WWW.GEOCITIES.COM/winkillerz

Greetz :
		Alle WKz Memberz 
		r!sc
		DecOde12
		Black Check
		sn00pee
		gonzo 
		Xcrk
		Laxity
		Duellist
		ByteBurn

Special Greetz : Alle Ossis <-- Wir Ossis mssen zusammenhalten, in einer Welt voller bser Copylocks !















