Root-Me: ELF C++ – soluție pentru 0 protecție

  • 1 minute de citit
  • 2 exemple de cod
  • 1 imagine

Disponibil și în English

Pe această pagină

Salut!

Munca mea de zi cu zi este dezvoltarea web full stack, iar reversarea este o activitate secundară, pe care o fac pentru distracție, în timpul liber. În acest articol vă arăt un mod simplu de a rezolva provocarea ELF C++ – 0 protection, care se găsește pe https://www.root-me.org în secțiunea de cracking.

Am considerat această provocare puțin dificilă mai ales pentru că nu sunt obișnuit să fac reversarea codului C++, dar, deoarece nu conține nicio protecție, tot ce trebuie să faci este să inspectezi parametrii.

Dacă jucăm puțin cu binarul, poate îl vizualizăm în , putem observa că plouf este o funcție interesantă și cu siguranță face ceva, cum ar fi decodificarea a ceva din binar și construirea unui șir de caractere.

Dacă pornim gdb și rulăm programul, putem seta un breakpoint imediat după plouf și putem inspecta valoarea returnată.

gdb ch25.bin r 123 b *0x08048b51

x/10x $eax 0xbffff664: 0x1c 0xc1 0x04 0x08 0x2c 0xc0 0x04 0x08 0xbffff66c: 0x14 0xc0

Asta nu ne spune prea multe, dar dacă te uiți atent vei observa că pointează către: 0x1c 0xc1 0x04 0x08

Care este o adresă: 0x0804c11c. Este scrisă în această ordine din cauza endianness-ului. Inspectarea valorii de la această adresă în GDB ne va da rezultatul pe care îl returnează plouf.

PS: Lucrurile devin și mai simple dacă folosești GDB Peda.

Resurse:

Mulțumesc pentru lectură!