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 lässt sich am besten am beispiel Incoming erklären. also los geht´s Benötigt 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 hätte das gedacht ;) die fehlermeldung heißt 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? natürlich "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 heißt "cd not present" machen wir doch mal einen doppelklick drauf und wir kommen zu einer stelle im code die ca. so aussehen müsste: :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 wär jetzt alles klar. aber hier nicht! ihr könnt 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 wählen funktions oben in der toolleiste und dort wählen 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 für das cd rom laufwerk. also alles erfolglos ;( aber is gibt ja noch eine möglichkeit einen cd check auszuschalten. und der geht so : also wir sind in w32 und drücken STRG+L, dann auf Load, ohne in dem Fenster was einzugeben, und jetzt haben wir ganz viele fenter vor uns. dann drückt ihr run (F9). Jetzt wird Incoming gestartet und im Hintergrund verfolgt Win32DASM die Befehle weiter. so wenn jetzt die fehlermeldung "cd nicht vorhanden" kommt drückt ihr einfach ALT+TAB und dann gibts in w32 eine schaltfläche mit namen terminate, dort drückt ihr drauf und beantwortet die frage mit ja. jetzt ist oben noch so ein "altes" fenster von w32 und das vergrößern wir, so weit das wir alles schön erkennen können. 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 für das auslösen der fehlermeldung verantwortlich ist. aber nix nur diese vielen calls ganz oben. wenn ihr ein bischen zeit habt könnt ihr ja mal versuchen die calls auszunopen. ich weiß aber das das nicht funktioniert!!! deshalb fällt die möglichekeit auch flach mit gotocode location jeden einzelnen call zurückzuverfolgen. ratlos??? guckt euch mal 1 an! wenn man sich ein bischen mit asm auskennt sollte man den befehl "return" kennen. Das bedeutet, daß nichts ausgeführt wird, sondern gleich wieder zurückgesprungen wird (zu den Calls). das heißt das man nicht jeden call einzelnd ausnopen muss sondern einfach unter den calls "return" setzt und er einfach nix ausführen lässt. und die fehlermeldung muss man ja auch ausführen aber das verhindert dann ja "return" ;) was jetzt? da man in w32dasm nix verändern 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 umändern 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 gehört 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 wählt 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. erklärung "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* Schlußsatz: Jetzt habt ihr incoming gecrackt. werdet nicht zu übermütig 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