Jump to content

VirginMary

Members
  • Posts

    16
  • Joined

  • Last visited

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

VirginMary's Achievements

Newbie

Newbie (1/14)

10

Reputation

  1. Programul este foarte incomplet. In plus de asta, dupa cum zicea SlicK, trebuie facut si ceva bot care sa colecteze zecile de mii de intrebari.
  2. Am vazut ca a aparut un topic legat de "cum sa devii un informatician de renume". Vreau sa-mi exprim si eu punctul de vedere legat de acest subiect. M-a inspirat un articol al lui Gerard't Hooft "How to become a good theoretical physicist" care se gaseste la adresa http://www.phys.uu.nl/~thooft/theorist.html. El porneste de la constatarea ca primeste frecvent mailuri de la diletanti care cred ca "au rezolvat lumea". Apoi, continua prin a insira o lista foarte lunga de subiecte pe care cineva trebuie sa le studieze ca aiba sansa lui la un Premiu Nobel in Fizica. Cine nu este expert in toate acele domenii NU ARE CUM sa faca performanta. Voi incerca sa compilez si eu o lista de lucruri pe care un bun hacker TREBUIE sa le stie. Va rog sa veniti si voi cu propriile sugestii . Cineva care incepe programarea de la zero ar trebui sa se familiarizeze cu notiuni de baza OOP si un limbaj bine documentat in care nu trebuie sa-ti gestionezi singur memoria: Java, C# etc. Urmatorul pas este sa treaca la C si sa inteleaga ce sunt pointerii, stack-ul, heap-ul. Urmeaza C++, un limbaj care combina conceptele OOP cu avantajele C-ului. Un programator bun in C++ ar trebui sa inteleaga lucruri mai avansate, legate de design-ul unui limbaj de programare: programare generica (template-uri), eficienta versus lizibilitate (C++ este orientat spre eficienta, deci metodele nu sunt implicit virtuale chiar daca asta complica putin codul), cum se face apelul unei rutine (de ce get-erele si set-erele sunt de obicei metode inline) etc etc. Cand stapaniti bine C++ si STL-ul familiarizati-va cu asamblarea si incercati sa intelegeti lucruri precum calling conventions, moduri de adresare ale memoriei, seturi de instructiuni ale procesorului... Ar fi indicat sa mergeti mai departe si sa studiati notiuni de hardware si arhitectura calculatoarelor ca sa puteti sa apreciati importanta cache-ului, ce ofera diverse seturi de instructiuni (CISC vs RISC, SSE, ...), ce este endianitatea, cum functioneaza pipeline-ul procesorului, ce este clockul si cum afecteaza frecventa lui viteza si consumul de putere etc etc etc. Numai daca aveti cunostinte solide de hard veti fi in stare sa optimizati "la sange" un program. Ar fi bine sa va bagati putin in teoria compliatoarelor sa stiti ce este un back end si un front end, un limbaj compilat vs unul interpretat, codul intermediar (bytecode), optimizarea, alocarea registrilor de catre compilator, cum functioneaza un tokenizer si parser (cu YACC-ul se poate genera un parser de la zero destul de usor). Apoi, studiati in profunzime conceptele cu care vin sistemele de operare: multithreading, proces, socket, sistem de fisiere, driver. Atacati probleme mai dificile, dar foarte utile: scrieti-va propriile drivere pentru Linux, intrati usor-usor in sursele kernelului de Linux, incercati sa va faceti o distributie proprie (cautati dupa proiectul Linux From Scratch). Un Linux guru este un guru al programarii. Nu neglijati nici API-urile Win32. Experimentati cu diverse limbaje de programare/scripting: bash scripting, perl, python, lisp, haskell. O sa va convingeti ca limbajele functionale sunt bazate pe cu totul alte principii decat cele procedurale. Poate ca viitorul este al lor. Incercati cat mai multe in domeniul retelisticii: scrieti programe client/server, trimiteti pachete UDP, generati pachete ICMP si frame-uri ethernet cu raw sockets in Linux, studiati protocoalele TCP/IP, HTTP, FTP, DHCP, protocoale de rutare (RIP, OSPF, IGRP). Capturati pachete cu un sniffer si decodati-le. Challenge: scrieti un program care sa inregistreze convesatii Yahoo Mesenger. De-abia dupa ce ati parcurs toate etapele de mai sus are sens sa va apucati de "hacking". Din punctul meu de vedere, cea mai buna introducere pentru un incepator in domeniul securitatii care are insa cunostinte solide de programare sunt buffer overflow-urile. Cititi tutorial lui aleph0, scrieti un exploit pentru un program de test si scrieti un payload in asm care sa permita remote control (inainte de asta trebuie sa va jucati putin cu Win32 function calls din asm). Metoda descrisa de aleph0 este foarte generala, asa ca nu este de mirare ca au aparut tool-uri precum Metasploit care automatizeaza procesul dezvoltarii unui exploit pentru o vulnerabilitate.
  3. Slick ... esti foarte bun. Unde lucrezi? Plecat din tzara?
  4. ... Esti tare. Cati galbeni ai ??? Un bug al conquiztador-ului?
  5. Hackuirea serverul ii intotdeauna o optiune.
  6. Jocurile in care se castiga bani n-ar trebui implementate in limbaje usor de decompilat gen Flash/Java/C#. Pentru ei este cam tarziu sa schimbe ceva. :twisted:
  7. Serverul trimite intrebarea si variantele de raspuns intr-un mesaj QUESTION pentru intrebarile grila si TIPQUESTION pentru cele cu raspuns rapid. Raspunsul corect vine doar *dupa* ce toti userii au trimis variantele lor intr-un mesaj ANSWERRESULT pentru intrebarile grila si TIPRESULT pentru cele rapide. Deci serverul *nu* trimite raspunsul corect odata cu intrebarea. Cred ca ceea ce se intampla in filmulet este posibil doar daca se compileaza o lista de intrebari si raspunsuri corecte asociate dupa multe sute jocuri. Corectati-ma daca gresesc.
  8. Haha. Presimt ca o sa inceapa o cursa a inarmarii intre tunurile de la RST si blidajul conqiztador-ului. Go! Go! Go!
  9. Ca sa obtineti noua valoare a constantei secretKey (cea care in cod este egala cu 2875741179) trebuie scris un program care executa algoritmul de decodare pentru toate valorile posibile ale secretKey. Eventual, ca sa reduceti timpul de executie, puteti sa incercati numere in jurul constantei floating point din codul ActionScript decompilat la care ii faceti cast la un intreg. Parametrii k si q se initializeaza cu parametrii KEY si QUESTION dintr-un mesaj QUESTION capturat cu un sniffer. Algoritmul de decodare se executa pana ce stringul rezultat pusca cu intrebarea pe care v-ati notat-o in timpul jocului. Tot procesul ar putea dura cateva ore. Daca descopera cineva noua constanta, puneti-o pe forum!
  10. Eu am facut captura pachetelor in Linux cu libpcap. Slackul meu vine cu libpcap-ul preinstalat asa ca tot ce a trebuit sa fac a fost sa compilez sursele cu gcc la care i-am pasat parametrul -lpcap. S-ar putea sa se fi schimbat modul in care se face codarea pachetelor din decembrie cand am decompilat swf-ul. Sunt destul de ocupat in perioada asta si nu am timp sa testez. Daca decompilati cu Sothink constantele care apar in algoritmul de hashuire iau ceva valori floating point ciudate. Solutia pe care am gasit-o a fost sa execut algoritmul cu toate constantele intregi posibile (4 miliarde ) pana ce a puscat rezultatul decodarii cu intrebarea. Poate aveti voi idei mai inteligente. Ca idee, cum se poate testa daca metoda de decodare mai este valabila: faceti captura la o intrebare si executati programul cu variabila k inlocuita cu parametrul KEY, variabila q inlocuita cu parametrul QUESTION, variabila op1 inlocuita cu parametrul OP1 etc etc . Rezultatul ar trebui sa fie ceva inteligibil. Intrebarile arata cam asa: <QUESTION RATING="3.0" CREATOR="Infernal" KEY="4DC68E32C311ACF379EBE2D72E13C91E" QUESTION="4E978B2EBCC12F5906648EBAA76EA7...." OP1="4B9F9334E98C1E52" OP2="5B898831E287164F00" OP3="4F91932BEF8A1E" OP4="45918930F2840D4F4F30BEAEEB61" /> O alta chestie. Nu am nici o legatura cu hackul de conquiztador care apare pe trilulilu sau cu cel pe care il detin moderatorii RST.
  11. Ma bucur ca va place tutorialul. Cred ca pornind de aici este destul de usor pentru cine stie programare sa faca o aplicatie asemanatoare cu cea din fimuletul de pe net. Va recomand sa cititi inainte tutorialul despre captura pachetelor cu libpcap pe care il gasiti la www.cet.nau.edu/~mc8/Socket/Tutorials/section1.html si sa va jucati putin cu decodarea payload-ului pachetelor tcp. Tot ce trebuie sa faceti pentru a ajunge la payload este sa adaugati sizeof(tcphdr)+sizeof(iphdr)+sizeof(ethhdr) la adresa bufferului care contine frameul ethernet. Dupa aceea parsati XML-ul si filtrati toate mesajele inafara de cele de tip QUESTION, TIPQUESTION (intrebari) si ANSWERRESULT, TIPRESULT (raspunsuri) Pentru mesajele QUESTION si TIPQUESTION extrageti valorile asociate cheilor QUESTION, OP1, OP2, OP3, OP4 si decodati-le cu algoritmul din postul initial. Lansez deci un challenge pentru programatori: o aplicatie care sa actualizeze in timpul jocului un fisier cu intrebarile si variantele de raspuns corecte. Peste 2-3 saptamani o sa trimit si eu varianta mea, acum sunt ocupat cu licenta . Good luck!
  12. Hacking conquiztador.ro for fun and profit Clientul conquiztador este implementat in Flash si poate fi decompilat cu tooluri precum Sothink. Protocolul de comunicare intre client si server este compus din mesaje XML plain text. Folosind o biblioteca de captura a pachetelor diponibila in majoritatea distributiilor de Linux (libpcap) se poate face inginerie inversa si se pot decoda mesajele (intrebari, solutii corecte, convorbiri pe chat, etc) in timp real. Ok, sa presupunem ca ne-am logat si am demarat jocul. Clientul trimite o serie de mesaje: ------------------------------------------------------------------------------ WEBLOGIN - Parametrii sesiunii setati in urma logarii prin HTTP ------------------------------------------------------------------------------ Cheie: SID Semnificatie: Identificator de sesiune (GUID pe 128 de biti) Exemplu valoare: 8be901bd6984d46fd6285495d56e0310 ------------------------------------------------------------------------------ Cheie: USERID Semnificatie: Identificatorul utilizatorului (intreg) Exemplu valoare: 351749 ------------------------------------------------------------------------------ ------------------------------------------------------------------------------ GETDATA - Request pentru datele personale si lista de prieteni ------------------------------------------------------------------------------ Cheie: QUERY Semnificatie: Informatii cerute Exemplu valoare: MYDATA,FRIENDLIST ------------------------------------------------------------------------------ Serverul raspunde cu: ------------------------------------------------------------------------------ FRIENDLIST - Lista de prieteni ------------------------------------------------------------------------------ Cheie: USERS Semnificatie: Lista de prieteni ------------------------------------------------------------------------------ ------------------------------------------------------------------------------ MYDATA - Datele personale ------------------------------------------------------------------------------ Cheie: NAME Semnificatie: Nume utilizator Exemplu valoare: MadCow ------------------------------------------------------------------------------ Cheie: ID Semnificatie: Identificator utilizator Exemplu valoare: 351749 ------------------------------------------------------------------------------ Cheie: JEP Semnificatie: PAJ ------------------------------------------------------------------------------ Cheie: VEP Semnificatie: PRC ------------------------------------------------------------------------------ Cheie: AOJ Semnificatie: PPR ------------------------------------------------------------------------------ Cheie: GWR Semnificatie: EFJ ------------------------------------------------------------------------------ Cheie: GAMECOUNT Semnificatie: Numarul de jocuri ------------------------------------------------------------------------------ Cheie: DAYRANK Semnificatie: Numarul stelute ------------------------------------------------------------------------------ ------------------------------------------------------------------------------ NOCHAT - Motivul pentru care utilizatorul nu poate vorbi pe chatul general ------------------------------------------------------------------------------ Cheie: REASON Semnificatie: Motivul... ------------------------------------------------------------------------------ ------------------------------------------------------------------------------ GAMEROOM - Informatii camera de joc ------------------------------------------------------------------------------ Cheie: ID Semnificatie: Identificatorul camerei de joc Exemplu valoare: 1 ------------------------------------------------------------------------------ Cheie: TITLE Semnificatie: Numele camerei Exemplu valoare: Blitzkrieg ------------------------------------------------------------------------------ Cheie: MAP Semnificatie: Harta pe care se joaca Exemplu valoare: RO ------------------------------------------------------------------------------ Cheie: PLAYERS Semnificatie: Utilizatori in asteptare Exemplu valoare: 10 ------------------------------------------------------------------------------ Cheie: INGAME Semnificatie: Utilizatori implicati in jocuri Exemplu valoare: 627 ------------------------------------------------------------------------------ ------------------------------------------------------------------------------ SEPROOM - Informatii separeu ------------------------------------------------------------------------------ Cheie: ID Semnificatie: Identificatorul separeului Exemplu valoare: 6799780 ------------------------------------------------------------------------------ Cheie: MAP Semnificatie: Harta Exemplu valoare: RO ------------------------------------------------------------------------------ Cheie: U1 Semnificatie: Creatorul separeului Exemplu valoare: Vlad Vlad ------------------------------------------------------------------------------ Cheie: DEPU1 Semnificatie: Primul jucator Exemplu valoare: Vlad Vlad ------------------------------------------------------------------------------ Cheie: DEPU2 Semnificatie: Al doilea jucator Exemplu valoare: Ion Ion ------------------------------------------------------------------------------ ------------------------------------------------------------------------------ USERLIST - Lista utilizatorilor logati ------------------------------------------------------------------------------ Cheie: ULCH Semnificatie: Utilizatori logati Exemplu valoare: +TIBERIU 8|-r3alw4r|-patrunzatoru ------------------------------------------------------------------------------ ------------------------------------------------------------------------------ CHATMSG - Mesaj pe chatul general ------------------------------------------------------------------------------ Cheie: MID Semnificatie: Identificator mesaj Exemplu valoare: 924881 ------------------------------------------------------------------------------ Cheie: SENDER Semnificatie: Utilizatorul care a trimis mesajul Exemplu valoare: BobbyGuard ------------------------------------------------------------------------------ Cheie: MSG Semnificatie: Mesajul propriu-zis Exemplu valoare: Comportati-va rezonabil, nu depasiti limitele bunului simt ------------------------------------------------------------------------------ In timpul unui joc mesajele pot fi urmatoarele: ------------------------------------------------------------------------------ STATE - Serverul anunta clientul ca starea jocului s-a modificat. ------------------------------------------------------------------------------ Cheie: SCREEN Semnificatie: Harta Exemplu valoare: MAP_RO ------------------------------------------------------------------------------ Cheie: ROUND Semnificatie: A cata runda din joc este cea curenta Exemplu valoare: 6 ------------------------------------------------------------------------------ Cheie: NEXTPLAYER Semnificatie: Urmatorul jucator care trebuie sa aleaga un teritoriu Exemplu valoare: 2 ------------------------------------------------------------------------------ Cheie: PHASE Semnificatie: Etapa jocului cucerire/razboi Exemplu valoare: 2 ------------------------------------------------------------------------------ Cheie: HC Semnificatie: Ordinea jucatorilor Exemplu valoare: 123 ------------------------------------------------------------------------------ Cheie: POINT1 Semnificatie: Punctele primului jucator Exemplu valoare: 2500 ------------------------------------------------------------------------------ Cheie: POINT2 ------------------------------------------------------------------------------ Cheie: POINT3 ------------------------------------------------------------------------------ Cheie: BASES Semnificatie: Pozitia turnurilor Exemplu valoare: 0F0206 ------------------------------------------------------------------------------ Cheie: SELECTIONS Semnificatie: Teritoriile selectate de jucatori Exemplu valoare: 000400 ------------------------------------------------------------------------------ Cheie: AREAS Semnificatie: Distributia teritoriilor la jucatori Exemplu valoare: 331243313113433341333141334111 ------------------------------------------------------------------------------ ------------------------------------------------------------------------------ STATE - Serverul anunta clientul ca se asteapta dupa un alt jucator (imaginea cu clepsidra) ------------------------------------------------------------------------------ Cheie: SCREEN Semnificatie: Starea noua stare este "in asteptare" Exemplu valoare: WAIT ------------------------------------------------------------------------------ ------------------------------------------------------------------------------ MESSAGE - Mesaj privat trimis ------------------------------------------------------------------------------ Cheie: TO Semnificatie: Cui ii este adresat mesajul (0 pentru toata lumea) Exemplu valoare: 0 ------------------------------------------------------------------------------ Cheie: TEXT Semnificatie: Mesajul Exemplu valoare: conquizator rulz ------------------------------------------------------------------------------ ------------------------------------------------------------------------------ MESSAGE - Mesaj privat primit ------------------------------------------------------------------------------ Cheie: FROM Semnificatie: De la cine vine mesajul Exemplu valoare: 3 ------------------------------------------------------------------------------ Cheie: MSG Semnificatie: Mesajul Exemplu valoare: yep ------------------------------------------------------------------------------ ------------------------------------------------------------------------------ QUESTION - Intrebare grila ------------------------------------------------------------------------------ Cheie: RATING Semnificatie: Punctajul mediu cu care a fost evaluata intrebarea de catre jucatori Exemplu valoare: 3.0 ------------------------------------------------------------------------------ Cheie: CREATOR Semnificatie: Utilizatorul care a trimis intrebarea Exemplu valoare: Infernal ------------------------------------------------------------------------------ Cheie: KEY Semnificatie: Cheia cu care se codeaza intrebarea si optiunile. Este un numar pe 128 de biti generat aleator de catre server pentru fiecare intrebare. Exemplu valoare: 4DC68E32C311ACF379EBE2D72E13C91E ------------------------------------------------------------------------------ Cheie: QUESTION Semnificatie: Intrebarea hashuita Exemplu valoare: 4E978B2EBCC12F5906648EBAA76EA7DF 1FB94D95BF6E3AF48D9ACC2A841F5655 64928263C4840D4E11308CBDE260AB8A 15F0519DF17B68F1DF90C422D0527F5D 289C922D42625F5D0B648EA642AEA3C0 ------------------------------------------------------------------------------ Cheie: OP1 Semnificatie: Prima varianta de raspuns Exemplu valoare: 4B9F9334E98C1E52 ------------------------------------------------------------------------------ Cheie: OP2 ------------------------------------------------------------------------------ Cheie: OP3 ------------------------------------------------------------------------------ Cheie: OP4 ------------------------------------------------------------------------------ ------------------------------------------------------------------------------ TIPQUESTION - Intrebare cu raspuns rapid ------------------------------------------------------------------------------ Cheie: RATING ------------------------------------------------------------------------------ Cheie: CREATOR ------------------------------------------------------------------------------ Cheie: KEY ------------------------------------------------------------------------------ Cheie: QUESTION ------------------------------------------------------------------------------ ------------------------------------------------------------------------------ ANSWER - Clientul trimite catre server raspunsul la o intrebare grila ------------------------------------------------------------------------------ Cheie: ANSWER Semnificatie: A cata varianta a fost selectata Exemplu valoare: 3 ------------------------------------------------------------------------------ ------------------------------------------------------------------------------ ANSWERRESULT - Variantele jucatorilor si raspunsul corect pentru o intrebare grila ------------------------------------------------------------------------------ Cheie: PLAYER1 Semnificatie: Raspunsul primului jucator Exemplu valoare: 3 ------------------------------------------------------------------------------ Cheie: PLAYER2 ------------------------------------------------------------------------------ Cheie: GOOD Semnificatie: Raspunsul corect ------------------------------------------------------------------------------ ------------------------------------------------------------------------------ TIP - Clientul trimite catre server raspunsul jucatorului la o intrebare rapida ------------------------------------------------------------------------------ Cheie: TIP Semnificatie: Raspunsul Exemplu valoare: 130 ------------------------------------------------------------------------------ ------------------------------------------------------------------------------ TIP - Serverul anunta raspunsul altui jucator ------------------------------------------------------------------------------ Cheie: PLAYER Semnificatie: Numarul jucatorului Exemplu valoare: 3 ------------------------------------------------------------------------------ Cheie: VALUE Semnificatie: Raspunsul Exemplu valoare: 1962 ------------------------------------------------------------------------------ Cheie: TIME Semnificatie: Timpul de reactie Exemplu valoare: 05.22 ------------------------------------------------------------------------------ ------------------------------------------------------------------------------ TIPRESULT - Variantele jucatorilor si raspunsul corect pentru o intrebare rapida</span> ------------------------------------------------------------------------------ Cheie: WINNER Semnificatie: Numarul castigatorului Exemplu valoare: 3 ------------------------------------------------------------------------------ Cheie: GOOD Semnificatie: Raspunsul corect Exemplu valoare: 3 ------------------------------------------------------------------------------ Cheie: SECOND Semnificatie: Numarul celui de pe locul doi ------------------------------------------------------------------------------ ------------------------------------------------------------------------------ WINNERSELECT - Serverul anunta clientul ce teritoriu a fost selectat ------------------------------------------------------------------------------ Cheie: PLAYER Semnificatie: Numarul castigatorului ------------------------------------------------------------------------------ Cheie: AREA Semnificatie: Teritoriul Exemplu valoare: 2 ------------------------------------------------------------------------------ ------------------------------------------------------------------------------ DISCONNECTED - Un jucator se deconecteaza ------------------------------------------------------------------------------ Cheie: PLAYER Semnificatie: Numarul castigatorului ------------------------------------------------------------------------------ Cheie: NAME Semnificatie: Numele jucatorului Exemplu valoare: brick_in_the_wall ------------------------------------------------------------------------------ ------------------------------------------------------------------------------ SUBSTITUTE - Jucatorul este inlocuit cu robotul ------------------------------------------------------------------------------ Cheie: PLAYER Semnificatie: Numarul castigatorului ------------------------------------------------------------------------------ Cheie: NAME Semnificatie: Numele jucatorului Exemplu valoare: brick_in_the_wall (robot) ------------------------------------------------------------------------------ ------------------------------------------------------------------------------ CMD - Informatii la terminarea jocului ------------------------------------------------------------------------------ Cheie: CMD Exemplu valoare: END_GAME ------------------------------------------------------------------------------ Cheie: PLACINGS Semnificatie: Ordinea jucatorilor la final Exemplu valoare: 312 ------------------------------------------------------------------------------ Cheie: JEPCHANGE Semnificatie: Schimbare PAJ Exemplu valoare: -17 ------------------------------------------------------------------------------ Cheie: NEWJEP Semnificatie: Noua valoare PAJ Exemplu valoare: 4966 ------------------------------------------------------------------------------ Cheie: GAMECOUNT Semnificatie: Numarul de jocuri ------------------------------------------------------------------------------ Cheie: MONEY Semnificatie: Galbenii ------------------------------------------------------------------------------ Cheie: MONEYCHANGE Semnificatie: Galbeni facuti in jocul curent ------------------------------------------------------------------------------ Cheie: SELVEP Semnificatie: PRC intrebari grila ------------------------------------------------------------------------------ Cheie: SELVEPCH Semnificatie: Schimbare PRC intrebari grila ------------------------------------------------------------------------------ Cheie: TIPVEP Semnificatie: PRC intrebari rapide ------------------------------------------------------------------------------ Cheie: TIPVEPCH Semnificatie: Schimbare PRC intrebari rapide ------------------------------------------------------------------------------ Cheie: VEP Semnificatie: PRC ------------------------------------------------------------------------------ Cheie: VEPCH Semnificatie: Schimbare PRC ------------------------------------------------------------------------------ Cheie: GWR Semnificatie: EFJ ------------------------------------------------------------------------------ Cheie: AOJ Semnificatie: PPR ------------------------------------------------------------------------------ Cheie: AOJCH Semnificatie: Schimbare PPR ------------------------------------------------------------------------------ Cheie: ANSCNT Semnificatie: Numarul de intrebari grila ------------------------------------------------------------------------------ Cheie: TIPCNT Semnificatie: Numarul de intrebari rapide ------------------------------------------------------------------------------ Cheie: GOODANSCNT Semnificatie: Numarul de intrebari grila la care am raspuns corect ------------------------------------------------------------------------------ Cheie: TIPWINCNT Semnificatie: Numarul de intrebari rapide cu raspuns corect. ------------------------------------------------------------------------------ ------------------------------------------------------------------------------ CLOSEGAME - Clientul notifica serverul de faptul ca am iesit din joc ------------------------------------------------------------------------------ Intrebarile sunt incapsulate intr-un mesaj QUESTION si sunt hashuite cu o cheie variabila generata de server. Atat intrebarile cat si optiunile de raspuns sunt codate UTF8 deci caracterele uzuale au un octet iar diacriticele doi octeti. Ce se poate face relativ usor este sa se decodeze intrebarile si sa se adauge automat la o baza de date in timpul jocului. Un bot care sa joace neasistat este mai greu de realizat. Algoritmul cu care se face decodarea este prezentat in continuare, implementat in cod C. #define ROT(k) ((((k) >> 7) & 33554431) | (((k) & 127) << 25))</div> int str_to_hex(char *s, int len) { int i, ret = 0; for (i = 0; i < len; i++) { ret = ret * 16 + ((s[i] >= '0' && s[i] <= '9') ? (s[i] - '0') : (s[i] - 'A' + 10)); } return ret; } int dcd_key(char *s) { int aux; if (*s == 0) return 0; aux = str_to_hex(s, 2); aux = ((aux & 28) >> 2) * 2 + 2; return str_to_hex(&s[aux], 8) ^ 2875741179; } void dcd_text(char *buf, char *s, int k) { int i, len = strlen(s); unsigned long aux; if (k == 0) { strcpy(buf, s); return; } for (i = 0; i < len / 2; i++) { aux = (str_to_hex(&s[i * 2], 2) ^ k) & 255; if (aux <= 31) { *(buf++) = '~'; } else if (aux >= 128) { int uc = aux & 0x3F; k = ROT(k); i++; aux = (str_to_hex(&s[i * 2], 2) ^ k) & 255; uc = (uc << 6) + (aux & 0x3F); switch (uc) { case 0xe2: *(buf++) = 'a'; break; // ^a case 0xc2: *(buf++) = 'A'; break; // ^A case 0xee: *(buf++) = 'i'; break; case 0xce: *(buf++) = 'I'; break; case 0x0103: *(buf++) = 'a'; break; case 0x0102: *(buf++) = 'A'; break; case 0x0163: *(buf++) = 't'; break; case 0x0162: *(buf++) = 'T'; break; case 0x015F: *(buf++) = 's'; break; case 0x015E: *(buf++) = 'S'; break; case 0x0218: *(buf++) = 's'; break; case 0x0219: *(buf++) = 'S'; break; case 0x021B: *(buf++) = 't'; break; case 0x021A: *(buf++) = 'T'; break; default: *(buf++) = '~'; break; } } else if (aux == 127) { *(buf++) = '~'; } else { *(buf++) = (char)aux; } k = ROT(k); } *buf = 0; } int main() { char *k = "592DC16F1B2D717B0B10B6491C0C8A4F"; // cheia aleatoare generata de server char *q = // mesaj hashuit "0FE9F5B9FD2A1393A4BB79736BCAF3C516D2527B4EC8F78633A7341455487C81" "23F2FFE6FD1BB541A2F2777F6ADFF3D40DD55E3A596917CF63A2244E560760D7"; char *op1 = "7CA6E0EAB31CA4"; // prima optiune char *op2 = "78A6E0EAB31CA454"; // a doua optiune char *op3= "7EA6E0EAB31CA454"; // a treia optiune char *op4 = "7EB6ADE7B849A354B3EE637E63"; // a patra optiune unsigned long key; char buf[1024]; key = dcd_key(k); dcd_text(buf, q, key); printf("Intrebare %s\n", buf); // Box: Cat timp dureaza pauza dintre reprizele unui meci de box? dcd_text(buf, op1, key); printf("Prima optiune %s\n", buf); // 1 minut dcd_text(buf, op2, key); printf("A doua optiune %s\n", buf); // 5 minute dcd_text(buf, op3, key); printf("A treia optiune %s\n", buf); // 3 minute dcd_text(buf, op4, key); printf("A patra optiune %s\n", buf); // 30 de secunde return 0; } O versiune in format HTML a acestui tutorial se gaseste la virginmarythefifth.we.bs
  13. Ce parere aveti de tutorialul asta? Eu l-am scris Edited by Nemessis: NU pune linkuri catre alte site-uri decat daca sunt la sfarsitul unui articol. Aici nu e loc de facut reclame.
  14. Singurul mod in care se poate vedea cum se face codarea lor este sa se decompileze fisierele Flash folosind de exemplu Sothink. Mai am nevoie de inca un reply sa postez linkul
  15. Protocolul este bazat pe XML si mesajele sunt plain text. Serverul trimite intrebarile catre client prin pachete cu date de genul: <QUESTION RATING="3.0" CREATOR="Infernal" KEY="4D..." QUESTION="4E56..." OP1="4B2F..." OP2="..." OP3="..." OP4="..."/> unde KEY, QUESTION, OP1234 iau valori hexazecimale. Dupa cum vedeti doar intrebarile si variantele de raspuns sunt hashuite.
×
×
  • Create New...