Patch su Msn

13 08 2008

Ciao a tutti, avevo questo articolo come bozza ma non l’ho reso pubblico per molto tempo. Oggi ho deciso di postarlo per illustrare quello che si può fare con il reversing; precisamente riguardo una patch applicabile a Windows Live Messenger (aka Msn).

Questa patch riguarda la rimozione dell’intervallo di tempo fra un trillo e l’altro, quindi permette di trillare senza limiti o intervalli. Voi direte: “E beh? Niente di nuovo.” . Infatti. Solo che non si tratta della solita pappa pronta (A-Patch o altre cose del genere), bensì vi mostrerò, per i più curiosi, il procedimento con cui si rimuove l’intervallo manualmente, attraverso il Reversing.

Sì, il reversing, mi sto avvicinando pian piano a questo argomento e devo dire che mi affascina molto. Per chi non lo sapesse, è quella che molti chiamano “arte” che consiste nello “smontare” un file (es. un .exe) e studiarne le funzioni, cercare di carpirne le informazioni per raggiungere un determinato scopo, come oltrepassare le protezioni che ci sono in alcuni programmi (limitazioni di 30 giorni e via discorrendo). Ovviamente come in ogni cosa c’è chi ne fa un cattivo uso e chi no. C’è chi reversa per crackare e chi reversa per imparare esclusivamente a scopo di studio e perchè no, per soddisfazione personale.

E così dopo essermi informato un pò ho deciso di mettere in pratica, o almeno provarci, quello che avevo imparato. Quindi, dopo questa intro (un pò noiosa lo so :D ) possiamo addentrarci nel vivo della patch.

Apriamo l’eseguibile (msnmsgr.exe) con OllyDbg e, dopo aver analizzato il file, Olly ci porterà direttamente all’Entry Point:

006CD70D > $ E8 5B060000    CALL msnmsgr.006CDD6D

Ok, ora la cosa più logica da fare è cercare un timer che regoli l’intervallo fra i trilli. Quest’intervallo è settato a 11000 ms. (11 secondi) e sapendo questo possiamo subito escludere gli altri timer. Ma dato che non sappiamo dove si trova fra tante righe di listato, premiamo ALT+F1 e digitiamo: bpx SetTimer

Con questo comando piazziamo un breakpoint su tutte le chiamate a SetTimer. Ora premendo F9 debuggiamo il programma e, dopo aver effettuato il login a Msn, andiamo su una finestra di conversazione e premiamo sul tasto del trillo. Ecco che subito Olly brekka (è la riga in rosso):

004DCA77  |. 8B1D B01A4000  MOV EBX,DWORD PTR DS:[<&USER32.SetTimer>>;  USER32.SetTimer
004DCA7D  |. 74 25          JE SHORT msnmsgr.004DCAA4
004DCA7F  |. 8B46 28        MOV EAX,DWORD PTR DS:[ESI+28]
004DCA82  |. 57             PUSH EDI                                 ; /Timerproc
004DCA83  |. 68 F82A0000    PUSH 2AF8                                ; |Timeout = 11000. ms
004DCA88  |. 68 90010000    PUSH 190                                 ; |TimerID = 190 (400.)
004DCA8D  |. 50             PUSH EAX                                 ; |hWnd
004DCA8E  |. FFD3           CALL EBX                                 ; \SetTimer
004DCA90  |. 85C0           TEST EAX,EAX
004DCA92     75 09          JE SHORT msnmsgr.004DCA9D

Siamo alla parte cruciale della patch. Se scendiamo 2 righe più sotto del breakpoint da noi settato troviamo un interessante salto condizionato (JE SHORT msnmsgr.004DCA9D). Il salto così com’è punta all’offset 004DCA9D, facendo così verificare la comparsa della scritta sulla conversazione: “Non è possibile inviare trilli a un contatto troppo spesso.“. Ok, e se noi cambiassimo quel JE con un JNZ? Proviamo. Selezioniamo la riga, premiamo spazio e cambiamo il JE in JNZ. Avremo questo:

004DCA77  |. 8B1D B01A4000  MOV EBX,DWORD PTR DS:[<&USER32.SetTimer>>;  USER32.SetTimer
004DCA7D  |. 74 25          JE SHORT msnmsgr.004DCAA4
004DCA7F  |. 8B46 28        MOV EAX,DWORD PTR DS:[ESI+28]
004DCA82  |. 57             PUSH EDI                                 ; /Timerproc
004DCA83  |. 68 F82A0000    PUSH 2AF8                                ; |Timeout = 11000. ms
004DCA88  |. 68 90010000    PUSH 190                                 ; |TimerID = 190 (400.)
004DCA8D  |. 50             PUSH EAX                                 ; |hWnd
004DCA8E  |. FFD3           CALL EBX                                 ; \SetTimer
004DCA90  |. 85C0           TEST EAX,EAX
004DCA92     75 09          JNZ SHORT msnmsgr.004DCA9D

Proseguiamo col debug (F9) e vediamo che l’intervallo è stato rimosso con successo!

Ora non ci resta che salvare l’eseguibile patchato. Quindi clicchiamo col destro su una riga di listato e selezioniamo Copy>All modifications. Nella finestra che ci si apre clicchiamo ancora col destro e poi su Save. Scegliamo il percorso, salviamo il file, sostituiamolo a quello originale e il gioco è fatto, Msn con trilli infiniti!

P.S. Per chi è interessato al reversing riporto alcuni link utili:

  • OllyDbg 1.10 (Debugger)  –> Link
  • Guida al reversing by Ctrl_alt_canc (PDF)  –> Link

Alla prossima


Azioni

Information

4 responses

12 12 2008
giuseppe

bpx?! è bp

12 12 2008
Sand

No, a me va bpx, l’altro l’ho provato in questo momento e non mi brekka niente.

O almeno, non mi visualizza le Intermodular calls…

17 12 2008
Come rimuovere i trilli da Msn (Windows Live Messenger) « Sand’s Blog

[…] Live Messenger) 17 12 2008 Ho già parlato di questo argomento in passato (vedi “Patch su Msn“), però in quell’articolo era spiegato come rimuovere i trilli manualmente, mentre […]

29 11 2009
chicca serpentosa

ahhhhhooooooooooooooooooooooooo ve sto a menaccia!!!me di te kome se fa ad invia trilli

Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...