					     Willkommen zu meinem 4. Tutorial
						      (Mr.polKhigH 33)

Vorwort: inden vorheriegen tuz von mir haben wir uns mit leichten cd checks befasst z.b. wie man einen jump umstellt ect.
	 oder wie man mit w32 ne shareware zu ner registrierten version macht. heute befassen wir uns mit dem "return" befehl
	 und eine andere art wie man mit w32 nen cd check killed. und das lsst sich am besten am beispiel Incoming
	 erklren. also los gehts

Bentigt wird:

	-w32dasm V. 8.93
	-Hexworkshop oder irgendeinen hex editoren
	-ein bischen zeit
	-zettel und nen stift
	-Incoming


Wir fangen an:

so zuerst installiert ihr incoming (das sind ca. 45mb). dann macht ihr eine kopie von der incoming.exe und kopiert sie
in ein temp verzeichnis. dann lest ihr die *.exe aus dem temp verzeichnis mit w32 ein. jetzt nehmt ihr die cd aus dem laufwerk
und startet mal incoming. und was passiert? *schreck* *staun* eine fehlermeldung. wer htte das gedacht ;)
die fehlermeldung heit ca. so ---->"cd nicht vorhanden" jetzt guckt ihr mal unter w32 unter den strig data references
wenn ihr net wisst was das ist dann lest euch meine anderen tutz durch!!! und was suchen wir dort? natrlich "cd nicht vorhanden"
aber es gibt diese fehlermeldung nicht. was jetzt??? wir halten mal nach ner fehlermeldung ausschau die so nlich klingt.
(manchmal auch in einer anderen sprache) aha da gibts eine die heit "cd not present" machen wir doch mal einen doppelklick drauf
und wir kommen zu einer stelle im code die ca. so aussehen msste:


	:00425620 F6055CFF5C0040          test byte ptr [005CFF5C], 40
	:00425627 751C                    jne 00425645
	:00425629 8B0D20015D00            mov ecx, dword ptr [005D0120]
	:0042562F E89DC0FDFF              call 004016D1
	:00425634 85C0                    test eax, eax
	:00425636 750D                    jne 00425645
	
	* Possible StringData Ref from Data Obj ->"CD not present."
	                                  |
	:00425638 68809C4B00              push 004B9C80
	:0042563D E81E8B0700              call 0049E160
	:00425642 83C404                  add esp, 00000004


also bei spielen mit einem sehr einfachen cd check wr jetzt alles klar. aber hier nicht! ihr knnt versuchen so viele
jumps wie ihr wollt umzustellen oder auszunoppen aber es wird nichts passieren und es wird immer noch zur fehlermeldung
kommen. also wir wissen das man nicht nur ber die "strings" die fehlerquelle rausbekommen kann sondern auch ber andere
arten wie z.B. die Kernel32GetDriveTypeA funktion die bekommen wir so: wir whlen funktions oben in der toolleiste und dort whlen wir imports aus.
jetzt suchen wir solange bis wir Kernel32GetDriveTypeA finden. wenn ihr es gefunden habt klickt ihr drauf und wir gucken uns den code mal zu dem w32
gesprungen ist. aber da kann man die fehlermeldung auch nicht verhindern denn man findet kein cmp, 00000005 denn das
ist der wert fr das cd rom laufwerk. also alles erfolglos ;(
aber is gibt ja noch eine mglichkeit einen cd check auszuschalten. und der geht so :
also wir sind in w32 und drcken STRG+L, dann auf Load, ohne in dem Fenster was einzugeben, und jetzt haben wir ganz viele 
fenter vor uns. dann drckt ihr run (F9). Jetzt wird Incoming gestartet und im Hintergrund verfolgt Win32DASM die Befehle weiter.
so wenn jetzt die fehlermeldung "cd nicht vorhanden" kommt drckt ihr einfach ALT+TAB und dann gibts in w32 eine schaltflche
mit namen terminate, dort drckt ihr drauf und beantwortet die frage mit ja. jetzt ist oben noch so ein "altes" fenster von w32
und das vergrern wir, so weit das wir alles schn erkennen knnen. und jetzt gucken wir mal wo wir eigentlich gelandet sind
(ganz unten das Error-Feld) und dort sieht es ca. so aus:



	* Referenced by a CALL at Addresses:
	|:00401935	, :0040195C	, :00402C70	, :00403DEF	, :00403EE2
		.
		.
		.
	|:00478B7E
	|
	:0042E0D0	8B4C2404		mov ecx, dword ptr [esp+04]	<-------1
	:0042E0D4	83EC20			sub esp, 00000020
	:0042E0D7	8D442428		lea eax, dword ptr [esp+28]
	:0042E0DB	56			push esi
	:0042E0DC	57			push edi
	:0042E0DD	50			push eax
	:0042E0DE	51			push ecx
	:0042E0DF	68207D4D00		push 04D7D20
	:0042E0E4	E847DA0400		call 0047BB30
	:0042E0E9	BF80184900		mov edi, 00491880
	:0042E0EE	83C9FF			or ecx, FFFFFFFF
	:0042E0F1	33C0			xor eax, eax
	:0042E0F3	83C40C			add esp, 0000000C
	:0042E0F6	F2			repnz
	:0042E0F7	AE			scasb
	:0042E0F8	F7D1			not ecx
	:0042E0FA	2BF9			sub edi, ecx
	:0042E0FC	68207D4D00		push 004D7D20
	:0042E101	8BF7			mov esi, edi
	:0042E103	8BD1			mov edx, ecx
	:0042E105	BF207D4D00		mov edi, 004D7D20
	:0042E10A	83C9FF			or ec	x, FFFFFFFF
	:0042E10D	F2			repnz
	:0042E10E	AE			scasb
	:0042E10F	8BCA			mov ecx, edx
	:0042E111	4F			dec edi
	:0042E112	C1E902			shr ecx, 02
	:0042E115	F3			repz
	:0042E116	A5			movsd
	:0042E117	8BCA			mov ecx, edx
	:0042E119	83E103			and ecx, 00000003
	:0042E11C	F3			repz
	:0042E11D	A4			movsb
	:0042E11E	E85DCA0400		call 0047AB80
	:0042E123	83C404			add esp, 00000004
	:0042E126	8D442408		lea eax, dword ptr [esp+08]
	:0042E12A	50			push eax
		
	* Reference To: KERNEL32.GlobalMemoryStatus, Ord:0161h
						|
	:0042E12B	FF15F4604800		Call dword ptr [004860F4]
	:0042E131	E8CAA5FEFF		call 00418700
	
	* Reference To: USER32.MessageBoxA, Ord:0195h
					|
	:0042E136	8B35B0614800		mov esi, dword ptr [004861B0]
	:0042E13C	6A00			push 00000000
	
	* Possible StringData Ref from Data Obj ->"Incoming Error Report."
						|
	:0042E13E	6868184900		push 00491868
	:0042E143	68207D4D00		push 004D7D20
	:0042E148	6A00			push 00000000
	:0042E14A	FD6			call esi
	:0042E14C	6A00			push 00000000		<----Hier starten wir
	
	* Possible StringData Ref from Data Obj ->"Incoming Error Report."
						|
	:0042E14E 	6868184900		push 00491868



also was nun? wir sind bei 0042E14C gelandet. wir scrollen wieder einmal ein bischen nach oben ;) und gucken ob wir irgendeinen
jump finden der fr das auslsen der fehlermeldung verantwortlich ist. aber nix nur diese vielen calls ganz oben. wenn ihr
ein bischen zeit habt knnt ihr ja mal versuchen die calls auszunopen. ich wei aber das das nicht funktioniert!!! deshalb fllt
die mglichekeit auch flach mit gotocode location jeden einzelnen call zurckzuverfolgen. ratlos??? 
guckt euch mal 1 an! wenn man sich ein bischen mit asm auskennt sollte man den befehl "return" kennen. 
Das bedeutet, da nichts ausgefhrt wird, sondern gleich wieder zurckgesprungen wird (zu den Calls). das heit das man nicht jeden call einzelnd ausnopen muss
sondern einfach unter den calls "return" setzt und er einfach nix ausfhren lsst. und die fehlermeldung muss man ja auch ausfhren
aber das verhindert dann ja "return" ;)
was jetzt? da man in w32dasm nix verndern kann muss man den hexworkshop oder irgendeinen hexeditor zur hilfe nehmen. um sachen
im hexeditor zu bearbeiten braucht man sozusagen eine "ortsbeschreibung" die nennt man Offset. denn man muss ja wissen wo man
was umndern muss. den Offset findet man so:
man makiert die stelle von der man den Offset haben will. in unserer situation is das die zeile 1. jetzt guckt man unten
in die statusleiste und dort steht immer sowas blah,blah,blah......@Offset 1234567h (dieses h bedeutet nur hex also gehrt
das nicht mehr zum offset!!!)
in unserem fall hat die funktion unter dem call den offset von (0002D4D0)
jetzt lesen wir die incoming.exe aus dem incoming verzeichnis mit dem hexworkshop ein und geht auf edit oben in der toolleiste und whlt
dort "goto.." aus. dort kann man jetzt den Offset eingeben (denkt dran ohne das h;)) und der hex workshop spring an die stelle
mit dem offset. jetzt berschreibt ihr die ersten 2 zahlen mit c3.
erklrung "return" ist in hexdezimalzahlen c3 und da wir uns im hexeditor befinden muss man es mit c3 berschreiben.
jetzt speichert ihr das ganze ab und beendet w32dasm. und startet incoming und voil!!!
ES LAUFT OHNE CD!!!!!
*freu* *jubel* *stolz* *springausdemfenster* 



Schlusatz:
Jetzt habt ihr incoming gecrackt. werdet nicht zu bermtig denn das ist im gegensatz zu den heutigen spielen eine
leichtigkeit ;)  *bertreib*

na ja bei lob, kritik, anregungen, verbesserungen, tadel usw. schreibt mir einfach ne mail mr.polkhigh33@gmx.de
oder contaktiert mich per icq: 79144271

Das wars

Mr.polKhigH 33 (Member of Da-Breaker-Crew)
http://kickme.to/dbc


























