_ __ ______ | | / / _ __ / _ / | | |/ / | '_ \\// /| | | / /__| | | |/ //\ | | \____/_| |_/____/ | |_| |_| http://lnz.cjb.net E-mail: lnz@iname.com Come fare una patch per il Mirc 5.51 by |LnZ| --=== STRUMENTI ===-- W32Dasm 8.9 Hiew 6.0 Mirc 5.51 http://www.mirc.com |Be se non avete questo cosa state leggendo a fare :) --=== PREMESSA ===-- Prima di tutto vorrei dire che essendo molto pigro avevo quasi rinunciato a fare questa patch perchè non riuscivo a trovare il modo di "bypassare" il controllo che il programma faceva all'avvio e cosi mi sono rivolto a vari tutorial su come patchare il Mirc 5.51 uno su TKC 14 ed uno di un certo Nixie. Però non so se perchè io abbia una versione diversa di Mirc nessuna delle patch indicata nei tutorial da me letti ha funzionato. Poi ho deciso di impegnarmi e non fare il fancazzista come al solito ed ho scoperto che la patch era veramente semplice da individuare, era li davanti ai mie occhi che mi sorrideva. Sono questi i momenti in cui mi sento veramente stupido ;) --=== TUTORIAL ===-- Allora per cominciare fate partire il Mirc che partira con la finestra di About con la fatidica scritta Licensed to:Unlicensed. Ora proviamo ad inserire il nostro nome ed un seriale a caso e vedere cosa ci dice, selezionate About dal menù e successivamente Register, vi apparira la finestra per registare il programma, inserite il vostro nome ed un seriale a caso. Il programma vi rispondera con il messaggio "Sorry your registration name and number don't match", ricordatevi questo messaggio. Ora fate partire il buon vecchio Wdasm e cliccate sul bottone delle String References e cercate il messaggio d'errore che il programma vi dava con l'inserimento del seriale fasullo. Vi ritorveret a questo punto del codice: * Reference To: USER32.SendDlgItemMessageA, Ord:0000h | :00436E52 E8512C0900 Call 004C9AA8 :00436E57 6A10 push 00000010 :00436E59 6A00 push 00000000 * Possible Reference to String Resource ID=01912: "mIRC Registration!" | :00436E5B 6878070000 push 00000778 :00436E60 E8973AFDFF call 0040A8FC :00436E65 50 push eax :00436E66 6A00 push 00000000 * Possible Reference to String Resource ID=01913: "Sorry, your registration name and number don't match! Pleas" | :00436E68 6879070000 push 00000779 :00436E6D E88A3AFDFF call 0040A8FC :00436E72 50 push eax :00436E73 8B4508 mov eax, dword ptr [ebp+08] :00436E76 50 push eax Come potete vedere questo non è il codice che ci interessa ma solo il codice per creare la finestra, spostatevi più in alto con la barra verde fino ad arrivare a questa parte di codice: * Referenced by a (U)nconditional or (C)onditional Jump at Address: |:00436D81(C) :00436E22 6A00 push 00000000 Scegliete Goto e poi Goto Code Location ed inserite l'indirizzo dal quale viene chiamata la creazione della finestra che nel mio caso è 00436D81. Vi ritroveret a questo punto del codice: * Reference To: USER32.SendDlgItemMessageA, Ord:0000h | :00436D6B E8382D0900 Call 004C9AA8 :00436D70 682F834D00 push 004D832F |Nostro seriale :00436D75 68487F4D00 push 004D7F48 |Nostro nome :00436D7A E87DCF0500 call 00493CFC |procedura che controlla la validità del SN :00436D7F 85C0 test eax, eax :00436D81 0F849B000000 je 00436E22 |Se eax=0 vai a Cattivo ragazzo :( Allora a questo punto qualc'uno potrebbe pensare stupidamente (non io ;) ) che per validare i numeri seriali basti cambiare quel je in un jne, provate e vedrete che cosi funziona ma che però la prossima volta che farete ripartire il programma lo ritroverete non registrato. Proviamo a vedere cosa fa la Call a 00493CFC. | :00493CFC 55 push ebp :00493CFD 8BEC mov ebp, esp :00493CFF 53 push ebx :00493D00 56 push esi :00493D01 57 push edi :00493D02 8B750C mov esi, dword ptr [ebp+0C] :00493D05 8B5D08 mov ebx, dword ptr [ebp+08] :00493D08 53 push ebx :00493D09 E89E910200 call 004BCEAC :00493D0E 59 pop ecx :00493D0F 83F805 cmp eax, 00000005 |Controlla che il nome sia almeno 5 char. :00493D12 7304 jnb 00493D18 :00493D14 33C0 xor eax, eax :00493D16 EB5C jmp 00493D74 Quindi neanche questo ci interessa però se guardate più in basso troverete il punto critico dove il programma decide se siamo dei bravi o dei cattivi ragazzi :) . * Referenced by a (U)nconditional or (C)onditional Jump at Address: |:00493D12(C) | :00493D18 56 push esi :00493D19 53 push ebx :00493D1A E8FDFEFFFF call 00493C1C |fa qualc'osa con il nome ed il seriale :00493D1F 85C0 test eax, eax |Controlla il registro :00493D21 7407 je 00493D2A | se Eax=0 siamo dei cattivi ragazzi :00493D23 B801000000 mov eax, 00000001 |Bravo ragazzo :00493D28 EB4A jmp 00493D74 Quindi per fare in modo che il programma risulti sempre registrato per qualsiasi numero seriale, basterà modificare questa procedura in modo che l'istruzione che muove 1 in Eax venga sempre eseguita. * Referenced by a (U)nconditional or (C)onditional Jump at Address: |:00493D12(C) | :00493D18 56 push esi :00493D19 53 push ebx :00493D1A E8FDFEFFFF call 00493C1C |fa qualc'osa con il nome ed il seriale :00493D1F 85C0 test eax, eax |Controlla il registro :00493D21 7407 nop |evitiamo il salto :00493D23 B801000000 mov eax, 00000001 |Bravo ragazzo :00493D28 EB4A jmp 00493D74 Per fare questa modifica dovrete posizionarvi con la barra verde di Wdasm sull'istruzione je 00493D2A e guardare l'offset indicato. A questo punto fate partire il vostro caro Hiew e spostatevi in decode mode(F4, Decode),con il tasto F5 spostatevi all'offset desiderato. Per sortire l'effetto desiderato dovrete inserire all'interno del file due NOP successivi dopo l'istruzione test eax, eax, perchè l'istruzione di je occupa più byte di un singolo NOP. Per inserire un NOP vi basterà premere il tasto F3 e scrivere 90, a questo punto non vi rimane che salvare (F9) uscire (F10) ed inserire il vostro nome ed un seriale a caso per godervi la vostra versione registrata del Mirc. --== GREETINGS TO ==-- Alor perchè è l'unico che ha avuto il coraggio di portarmi in macchina e che mi ha fatto conoscere l'ottimo sito dei RingZer0 A tutto il mio gruppo la NeuroZone2 Ai Ringzer0 ottimo gruppo italiano