Corso UIC Newbies 05 Pispola
From UIC
Corso UIC Newbies 05 Pispola
Contents |
| Infos | |
|---|---|
| Author: | Pispola |
| Email: | pispola_@tin.it |
| Website: | Home page |
| Date: | 09/07/2000 (dd/mm/yyyy) |
| Level: |
|
| Language: | Italian |
| Comments: | |
Tools
- Softice oppure OllyDbg v1.10
Link e Riferimenti
Questo è il Corso UIC Newbies n°05 disponibile alla pagina Corsi UIC Newbies
Introduzione
Proviamo a trovare il codice del Crackme di Andrea speriamo non sia troppo difficile.................:-)
Bisogna Trovare il giusto Serial in base al Nome.
Notizie sul Programma
Un classico CrackMe.
Essay
Allora partiamo altrimenti non si finisce...:-) Facciamo partire il Crackme del corso 5 , Per averne un idea di cosa ci aspetta ,e pigiamo su Check... Puntualmente il programma ci insulta giustamente perche' manca il nome ed il serial ma Scopriamo che vuole almeno 6 caratteri per il nome.(non avevo visto che era pure scritto!!!!! ) :-((( Ok inseriamo il nome Pispola (meno male che sono 7)ed un serial a caso 123456 meno male che si e' addolcito (ci insulta un po meno) :-) Ora ci resta da settare il famigerato bpx ma dove? su GetWindowwTextA, su GetDlgItemTextA o HMEMCPY ? si prova e si vedra'!!!! il primo non poppa proviamo con il secondo e Tadaaaaa ecco Sice in nostro aiuto steppiamo con due F12 per uscire dalla User32 e Mfc42d ed eccoci nel codice di 5newbies. Ancora qualche F8 e vediamo che in questo punto viene caricato il primo carattere del nostro Nome (50 nel mio caso) in al.
carattere
004026DD 3C00 cmp al, 00 // Controlla che non
sia 00 (nome finito)
004026DF 7466 je 00402747 // Altrimenti salta
Il nostro carattere in esadecimale si trova in eax e continuando a steppare si vede eax modificata da tre Xor con dei valori
004026E8 32C1 xor al, cl 1° operazione
004026EA 8A8C354CFFFFFF mov cl, byte ptr [ebp+esi-000000B4]
004026F1 32C1 xor al, cl 2° operazione
004026F3 8A8C352CFFFFFF mov cl, byte ptr [ebp+esi-000000D4]
004026FA 32C1 xor al, cl 3° operazione
A questo punto trovo in EAX il valore della mio 1 carattere xorato AE (dovrebbe essere il valore da comparare)
// carattere del
// seriale nel nostro
// caso carattere 1 =
// 31
Questo pezzo di codice non mi e' ben chiaro fa delle elaborazioni al nostro seriale
00402706 80FB09 cmp bl, 09
00402709 7E03 jle 0040270E
0040270B 80EB07 sub bl, 07
0040270E 8A943D8DFFFFFF mov dl, byte ptr [ebp+edi-00000073]
00402715 80EA30 sub dl, 30
00402718 80FA09 cmp dl, 09
0040271B 7E03 jle 00402720
0040271D 80EA07 sub dl, 07
00402720 C0E304 shl bl, 04
00402723 02D3 add dl, bl
00402725 46 inc esi // incrementa esi usato per lo xor
00402726 47 inc edi // incrementa edi usato per lo xor
00402727 47 inc edi // incrementa edi usato per lo xor
00402728 3AC2 cmp al, dl // e qui determina se il primo carattere con il primo
// seriale e' giusto
0040272A 74AA je 004026D6 // se e' uguale salta al prossimo carattere
A questo punto abbiamo la soluzione in mano:
O modifichiamo il je alla locazione 0040272A in jne (da 74AA a 75AA) ed il programma registrera' qualsiasi seriale tranne quello giusto
O modifichiamo il je alla locazione 0040272A in jmp (da 74AA a EBAA) ed il programma registrera' qualsiasi seriale
oppure si controlla (con un bpx alla locazione 004026FC) il valore di EAX che passo dopo passo ci mostrera' tutto il nostro seriale caratttere per carattere, facendo attenzione ad invertire lo zero flag tutte le volte che incorriamo nell'istruzione
Siccome nel rileggere le ultime 3 righe ho capito anch'io di non essere stato Molto chiaro spendo 2 parole in piu'(visto che nell'ultimo meeting della UIC si e' parlato di + chiarezza anche sulle cose semplici) al limite il buon Que tagliera' questultima parte. settiamo un bpx su :004026D6 8A8435D4FFFFFF mov al, byte ptr [ebp+esi-0000002C] e tutte le volte che Sice poppa si vedra ' caricato un caratere del Nostro seriale in EAX settiamo un bpx su :004026FC 8A9C3D8CFFFFFF mov bl, byte ptr [ebp+edi-00000074] e quando Sice poppa in questo punto in in EAX c'e' il primo pezzo del Nostro seriale giusto ed l'ultimo bpx su :0040272A 74AA je 004026D6
dove ci sara' da modificare lo z flag affinche' il programma continui l'esecuzione fornendoci tutti i pezzi di seriale anche se il seriale inserito e' sbagliato. Tutte le volte che Sice poppera' su qesta linea si dovra' cliccare in sice col mouse sulla z in alto a destra e con il tasto "ins" far diventare la z maiuscola e di diverso colore in questo modo il jmp rispondera' ad un salto invece che ad un (no jump). Eseguire questa operazione finche' il prog. avra' eseguito tutte le operazioni su tutte le lettere del Nome inserito.
esempio : Nome = Pispola
al primo brek EAX conterra' il codice hexe 50=P al secondo brek EAX conterra' il codice AE (primo pezzo di seriale) al terzo brek invertire lo z flag per continuare l'esecuzione questa operazione va eseguita per il numero di caratteri del Nome inserito.
P..... i... s... p ..o.. l... a
AE 96 8F 8D 95 97 8F
Note Finali
Ed eccoci arrivati alla fine spero di essere stato chiaro (esendo il primo Tute che scrivo) :-)
Un saluto a tutti gli amici di Crack-it , KRIOSMAN, SPIN0NE, DED, BARON-SAM, SILENT, MALATTIA, LITTLEJO, CEK, BIECO ,INT19, BLAKDRUID, YADO , QUEQUERO (che non si fa mai sentire), PARADOX, TIN-MAN (e tutti quelli che mi son dimenticato).
UN RINGRAZIAMENTO SPECIALE ALLA MIA TASTIERA CHE HA SOPPORTATO PAZIENTEMENTE ALLA STESURA DI CODESTO TUTES.
CiAoZ @ ToDos StaKko
Disclaimer
I documenti qui pubblicati sono da considerarsi pubblici e liberamente distribuibili, a patto che se ne citi la fonte di provenienza. Tutti i documenti presenti su queste pagine sono stati scritti esclusivamente a scopo di ricerca, nessuna di queste analisi è stata fatta per fini commerciali, o dietro alcun tipo di compenso. I documenti pubblicati presentano delle analisi puramente teoriche della struttura di un programma, in nessun caso il software è stato realmente disassemblato o modificato; ogni corrispondenza presente tra i documenti pubblicati e le istruzioni del software oggetto dell'analisi, è da ritenersi puramente casuale. Tutti i documenti vengono inviati in forma anonima ed automaticamente pubblicati, i diritti di tali opere appartengono esclusivamente al firmatario del documento (se presente), in nessun caso il gestore di questo sito, o del server su cui risiede, può essere ritenuto responsabile dei contenuti qui presenti, oltretutto il gestore del sito non è in grado di risalire all'identità del mittente dei documenti. Tutti i documenti ed i file di questo sito non presentano alcun tipo di garanzia, pertanto ne è sconsigliata a tutti la lettura o l'esecuzione, lo staff non si assume alcuna responsabilità per quanto riguarda l'uso improprio di tali documenti e/o file, è doveroso aggiungere che ogni riferimento a fatti cose o persone è da considerarsi PURAMENTE casuale. Tutti coloro che potrebbero ritenersi moralmente offesi dai contenuti di queste pagine, sono tenuti ad uscire immediatamente da questo sito.
Vogliamo inoltre ricordare che il Reverse Engineering è uno strumento tecnologico di grande potenza ed importanza, senza di esso non sarebbe possibile creare antivirus, scoprire funzioni malevoli e non dichiarate all'interno di un programma di pubblico utilizzo. Non sarebbe possibile scoprire, in assenza di un sistema sicuro per il controllo dell'integrità, se il "tal" programma è realmente quello che l'utente ha scelto di installare ed eseguire, né sarebbe possibile continuare lo sviluppo di quei programmi (o l'utilizzo di quelle periferiche) ritenuti obsoleti e non più supportati dalle fonti ufficiali.