Holographic Posted November 9, 2011 Report Posted November 9, 2011 (edited) 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 aiciVom folosi urmatoarele programe:-ollydbg 2.x-ollydump 2.xDeschidem yahoomessenger.exe in olly si asteptam pana se analizeaza toate legaturileYahooMessenger.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 stringsDupa ce apare lista cu toate stringurile din program, dam ctrl+f, introducem idle si punem breakpoint la toate referintele gasite.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.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.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.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.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 codulPana 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.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.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 November 9, 2011 by Holographic 5 2 Quote
me.mello Posted November 12, 2011 Report Posted November 12, 2011 La cererea a mai multor utilizatori am decis sa fac un tutorial...tare as vrea sa stiu si eu acesti utilizatori:))...nu esti singurul cu un tutorial izbitor de asemanator cu al tau:)) Quote
Paullik83 Posted January 3, 2012 Report Posted January 3, 2012 Poate faci un executabil pentru messenger 11.5 ... multumesc anticipat Quote
backdoor Posted April 2, 2012 Report Posted April 2, 2012 Holographic Frumos tutorial . Cand mai ai timp poate ne mai arati ceva interesant.me.mello Mai bine sa nu ii stii pe acesti utilizatori Ar fi indicat ... Quote
MARIUSCS Posted April 5, 2012 Report Posted April 5, 2012 Bravo ! Imi place ca ai explicat pe intelesul tuturor si ai scris cat de cat corect:)Sa ma treci pe aici si cu alte tutoriale:) Quote
bajetzashu89 Posted April 5, 2012 Report Posted April 5, 2012 foarte bine creat tutorialul ...bv! Quote
shadowx Posted May 9, 2012 Report Posted May 9, 2012 mi-am pris urechiile aici .. o sa refac pasii mai cu atentie Quote
u0m3 Posted May 9, 2012 Report Posted May 9, 2012 Felicitari pentru tutorial! Foarte bun.As avea totusi o curiozitate: cum ai pacalit OlyDbg sa iti foloseasca acea paleta de culori? La mine nu vrea sa iasa din formatul standard. Quote
maverik_lock Posted May 12, 2012 Report Posted May 12, 2012 cum se foloseste OllyDump te rog spune-mi si mie. L-am downloadat si e doar un DLL si o arhiva. le-am pus in folder cu ollyDBG dar tot nu apare nimic.. Quote