Domanda Risolto buffer overflow su crackme :D

Stato
Discussione chiusa ad ulteriori risposte.

evilddd

Utente Bronze
5 Gennaio 2014
21
4
3
43
Ciao ragazzi,
mi divertono certe cose e non so se questa sia o meno la sezione giusta per pubblicare questo piccolo LOL input (come li chiamo io).


Si tratta di un buffer overflow che ho fatto su un crackme su cui stavo giocherellando un pò di sere fa... Dato che sono alle prese con lo studio (periodo esami) e non ho molto tempo per mettermi a scrivere sarò molto breve pubblicando il gioco delle 3 carte in questione.


Per chi fosse interessato il crackme è un crackme vecchio che potete reperire qui:
http://www.inforge.net/community/reversing/121498-tutorial-tameo-crackme1-c.html


Giocandoci un pò con olly (il crackme è abbastanza semplice dopo una diecina di minuti mi era evidente che la pass fosse: goodjob), mi sono accorto che era possibile fare buffer overflow sull'input visto che non c'è alcun controllo sul buffer che inserito da tastiera, viene messo direttamente in una variabile locale (ottime per gli stack overflow)... :D
2 + 2 = 4


PRECISAZIONE: l'esperimento funziona sicuramente su Windows XP SP3 Fully Patched (provato sul sistema in questione), Windows 8 non è affetto (lì non funziona) e suppongo non lo sia neppure 7 ma non posso verificare ( xD A voi scoprire perché ).


avviate il Crackme e inserite come password :
ReadConBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBA\@|B\@|C\@|D\@|E\@|F\@|G\@|BBBBB\@|G\@|N]@|*\@|{^@|BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB


(deve essere tutto attaccato, no spaces).


Cosa ottenete? :D
enjoy


Non ho reputato fosse il caso di scrivere una guida, guardate come funziona il crackme e se necessario seguite il tutorial eccellente di Predator, capirete cosa ho sforbiciato.


Saluti
 
Davvero molto interessante, qualcuno potrebbe fare qualche qualche approfondimento?
Spiego sotto spoiler cosa ho capito del programma, tralasciando la parte del crackme vero e proprio che è basilare:


[Spolier] Allora so bene o male la teoria dietro i buffer overflow e ho visto che qui viene fatta saltare la pass e suo puntatore viene sostituito con ReadConsoleOutputCharactetW.. ma essendoci il vincolo delle prime 6 lettere si passa comunque.
Quello che non ho capito e Dove e Come avviene il trucco... ho provato a seguire il codice appena preso l' input, ho trovato la funzione che copia uno ad uno ogni char della variabile che contiene l' input e lo incolla in ECX (o EDX, uno dei due) fino a che non arriva al carattere speciale (e qui è l' errore, perche dovrebbe fermarsi prima). Però non ho visto proprio l' overflow vero e proprio, vedevo solo ECX che cresceva... Qualcuno che mi dia l' ultima spintarella che sento di esserci quasi. [/Spoiler]
 
Stato
Discussione chiusa ad ulteriori risposte.