Gudrulea Posted July 16, 2008 Report Posted July 16, 2008 Asta da profesor nu ca aia de la scoala. Felicitari :oops: Quote
!_30 Posted December 9, 2008 Report Posted December 9, 2008 m-am apucat s? codez un script PHP care s? se autentifice la re?eaua Yahoo Messenger. Am c?utat prin multe surse dar pot spune c? acest tutorial este cel mai elaborat ?i m-a ajutat. Totu?i, la un moment dat m-am blocat ?i nu am reu?it s? finalizez cu succes autentificarea (autentificare bazat? pe stringul 307 nu pe vechea metod? cu hashurile 6 ?i 96). Am c?utat de nebun pe internet ?i am dat de o surs? C de la protocolul Yahoo folosit? la messengerul Miranda. Folosesc ?i ei noua metod? de autentificare ins? am v?zut ceva diferen?e. Am s? prezint succint ce am realizat pan? acum, poate ajut? pe cineva ?i primesc ?i eu la randul meu rezolvarea final? a problemei de conectare. S? incepem deci: - ini?ial clientul trimite un pachet "verify". Pachetul are rolul de a stabili identitatea Yahoo a serverului ?i dac? acesta ar putea s? realizeze o strangere de man? in vederea autentific?rii. Pachetul nu are con?inut. Structura este urm?toarea (pentru cine este curios): 4 bytes pentru protocol ?i anume YMSG, 4 bytes pentru versiune (folosesc versiunea 15) care inseamn? in hex 000f0000, lungime pachet pe 2 bytes (cum pachetul nu con?ine con?inut el area lungimea egal? cu 0), serviciul 76 (pentru verificare) care in hex este 004c, status care este 0 (pentru pachetul verify) ?i sesiunea care am setat-o cu 0 c?ci am auzit c? in conect?rile directe nu se ?ine cont de ea (?i cum serverul mi-a r?spuns, chiar nu se ?ine cont). Statusul ?i sesiunea sunt pe 4 bytes, fiecare. Eu am scris o func?ie care creaz? pachetul in func?ie de aceste op?iuni ?i apoi trimit prin socket, la server. - serverul r?spunde cu un pachet "verify". Asta inseamn? c? el poate s? intre?in? autentificarea. Pan? aici toate bune, codul pe care l-am scris func?ioneaz?. - clientul trimite un pachet de cerere de autentificare care are la con?inut Yahoo id-ul care vrea s? se conecteze la re?ea. Practic ii spunem serverului cine suntem ?i ce vrem s? facem: "hei, eu sunt yahoo_id_oarecare. vreau s? m? conectez la re?ea prin intermediul t?u". De aceast? dat? pachetul va con?ine in header cateva mici schimb?ri ?i anume: la serviciu vom avea 0x0057 ?i lungimea con?inutului va fi in conformitate cu m?rimea ID-ului. Con?inutul acestui pachet are urm?toarea form?: "1":"Yahoo_Id_oarecare". - serverul imi trimite (pan? func?ioneaz?) pachetul de autentificare cu ack1. Acest pachet con?ine in valoarea cheii 94 challange-ul pe care il vom folosi in urm?torul pachet. Am decupat acest challange (el este de fiecare dat? altul ?i nu are leg?tur? cu vreo dat? privat? a ID-ului.) ?i am ob?inut ceva de genul:y*n/d/q^t/g^w|o^i%h&(q^r%n|2^(s&(o/m&k^i|l^(c+x/z+s|d/1-3/x|(p&p%b|d))))) - acum urmeaz? partea dr?gu?? ?i anume conectarea prin ssl pentru a lua tokenul unui user. Fie c? urmeaz? acum, fie c? apare in cod mai devreme, nu conteaz?. Totul este s? ob?inem tokenul ?i in func?ie de token valoarea crumb (care este alta de fiecare dat?) ?i cookie-urile pentru autentificare. Scrie Slick cum se procedeaz? pentru a le ob?ine. - acum urmeaz? partea mai mult sau mai pu?in interesant?. Am snifat pachetele pe care le trimite clientul meu de Yahoo messenger ?i am v?zut c? valoarea stringului 307 are lungimea de 24 incluzand ?i dou? - la sfar?it. Cum stringul 307 este ceva de genul yahoo64(md5(crumb+challange)) o s? avem yahoo64(o_valoare_de_lungime_32) ?i s? 44 ca lungime. Mie unul mi se pare ciudat. Am g?sit intr-un cod surs? de autentificare nou? c? doar primii 16 din cei 32 din md5 sunt encoda?i in yahoo64 ?i am modificat un pic func?ia de encodare in yahoo64 a lui Slick s? v?d dac? merge:function yahoo64_encode($source){ $yahoo64="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789._"; // something with 16 bytes not hex $inlen = 16; $in=0; // in este ce primim for(; $inlen >=3; $inlen -=3) { $dest.=$yahoo64[ord($source[$in])>>2]; $dest.=$yahoo64[((ord($source[$in])<<4)&0x30) | (ord($source[$in+1])>>4)]; $dest.=$yahoo64[((ord($source[$in+1])<<2)&0x3C) | (ord($source[$in+2])>>6)]; $dest.=$yahoo64[ord($source[$in+2])&0x3F]; $in += 3; } if($inlen>0) { // enters here $dest.=$yahoo64[ord($source[$in])>>2]; $fragment = ((ord($source[$in])<<4)&0x30); if($inlen>1){$fragment |= (ord($source[$in+1])>>4); } $dest.=$yahoo64[$fragment]; if($inlen<2) {$dest.="-";} else {$dest.=$yahoo64[((ord($source[$in+1])<<2)&0x3c)]; } $dest.="-"; } return $dest;} - am creat pachetul ?i l-am trimis c?tre server in speran?a c? am inimerit stringul 307 corect totu?i nu func?ioneaz?. Serverul imi trimite un mesaj cu serviciul de deconectare (0x07d1) ?i cu statutul 0xffffffff. in con?inut g?sesc: "66":"1003""16":".....Yahoo_id_oarecare.. ?i mai multe cifre ?i virgule" - b?nuiesc c? problema este de la stringul 307 ?i autentificarea pic? deci m? d? afar?. Ori m-a banat serverul? Idei? Quote
s33us00n Posted December 18, 2008 Report Posted December 18, 2008 Slick....esti un zeu. Felicitari pt articol! Quote
TeZG Posted March 23, 2009 Report Posted March 23, 2009 Felicitari , toata munca ta nu a fost degeaba . Lam si pus in biblioteca mea personala Quote
bucifala Posted September 20, 2009 Report Posted September 20, 2009 Foarte frumos. Mi-a placut ce am citit:) Quote
p3tru Posted November 4, 2009 Report Posted November 4, 2009 (edited) intradevar, foarte interesant, mai aleshttps://login.yahoo.com/config/pwtoken_get?src=ymsgr&login=[user]&passwd=[parola]o metoda buna se poate crea si un programel care sa schimbe cuvantul dupa passwd=, pana cand da algoritmul corect Edited November 4, 2009 by p3tru Quote
Android324 Posted January 5, 2010 Report Posted January 5, 2010 toata stima;am incercat faza cu username-ul si merge:D ; thx Quote
trxtxx Posted January 5, 2010 Report Posted January 5, 2010 felicitari mi-a placut ceea ce am citit. Quote
diablo2323 Posted January 17, 2010 Report Posted January 17, 2010 felicitari... intr-adevar se vede ca ai muncit mult Quote
sherpishoru Posted February 26, 2010 Report Posted February 26, 2010 Nu stiu daca ajuta cu ceva dar am observat ca tokenul generat cu ajutorul userului si parolei aicihttps://login.yahoo.com/config/pwtoken_get?src=ymsgr&login=[USERNAME]&passwd=[PASSWORD]are partnerid identic cu cel generat in acelasi fel pe baza de alias si password Quote
GAWRRELL Posted March 26, 2010 Report Posted March 26, 2010 Buna, vad ca ai studiat destul de mult ..... dar ai obs si tu cred ca daca stergi un fisier (tip .xml) din cache la yahoo... cand repornesti yahoo se instaleaza iar automat..... ai putea afla cum asi putea bloca acest lucru ?? Si te mai rog cv, daca tot vad ca te pricepi la yahoo, stii cumva cum asi putea face rost de "client_add.php" de la yahoo ? Quote
WorldKaoss Posted May 2, 2010 Report Posted May 2, 2010 Este prima chestie legata de yahoo care merita citita, chiar daca e al naibii de lunga.Felicitari!La microsoft avem oameni, nu faci cumva o cerere sa te angajeze la Yahoo? Quote
yonutz88 Posted May 22, 2010 Report Posted May 22, 2010 daca am obtinut token-ul cum il decodez cu yahoo64?ca nu prea reusesc Quote
Moderators Dragos Posted May 22, 2010 Moderators Report Posted May 22, 2010 (edited) daca am obtinut token-ul cum il decodez cu yahoo64?ca nu prea reusesc Token-ul il folosesti ca sa intri pe mail-ul victimei.EDIT:Asta ar fi metoda, doar daca nu au modificat-o cei de la Yahoo!<?php$string="TOKENULTAUAICI";print("Original string=$string\n");$decoded=yahoo64_decode($encoded);print("Decoded string=$decoded\n");function yahoo64_decode($source){ $yahoo64="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789._"; $len=strlen($source); if($source[$len-1]=='-') { $plus=2; } if($source[$len-2]=='-') { $plus=1; } if($plus>0) { $len-=4; }; $dest=""; for($i=0;$i<$len;$i+=4) { $chr1=Index($yahoo64,$source[$i]); $chr2=Index($yahoo64,$source[$i+1]); $chr3=Index($yahoo64,$source[$i+2]); $chr4=Index($yahoo64,$source[$i+3]); $dest.=chr(($chr1<<2)|($chr2>>4)); $dest.=chr((($chr2&0xF)<<4)|($chr3>>2)); $dest.=chr((($chr3&0x3)<<6)|($chr4&0x3F)); } switch($plus) { case 1: { $chr1=Index($yahoo64,$source[$i]); $chr2=Index($yahoo64,$source[$i+1]); $dest.=chr(($chr1<<2)|($chr2>>4)); } break; case 2: { $chr1=Index($yahoo64,$source[$i]); $chr2=Index($yahoo64,$source[$i+1]); $chr3=Index($yahoo64,$source[$i+2]); $dest.=chr(($chr1<<2)|($chr2>>4)); $dest.=chr((($chr2&0xF)<<4)|($chr3>>2)); } break; } return($dest);}?> Edited May 22, 2010 by Dragos Quote
loki Posted May 22, 2010 Report Posted May 22, 2010 sau il copii pur si simplu intr-un decoder base64. Base64Decode si apoi Hex encode. Doar este explicat ca yahoo64~=base64. Dar nu vad la ce ar folosi decodat. Quote
parazitul29 Posted May 28, 2010 Report Posted May 28, 2010 cand scriu username-ul si parola imi afiseaza tokenul ca fiind 2345 nu cred ca e asta token-ul deci ce gresesc? Quote
street_racer Posted June 16, 2010 Report Posted June 16, 2010 pfffuu..... multa, multa munca (banuiesc) . BRAVO ! respect si admiratie !!! (chiar daca momentan e limba straina pt mn... citesc si sper sa nu fie in zadar ) Quote
vecinu Posted July 17, 2010 Report Posted July 17, 2010 @Slick: am salvat alogitmul de la sparsit intr-un php (yahoo64.php) pe care l-am pus in Webfolder pe serverul Apache si cand il execut in browser imi pare decat asta:Original string=any string Encoded string=YW55IHN0cmluZw-- Decoded string=any string Asa trebuia facut? Sau cum...?Super interesant tutorialul! Quote
MazaBoY Posted October 11, 2010 Report Posted October 11, 2010 Bravo.Esti de treaba daca ai impartit cu noi Quote
georgepopescu81 Posted October 22, 2010 Report Posted October 22, 2010 bv man, super tare, felicitari, chair e super ce ai realizatnu multi ar fi stat si ar fi reusit sa faca asta bv Quote
romanustietot Posted April 21, 2011 Report Posted April 21, 2011 Citind acest pos am constatat ca ..Nu pot sa imi inchid gura, mai uimit.Esti un om care chiar are putin mai multa inteligenta, gandire.Ai putea fi operator yahoo sau ori unde iti doresti.Daca ma credeti fan "el" .. nu, chiar stiu ce zic Quote