angelwings Posted January 30, 2008 Report Posted January 30, 2008 Pentru interpretarea pachetelor am folosit c++Pana sa ajungi la interpretare, trebuie sa treci de captarea pachetelor:- nu instalezi winpcap, ca nu-ti trebuie pt development, iti trebuie doar winpcap developer (contine lib, include si samples)- faci captarea (programul pentru captarea) pachetelor, o sa-ti capteze tot ce trece prin eth adapter- faci filtrare, ca sa-ti ia doar ce te intereseaza- dupa cum s-a spus la inceput, continutul pachetelor este plain text- iti extragi din mesaj ce te intereseaza- iti mai trebuie algoritmul de decodareNu am testat cu visual c++, ci cu dev-c++
SlicK Posted January 30, 2008 Report Posted January 30, 2008 In situatia de fata winpcap nu e necesar, e suficient un socket raw setat sa asculte global pe adaptor cu WSAIoctl, SIO_RCVALL
angelwings Posted January 30, 2008 Report Posted January 30, 2008 Slick, in primul rand felicitari pentru programul facut.In cazul meu, la nivelul meu de programare, winpcap a facut treaba, adica vreau sa zic ca stiu cat sa ma descurc, si cu functiile winpcap mi s-a parut ok. Problema e la crearea bazei de date cu q&a, am inteles ca e pe acolo pe undeva intr-un swf algorimtul de criptare...dar nu stiu daca m-as descursa cu translatarea din swf, mai ales ca si timpul e cam limitat...in fine, in cazul meu e doar pt fun, de aceea nici nu ma stresez
VirginMary Posted January 30, 2008 Author Report Posted January 30, 2008 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.
angelwings Posted January 30, 2008 Report Posted January 30, 2008 Desi am folosit doua metode de captare, nu mai merge pe algorimtul vechi. Deci, ori gresesc eu undeva cu captarea (desi nu cred) sau au schimbat algoritmul de criptare.LE: din cate observ algoritmul nu prea are schimbari, posibil sa se fi scimbat acea constanta. Mai ai valoarea originala din decembrie, ca sa o pot compara cu cea de acum? Tu chiar ai rulat pana ai picat pe intrebare, si daca da, cat a durat?
SlicK Posted January 30, 2008 Report Posted January 30, 2008 Algoritmul a ramas acelasi doar constanta aceea "secretKey" care in algoirtmul lui VirginMary era "2875741179" s-a schimbat.Si eu m-am lovit de aceeasi problema cu valoarea floating point si am facut la fel, am decodat stringul incrementand secretKey'ul(incepand de la valoarea din swf) pana am ajuns la plaintextul corect pe care il stiam bineinteles Btw eu asa am implementat conversia caracterelor unicode:char UNCTABLE[]="AAAAAA_CEEEEIIII_NOOOOO_OUUUUY__aaaaaa_ceeeeiiii_nooooo_ouuuuy_y""AaAaAaCcCcCcCcDdDdEeEeEeEeEeGgGgGgGgHhHhIiIiIiIiIi__JjKkkLlLlLlL""lLlNnNnNnn__OoOoOo__RrRrRrSsSsSsSsTtTtTtUuUuUuUuUuUuWwYyYZzZzZz_";char CorrectUnicode(int c1,int c2){ int nRes=((c1&0x1F)<<6)|(c2&0x3F); if(nRes>=0xC0 && nRes<0x180) { return(UNCTABLE[nRes-0xC0]); } return('_');}iar "str_to_hex()" poate fi inlocuit mai simplu de functia "strtoul()".
drealecs Posted January 31, 2008 Report Posted January 31, 2008 iar "str_to_hex()" poate fi inlocuit mai simplu de functia "strtoul()". asta cu siguranta... de cand am vazut swf am zis ca e o prostie ce e acolodar si cu translatarea cuiva de mai inante tot varzutz.eu am facut asa simplu:int str_to_hex(char *s, int len){ char c; int i, ret = 0; for (i = 0; i < len; i++) { c=s[i]; ret = ret * 16 + strtol(&c,NULL,16); } 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; *(buf++) = aux; k = ((((k) >> 7) & 33554431) | (((k) & 127) << 25)); } *buf = 0;}iar la encodare utf8 ... aaa .. in baza de date o sa fie tot utf8!!! asa ca nu e nevoie de nimic. eventual daca rezulta cu probleme, bagi un mbstowcs si gata.
Grunt Posted January 31, 2008 Report Posted January 31, 2008 Algoritmul a ramas acelasi doar constanta aceea "secretKey" care in algoirtmul lui VirginMary era "2875741179" s-a schimbat.Ne poti spune, te rog, valoarea asta? Nu am deloc experienta cu Flash, asa ca, chiar daca l-as decompila, nu cred ca as sti unde sa ma uit... Si nu vreau sa incerc chiar toate numerele...
angelwings Posted January 31, 2008 Report Posted January 31, 2008 nici eu nu am experienta cu action script, dar iti garantez ca nu e chiar asa de greu de interpretat, daca stii acolo putina programare...e de ajuns sa decompilezi swf-ul si o sa gasesti acel secretkey.Cu incercatul, exact asta e ideea, ca in flash nu o sa gasesti int, asta trebuie sa-l descoperi tu, prin incrementare, dupa cum a zis Slick, pornind de la valoarea din flash.LE: Slick, e diferenta mare intre cheie si valoarea de plecare? Ca nu reusesc sa-mi dau seama, cred ca gresesc eu ceva, am dat pt fiecare incrementare sa verifice daca o parte din intrebare (3-4 caractere) se gaseste in stringul decodat, dar imi iese doar null Informativ, se trece de 3 mld?
rair Posted January 31, 2008 Report Posted January 31, 2008 Am un decriptor pentru flash, da vreau sa stiu cum sa downloadez scriptul dp conquiztador ? :?:
ciupax21 Posted January 31, 2008 Report Posted January 31, 2008 :arrow: sunteti tari baieti !!!! :mrgreen: :mrgreen: vreau sa invatz si io scheme de astea ptr pc
drealecs Posted January 31, 2008 Report Posted January 31, 2008 Algoritmul a ramas acelasi doar constanta aceea "secretKey" care in algoirtmul lui VirginMary era "2875741179" s-a schimbat.Ne poti spune, te rog, valoarea asta? Nu am deloc experienta cu Flash, asa ca, chiar daca l-as decompila, nu cred ca as sti unde sa ma uit... Si nu vreau sa incerc chiar toate numerele... pai era 2875741000 ultima data cand am verificat...s-a mai schimbat? ca n-am decompilatorul la munca...LE:instalat decompilateste 2.875741E+009dar am mai gasit undeva.gcodec.secretkey = _level8.PRELOADERTEXT.text;sa analizam putin.
VirginMary Posted January 31, 2008 Author Report Posted January 31, 2008 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!
Grunt Posted January 31, 2008 Report Posted January 31, 2008 Asa vad si eu aici - 2.875741E+009, adica 2875741000 (era 2875741179 in varianta originala sau nu ma uit unde trebuie?).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.Chiar asta fac acum.
drealecs Posted January 31, 2008 Report Posted January 31, 2008 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! Dar care e treaba cu secretkey asta? nu ar tebui sa-l gasim undeva.decompilatorul greseste cand il decompileaza si-l pune 2.875741E+009 ??si legat de gcodec.secretkey = _level8.PRELOADERTEXT.text; .... crezi ca overwriteaza valoarea cu altceva?
SlicK Posted January 31, 2008 Report Posted January 31, 2008 Inainte de a aprea filmuletul cu programelul meu cei de la conquiztador nu s-au obosit sa ascunda secretKey'ul era in plain ceva de genul "2.87574e+009" care desi in decimal era "2875740000" avea valoarea reala "2875741179". Dupa aceea s-au gandit sa mai ascunda putin lucrurile adica au pus "2.875741e+009" doar ca dupa cum a observat si drealecs valoarea aceea nu mai conteaza pentru ca valoarea reala este luata din "_level8.PRELOADERTEXT.text", daca mai sapam putin observam ca swf'urile sunt incarcate pe mai multe "nivele", level0 fiind "loader_3_cq", si level8 fiind "syscode" deci "_level8.PRELOADERTEXT.text" este valoarea default a unui textbox hidden in "syscode.swf"(frame 1/text 13) fapt care face bruteforce'ul secretKey'lui inutil deoarece valoarea hexadecimala este exacta si nu floating point 1
Grunt Posted January 31, 2008 Report Posted January 31, 2008 Ce sa mai zic? It's the devil's magic. SlicK are dreptate, valoarea e acolo, si algoritmul de decriptare functioneaza. Am gasit si eu asta, dar nu stiam unde sa caut _level8... Mersi!
angelwings Posted January 31, 2008 Report Posted January 31, 2008 Multam Slick, gasit din prima. Greaseala mea ca nu m-am uitat mai bine pe swf decompilat, si am tot rulat cu incrementare de am trecut de 3 mld si nu dadea nimic.
VirginMary Posted January 31, 2008 Author Report Posted January 31, 2008 Haha. Presimt ca o sa inceapa o cursa a inarmarii intre tunurile de la RST si blidajul conqiztador-ului. Go! Go! Go!
angelwings Posted January 31, 2008 Report Posted January 31, 2008 Mergea si pe varianta clasica, dar dura, doar ca valoarea aia din hex vreo 25......, iar eu am rulat de la 27... in sus, deci nici o sansa sa fi terminat pana maine.
moldy Posted January 31, 2008 Report Posted January 31, 2008 spuneti-mi si mie, in care swf si care as se gaseste gaseste secretkey-ul; a si e bun sothink pentru decompilare?
go_sword Posted January 31, 2008 Report Posted January 31, 2008 eu unu presimt ca o sa inchida jocu...
novice123 Posted January 31, 2008 Report Posted January 31, 2008 Sal,nu sunt programator, dar am o intrebare pt cine se pricepe (daca se poate as vrea un raspuns din partea cuiva din staff)Serverul trimite raspunsul corect o data cu intrebarea ? (Presupun ca trimite cele 4 variante de raspuns, dar trimite una dintre variante marcata ca fiind cea corecta?)Daca nu, atunci cum a fost posbil ceea ce se prezinta in film?Daca da, atunci am alta intrebare:Daca se remediaza aceasta situatie, iar raspunsul corect va fi trimis de server catre client abia dupa ce acesta a introdus raspunsul sau (sau raspunsul corect NU va fi trimis catre client, ci raspunsul userului va fi trimis catre server si comparatia cu raspunsul corect va fi executata in server, iar serverul va trimite un mesaj de genul "corect" sau "incorect"),va mai fi posibil ceea ce se intampla in filmulet?Va rog mult de tot raspundeti-mi. Multumesc anticipat !
VirginMary Posted January 31, 2008 Author Report Posted January 31, 2008 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.