Jump to content
Holographic

Y!Messenger 11 IdleHack cu OllyDbg

Recommended Posts

La cererea a mai multor utilizatori am decis sa fac un tutorial pe tema patchului idle pentru Y!M 11 pe care l-am realizat nu demult.

In aces tutorial nu va dau adrese exacte cum trebuie sa procedati concret pentru Y!M, ci va arat cum am facut eu de la 0, ceea ce ar folosi si pentru alte chestii.

Va reamintesc ca patchul poate fi downloadat aici

Vom folosi urmatoarele programe:

-ollydbg 2.x

-ollydump 2.x

Deschidem yahoomessenger.exe in olly si asteptam pana se analizeaza toate legaturile

unled1uru.jpg

unled1aao.jpg

YahooMessenger.exe are ~3mb, mult cod disasamblat, atunci unde trebuie sa catuam ceea ce ne trebuie?

Vom face referinta la toate functiile care contin in ele sirul de caractere "Idle"

Click dreapta -> Search for all referenced strings

unled2wkv.png

Dupa ce apare lista cu toate stringurile din program, dam ctrl+f, introducem idle si punem breakpoint la toate referintele gasite.

unled2hd.png

Dupa care ne intoarcem in main thread, si dam run (F9).

Vedem ca inainte ca sa apara fereastra principala de la Y!M, ne stopam la niste adrese pe care am pus breakpoint mai inainte. Deci astea sigur nu sunt alea care ne trebuie, intrucat noi vrem sa prindem exact momentul in care se schimba statusul in idle.

Se mai analizeaza niste fisiere, dupa care apare fereastra principala.

unled2af.png

Ne logam ca de obicei, trecand inca peste doua breakpointuri nefolositoare si niste analize, si dupa ce ne-am logat, ne asiguram ca setarile messengerului asigura schimbarea in Idle dupa un minut de inactivitate.

unled2jt.png

Acum nu ne ramane decam sa dam ok, si sa asteptam un minut pana se face apelarea la functia necesara pentru schimbarea statusului in Idle...

Si uite ca dupa un minut de asteptare, olly opreste pe un breakpoint interesant, pe adresa 63CFFE. Nu stim exact daca e ceea ce ne trebuie, dar facem o presupunere, pentru ca sansele sunt mari, asa cum s-a oprit exact cand trebuia sa se schimbe statusul in idle.

unled2bpt.png

Ne ridicam putin mai sus, pana la inceputul functiei, pe adresa 63CFE7, si punem breakpointuri primele 10-15 randuri. Acum aceasta este sigur functia care ne trebuie, dar in cazul in care faceti ceva pe alt program, ar fi bine sa va verificati inca o data, cu breakpointuri, inainte de a schimba ceva in cod.

Analizand putin primele linii de cod, deja e evident ca e transmis ca parametru un argument chiar pe primul rand.

Cu breakpoint pe 63CFE8, putem vedea ca e 1 in cazul in care statusul trebuie schimbat in idle, si 0 in cazul in care statusul de idle trebuie scos.

unled2wkl.png

In cazul nostru e evident ca, pentru ca statusul de idle sa nu se scoata nici o data, trebuie ca argumentul sa fie tot timpul 1, dar in alte cazuri poate fi diferit. Asa ca analizam putin codul

unled2mp.png

Pana pe adresa 63D003 inclusiv se face diferentierea dintre statusul curent si statusul in care trebuie sa fie schimbat.

Insa pe adresa 63D008 se face o comparatie intre cifra reprezentata de statusul curent si argumentul transmis.

unled2jeg.png

Dupa care, daca nu sunt egale (63D00D : JE SHORT 63D06E) se trece prin toat procesul de schimbare a statusului, incepand cu 63D00F si termnand cu 63D06E. In caz contrar, se trece imediat la ultima adresa, si nu sunt efectuate schimbari.

Deci, dupa cum am zis si mai sus, totul depinde de argumentul transmis, astfel incat daca se transmite doar 1, la prima schimbare statusul curent va fi reprezentat de 0 (NO IDLE) si se va trece prin procesul de schimbare, devenind idle. Dupa care, de fiecare data cand Y!M incearca sa iasa din idle, argumentul va fi tot 1, si comparatia de care am zis mai sus va efectua saritura peste procesul de schimbare a statusului, astfel el ramane neschimbat chiar si la miscarea cursorului/apasarea oricarei taste.

Pentru a efectua asta, trebuie sa schimbat exact linia de pe 63CFE8, in loc ca in registrul BL sa fie introdus argumentul, facem asa ca tot timpul sa fie introdus 1.

unled2sh.png

Si dam Assemble. Daca mai asteptam un minut, vedem ca se intra in idle, in schimb dupa ce se iese din starea de inactivitate, statusul ramane acelasi, idle.

Acum, unii pot avea intrebarea, daca facem asa, atunci de fiecare data cand se schimba starea de activitate, se apeleaza functia nonsens, si se pierde timp de executie degeaba. Atunci trebuie doar sa debifam optiunea de a ne arata idle in Y!M, si atunci functia nu se mai apeleaza, in timp ce noi ramanem cu statusul de Idle activ.

La sfarsit, cu ollydump salvam programul modificat, si il rulam ca de obicei.

Dupa cum se vede, a fost extrem de simplu sa trisam messegerul nou pentru a avea statusul de inactiv tot timpul. Chiar si cineva cu cunostinte de baza in Debugging poate realiza acest proiect in mai putin de 30 de minute.

Edited by Holographic
  • Upvote 5
  • Downvote 2
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...