Există o modalitate de a afla ce tip de criptare/codare este utilizat?
De exemplu, eu sunt de testare a unei aplicații web care stochează parola din baza de date într-un format criptat (WeJcFMQ/8+8QJ/w0hHh+0g==
). Cum pot determina ce hashing sau de criptare este folosit?
Exemplul string (WeJcFMQ/8+8QJ/w0hHh+0g==
) este codificarea Base64 pentru o secvență de 16 biți, care nu arata ca semnificative ASCII sau UTF-8. If aceasta este o valoare stocată pentru parola verification (adică nu într-adevăr un "criptate" parola, mai degrabă un "hash" parola), atunci aceasta este, probabil, rezultatul de o funcție hash calculată de-a lungul parola; cea clasică funcție hash cu un 128-bit de ieșire este MD5. Dar ar putea fi despre orice.
"normale" mod de a ști este să se uite la codul de aplicare. Aplicarea codului este încarnat într-un tangibile, grasime mod (fișiere executabile de pe un server, codul sursă pe undeva...), care nu este, și nu poate fi, la fel de mult protejat ca o cheie secretă poate. Deci inginerie inversă este "mod de a merge".
Restricționare inginerie inversă, puteți face câteva experimente pentru a încerca să facă presupuneri:
Edit: tocmai am observat o foarte cool script numit hashID. Numele descrie destul de bine asta.
În general vorbind, folosind experiența de a face presupuneri educate este cum se fac lucrurile astea.
Aici este o listă cu un număr foarte mare de hash ieșiri, astfel încât să știi ce și cum arată și de a crea semnături/tipare sau doar optic verifica.
- [On-line Hash Crack Hash Generator](https://www.onlinehashcrack.com/hash-generator.php)
- [InsidePro Software Forum > Hash Tipuri](https://web.archive.org/web/20160403135857/https://forum.insidepro.com/viewtopic.php?t=8225) (prin Archive.org)
Există două principale ** lucruri în primul rând să acorde o atenție la:
- lungimea de hash (fiecare funcție hash are o anumită ieșire lungime)
- alfabetul folosit (sunt toate litere limba engleză? numerele 0-9 și a-F atât de hex? ce caractere speciale sunt acolo, dacă orice?)
Mai multe programe de cracare parola (Ioan spintecătorul de exemplu) se aplică un model de potrivire de intrare pentru a ghici algoritmul folosit, dar aceasta funcționează doar pe generic hash-uri. De exemplu, dacă luați orice ieșire hash și roti fiecare literă cu 1, cele mai multe de potrivire de model scheme va eșua.
Ceea ce ai postat este de 16 bytes (128 de biți) de bază 64 de date codate. Faptul că este codat base 64 nu't ne spun prea multe pentru ca base 64 nu este o criptare/algoritm hash este o modalitate de a codifica date binare în text. Acest lucru înseamnă că acest bloc include o singură bucată util de informații, și anume că producția este de 16 bytes lung. Putem compara acest lucru dimensiunea blocului de sisteme utilizate în mod obișnuit și dau seama ce se poate't fi. De departe cele mai frecvente scheme sunt:
Urmatorul lucru ce trebuie să faceți este să se uite la alte blocuri de text cifrat pentru a afla răspunsul la următoarea întrebare:
Dacă nu toate blocurile sunt de aceeași lungime, atunci nu't uita la un algoritm hash, dar o criptare unul. Deoarece producția va fi întotdeauna un multiplu de fond al sistemului dimensiune bloc prezența unui bloc care nu este divizibil cu 16 bytes ar însemna că nu poate fi AES și, prin urmare, trebuie să fie DES sau 3DES.
Dacă aveți posibilitatea de a pune o parolă și să respecte această ieșire poate fi determinată foarte repede. Doar a pus într-un 17 caractere parola si uita-te la lungime. Dacă cei 16 octeți ai MD5, 20 bytes înseamnă SHA-1, 24 bytes înseamnă DES sau 3DES, 32 bytes înseamnă AES.
Depinde de formatul - unele protocoale pentru stocarea text criptate au o porțiune de text clar care definește modul în care-l's criptate. De exemplu, am'm îndoielnic, deoarece șirul de referință este atât de scurt încât se pare că-l's doar textul criptat.
Am'd sugerez câteva gânduri:
"==" pe urmă ar fi cu siguranta de umplutură, așa că don't include faptul că, în orice decriptare încercări.
Ai de-a face cu un hash sau un sărate hash, mai degrabă decât de criptare. În acest caz, încercarea de a "decripta" datele câștigat't de lucru - aveți nevoie pentru a se potrivi parole folosind același hash și/sau sare valoare care a fost folosit inițial. Nu există nici o modalitate cu un sărate parolă pentru a obține valoarea inițială.
Cel mai bun pariu este de a obține o copie a codului, care este folosit pentru a stoca parolele. Undeva acolo, parolele sunt supuși unei operații criptografice. Găsi codul pentru a afla ce's-a întâmplat aici. De 9 ori din 10, ei folosesc un fel de API pentru hashing/sărare/criptare și te poate imita sau invers, folosind același API.
Codificarea poate fi, în general, ați ghicit. De exemplu, șirul postat în întrebarea dumneavoastră este Base64 codificat. A este egal cu semne sunt de umplutură în Base64 sistem. Ca's ceva știu pe-vedere din experiență.
Dacă mi-ai dat un șir de caractere care a fost criptat, aș putea să vă spun de codare, dar nu pot't spune algoritmul folosit pentru a cripta dacă nu un fel de metadate este disponibil. Motivul este acesta: algoritmi de criptare funcționează prin producerea ceea ce pare a fi date aleatoare. Dacă am criptat două propoziții, fiecare cu două cifre (patru ieșiri), v-ar fi în imposibilitatea de a-mi spune cu încredere care cifrat aparținut care cifru dacă nu decriptate sau spart cifrul.
În ceea ce privește specifice de exemplu, parolele sunt de obicei distribuit. Asta înseamnă că poți't recupera parola de la hash, dar puteți testa pentru a vedea dacă hash meciuri pentru parola. În această privință, @john's a răspunde este de aur. Dacă puteți introduce o parolă pe care le cunosc și apoi încercați scheme comune împotriva ei, puteți afla ce hash folosit este.
Dacă acest lucru este într-adevăr un simplu hash parola, am putea fi capabili de a utiliza Google pentru a sparge](http://www.lightbluetouchpaper.org/2007/11/16/google-as-a-password-cracker/). Base64 este greu pentru a căuta, totuși, cu toate aceste bare oblice și semne de plus, asa ca lasa - 's a converti primul care hash în hexazecimal:
$ perl -MMIME::Base64 -le 'print unpack "H*", decode_base64 "WeJcFMQ/8+8QJ/w0hHh+0g=="'
59e25c14c43ff3ef1027fc3484787ed2
OK, acum putem Google pentru a. În momentul de față, am'm numai una hit, de md5this.com — deși, evident, va fi în curând mai mult, inclusiv acest post.
Din păcate (sau poate din fericire, în funcție de perspectiva), ne-am'nu ești suficient de norocos pentru a găsi de fapt, o preimage (site-ul enumeră în prezent acest hash ca "cracare..."), dar faptul că-l's de pe această listă nu sugerez că ar's, într-adevăr, o nesărat MD5 hash de un real parola.
Singura cale este de a ghici. Cu experiență, cred lucrări va fi mai corect.
De exemplu: în funcție de lungimea de ieșire: MD5 ieșire este de 128 de biți sau 16 octeți, SHA1 ieșire este de 160 de biți sau 20 de bytes. Bazat pe caractere de ieșire: BASE64 produce ieșire cu caractere imprimabile.
La sfârșitul zilei, l's la încercare-și-eroare de abordare care te învață cum.
Singura cale este atunci când nu's unele metadate care vă spune. De exemplu, am'am fost de lucru cu Pdf-uri în ultima vreme, și formatul include un dicționar care conține filtru, algoritm, dimensiune-cheie etc. Dar dacă tot ce'ai, e cifrat, atunci tot ce'ai, e ceva opac blob de date.