Root-me: Ringgit – prima challenge Very Hard risolta!

Dall’ultimo post è trascorso un po’ di tempo. No, non sono sparito. In quest’ultimo mese ho continuato il mio percorso sulla sezione Cracking di Root-Me.

root-me Cracking icon

Quando avevo scritto il precedente post ero a circa il 70% delle challenge di reversing risolte. Nel frattempo non ho mollato la presa. Avevo risolto un’altra buona parte delle challenge terminando tutte le Medium e le Hard, per arrivare ad avere tutte quelle della sezione Cracking complete ad eccezione delle due Very Hard:

Prima di parlare di Ringgit voglio spendere due parole riguardo il mio percorso su tutta la sezione.

Adesso sulle mie statistiche aggiornate iniziano a pesare le challenge Medium e Hard:

Devo ammettere che le challenge a livello Hard sono molto interessanti perché presentano delle tecniche usate da molti packer e malware. Se con qualcuna livello medio potreste annoiarvi qui, invece, la cosa si fa seria.

Su alcune sfide di livello difficile come ELF x64 – Nanomites, ELF x64 – Anti-debug et equations e soprattutto ELF x86 – VM ho fatto un po’ più di fatica. Nel caso specifico di ELF x64 – Anti-debug et equations, una volta capito come venivano usati i trick anti-debug e come era costruito l’algoritmo di validazione della chiave, ho preferito scrivermi un Keygen piuttosto che ricorrere a Z3 come suggerito dall’autore (in onore di tutti i reverser old-school <3) .

Arriviamo a Ringgit, è il primo Very Hard che risolvo sulla piattaforma e posso solo confermare che il livello di complessità è molto alto.

Se posso usare un termine per definire questo crackme, il termine che si avvicina più di tutti a quello che penso è CAPOLAVORO. La challenge, a mio avviso, è una chiara dimostrazione della genialità del suo autore. Ho impiegato un bel po’ di tempo a risolverlo, e per arrivare a questo risultato ho dovuto rispolverare un po’ di concetti sui processi in Linux e sul debugging sotto linux, decompilare, scrivere codice in C e soprattutto fare una delle cose più belle che si possono fare quando si fa reversing, re-implementare!

Ne è valsa la pena, e se vi doveste avventurare in questa challenge preparatevi a qualche notte insonne (probabilmente più di una). Ovviamente non posso dirvi nulla sulla soluzione e su come ci sono arrivato per due motivi principali:

  1. Non voglio rovinarsi il gusto di provare a risolverla, quindi niente spoiler;
  2. E’ vietato da regolamento di Root-Me discutere le soluzioni e credo fermamente sia stupido fornire la soluzione.

Quello che però posso dirvi è che a mano a mano che capirete ogni dettaglio di Ringgit, e vi renderete conto di come i vari pezzi sono collegati, quello che si nasconde dietro questa challenge sarà qualcosa di inatteso! Sono certo vi piacerà moltissimo averci giocato. I Nanomite presenti sono solo un primo ostacolo, è l’intera implementazione che rende affascinante, e allo stesso tempo intrigante, il tentare di risolverlo. Personalmente l’ho amato per come è stato programmato ed ideato, l’ho odiato per la complessità, ma fosse stato più semplice sono certo non l’avrei apprezzato così tanto.

Durante le diverse fasi che mi hanno poi portato a capire il vero senso del crackme, e i concetti astratti legati a come è costruito, sono passato dal “ah! ho capito” al “ah no… non avevo capito un cavolo”, ancora al “non ce la posso fare”, e poi ancora “ah ma forse questa cosa è così”, e ancora “è troppo difficile, se getto la spugna la sto gettando per una cosa veramente tosta”.

Dopo molte ore di sconforto ad un certo punto potrebbe accendersi per voi, come è stato per me, una lampadina e questo è il vero motivo per cui ho scritto questo post. Prima di arrivarci però sappiate che la vostra ragazza vi odierà, gli amici altrettanto, vostra mamma penserà che siete impazziti e le occhiaie prenderanno il sopravvento. Il vostro cervello dovrà abituarsi a leggere attraverso le righe di codice assembly. 😉

Mi è rimasta una sola challenge da risolvere nella sezione Cracking e so che sarà veramente dura, considerando che è stata creata dallo stesso autore di Ringgit. Non so se ce la farò, ma sono certo che ci proverò e non demorderò facilmente.

Alla fine, attualmente, il risultato di queste nottate è quello che vedete di seguito, e non me ne vergogno, sono felice come un bambino!

Per concludere posso solamente dirvi: Non mollate mai, neppure se è troppo difficile.

Prendetevi del tempo, fate delle pause, bevete una birra, uscite con la vostra ragazza/moglie o con gli amici ma non gettate la spugna. Prima o poi troverete la via, arriverete ad abbattere il problema, e alla fine potrete urlare “ce l’ho fatta!”.

-bdev-