Jump to content
VirginMary

Hacking conquiztador.ro for fun & profit

Recommended Posts

Posted

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 decodare

Nu am testat cu visual c++, ci cu dev-c++

Posted

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 :D

Posted

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 :P) 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.

Posted

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?

Posted

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()". :)

Posted
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 acolo

dar 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.

Posted
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... :)

Posted

:)) 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?

Posted
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 decompilat

este 2.875741E+009

dar am mai gasit undeva.

gcodec.secretkey = _level8.PRELOADERTEXT.text;

sa analizam putin.

Posted

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! :P

Posted

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.

Posted
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! :P

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?

Posted

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 :)

  • Downvote 1
Posted

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!

Posted

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 !

Posted

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.

Guest
This topic is now closed to further replies.


×
×
  • Create New...