hash VKontakte

Interesați de acest subiect decripta hash, care este folosit pentru a contracara atacuri de contact CSRF-
Daca te uiti la POST-interogări, este ușor pentru a vedea parametrul hash, format din 18 caractere.
Care sunt presupuneri mele pe acest cont

Această funcție pur și simplu tăiat în bucăți și noduri hash caractere. Ca rezultat, hash este trunchiat la 18 de caractere.

Așa se arată în PHP

Pe server, MD5-hash reduce, de asemenea, la 18 caractere (funcției de mai sus) și se compară cu hash care a venit în cerere.

Cum este MD5-hash?
Cel mai probabil prin parametrii de cerere. Dacă deschideți documentația pentru API. există un astfel de lucru.

Este logic să presupunem (dacă luăm un cod de probă API) că MD5-hash este format ca aceasta
md5 ( '12345act = enterală = 1gid = 11111'); // să se alăture grupului
md5 ( '12345act = leaveal = 1gid = 11111'); // pentru a părăsi grupul

md5 ( 'mid = 12345 # 038; act = introduceți # 038; Al = 1 # 038; gid = 11111'); // să se alăture grupului
md5 ( 'mid = 12345 # 038; act = părăsi # 038; Al = 1 # 038; gid = 11111'); // pentru a părăsi grupul

sau cam așa ceva
md5 ( '12345method = groups.entergid = 11111') // pentru aderarea la grupul
md5 ( '12345method = groups.leavegid = 11111'); // pentru a părăsi grupul

12345 - id utilizator
11111 - Id-ul grupului

Dar, în realitate, hash pentru intrare și ieșire pentru același! Prin urmare, acționează parametru (introduceți concediu ||) nu este utilizat în formarea hash. Mai mult decât atât, pentru hash „să le spui prietenilor tăi despre grupul“ coincide cu hash hash intrarea și ieșirea.

Este clar faptul că parametrii id-ul utilizatorului și de grup id-ul utilizat în formarea unui hash, dar ce altceva este acolo folosit nu este cunoscută. Sansele sunt încă utilizate într-o anumită cheie „podsolki“ hash. Documentația API poate fi văzut aplicații cheie.

Dar chiar dacă am afla cum o MD5-hash, nu este clar modul în care algoritmul atunci este trunchiat la 18 de caractere. Deși, dacă să știe exact MD5, bustul ar putea fi de a încerca să găsească algoritmul. Probabil că aveți o permutare normală de caractere într-un mod liniar (a se vedea. Mai sus).

În general, cred că hash de 32 de caractere este trunchiat de algoritmul vechi de 2 ori (a se vedea. Mai sus PHP-funcția decodehash). Cu fiecare linie de trecere scade cu 7 simboluri (32-> 25-> 18).
Tip decodehash (decodehash (MD5 ( 'la mijlocul = 12345gid = 11111')))

De ce este algoritmul vechi? Pentru că toți programatorii neisprăvit teribil și probabil algoritmul nu sa schimbat.

De ce am decis că totul este luat din md5 de 32 de caractere, și nu din SHA sau o altă metodă de criptare? În primul rând, MD5 - Această latină, plus figuri, care coincide cu simbolul hash. În al doilea rând, contactul inițial utilizați MD5 pentru a cripta parolele în cookie-uri. În al treilea rând, MD5 este utilizat în Contacte API.

Pe scurt, noaptea nedumerit și în cele din urmă a părăsit această ocupație. Dar dacă cineva are ideea de a lucra la decodare, este dispus să plătească bani buni :)

În ceea ce privește decriptarea este mai bine să nu încercați, deoarece MD5 „cheie“ 100% secretă sărat care este stocată pe server.

Deci, bl *, această idee! Cu toate acestea, un singur lucru - memoria pe munca ta dohrenischa calculator. Poate că nu este de ajuns pentru ea, este cel mai probabil. Deci, atunci: 1) a crea un generator de parole simplu (De exemplu, am fost în stare să rezolve toate combinațiile PERL de la 2 până la 6 caractere pe 7 nu am suficient spațiu) ... 2) Creați un script care utilizează o listă de parole dintr-un dicționar și reworks în MD5-hash; și apoi, după programul de prelucrare a datelor creează un dicționar (cum ar fi o bază de date) și sunt scrise în fiecare rând valori:
treci: parola pass_md5: parol_md5.

Ei bine, în cazul în care o persoană de contact se utilizează podsolku la MD5, cel mai bun lucru în al doilea scenariu pe perl - a crea un script care ar fi script js identic. Iar baza de date va fi scris ca:
treci: Parola pass_md5: pass_md5sol parol_md5: Parola md5sol.

Generator parole simple, realzovat folosind o buclă în timp ce în perl limba:
#! Usr / bin / perl
deschis (CFG, "alfabet.txt");
deschis (TRECERE, ">> brut1.txt");
în timp ce ($ p =)
TRECERE imprimare "0 $ p";
>
close CFG;
TRECERE de imprimare "\ n";
TRECERE închidere;
deschis (CFG, "alfabet.txt");
deschis (TRECERE, ">> brut1.txt");
în timp ce ($ p =)
TRECERE imprimare "1 $ p";
>
close CFG;
TRECERE de imprimare "\ n";
TRECERE închidere;
.
.
.
Și așa mai departe. Este necesar de menționat că aceste aceleași bucăți de cod într-un singur fișier cu extensia pl 36 de piese. În cazul în care linia de trecere de imprimare „1 $ p“ - nu este necesar să se stabilească o variabilă de un caracter. Dispunerea tastaturii este de la 0 la 9 pe numere, apoi litere ale tastaturii în limba engleză este mic.
De asemenea, este demn de reamintit faptul că creează alfabet.txt fișier și sunt scrise linie cu linie în ea alfabetul:
0
1
2
3
.
și așa mai departe. Acest lucru va crea un cod de două cifre a programului. Pentru a-l crește cu un caracter, trebuie să creați un altul același program, dar datele sunt preluate din vocabularul parolei de două cifre pentru a crea trei cifre. Obțineți acest lucru:
#! Usr / bin / perl
deschis (CFG, "brut1.txt");
deschis (TRECERE, ">> brut2.txt");
în timp ce ($ p =)
TRECERE imprimare "0 $ p";
>
close CFG;
TRECERE de imprimare "\ n";
TRECERE închidere;
. Și așa mai departe.
Programul este același, dar ia datele și creează un dicționar brut1.txt brut2.txt. În general, sper că sensul este clar.
În prima etapă crearea de dicționare. Și apoi, sbabatsat script-ul pentru modificarea în MD5. O să se pregătească cu scenariul de pe Internet, dar este mai bine să se refacă în conformitate. Chiar acum eu nu am de gând să rupă capul meu peste asta. Script care reworks cu o parolă obișnuită în MD5 nu și caută un meci, de exemplu:
#! / Usr / bin / perl -w

utilizați stricte;
utilizați Digest :: MD5 QW (md5_hex);

mi $ correct_pass = "bb456cfc65785beda9ec0c034e2a54ae";

imprima „Introduceți parola: \ n“;

$ Mea să treacă =;
Chomp ($ pass); # Prune \ n

if ($ correct_pass echiv md5_hex ($ pass)) Print "Bine ai venit \ n!";
> Print Else "Am fost nafig \ n!";
>

Nu mai este m-am gândit, bine, și apoi tăiați la 18 caractere.