HackTheBox Reversing: Provocarea Cake

  • 1 minute de citit
  • 3 imagini

Disponibil și în English

Salut,

Dacă deschizi acest binar în Binary Ninja sau în orice alt dezasamblor, vei observa că fluxul este destul de ciudat. După ce m-am uitat în tabul de șiruri de caractere, am găsit UPX listat acolo, iar asta explică graficul ciudat.

UPX este un packer open-source. Un packer este doar o bucată de software care comprimă binarul; când binarul este rulat, se despachetează singur. Împachetarea unui exe ar putea să-i reducă dimensiunea cu 30% sau cam atât.. din moment ce UPX este gratuit, îl poți folosi și pentru a despacheta binare. Despachetarea este lăsată ca exercițiu cititorului (sunt leneș)

După ce ai despachetat binarul, rularea lui nu va mai funcționa, dar asta nu e o problemă. Mi-am continuat analiza cu 2 copii ale binarului: cea despachetată pentru analiza statică și cea împachetată pentru depanare.

După aceea am descoperit că poți face binarul să funcționeze după despachetare dacă dezactivezi ASLR. Aceasta este o DLLCharacteristic; poți căuta pe Google cum se face.

După ce m-am uitat la funcția main, am găsit un apel către o funcție care începe cu o mulțime de printf. Aceasta este funcția noastră de introducere.

Screen Shot 2018-07-24 at 21.07.49.png

Aici putem observa că este necesară o parolă de 10 cifre, dar numărul de citiri al scanf este comparat cu 15. Un bloc mai jos este necesară o parolă de 15 cifre; putem sări peste asta și putem introduce direct parola de 15 cifre.

Restul este doar căutarea parolei. În esență, parola este comparată în mai multe locuri cu caractere hardcodate. Dacă căutarea ta are succes, vei găsi parola; folosește un debugger dacă te blochezi. Singurul lucru „greu” este că parola nu este comparată în ordine.

De exemplu: după ce introduci parola de 15 cifre, input-ul este copiat cu strncpy într-un buffer și este apelată o funcție. Poți verifica pe MSDN parametrii pe care îi primește strncpy_s.

Screen Shot 2018-07-24 at 21.19.07.png

Apoi este apelată funcția pe care am numit-o digits_check. Să vedem ce face această funcție.

Screen Shot 2018-07-24 at 21.21.11.png

Acum totul se reduce la descoperirea parolei bit cu bit. Dacă ai succes în căutare, vei obține ceva de genul: h@ckth3parad1$E

Mulțumesc că ai citit și succes la hacking!