Glary Utilities Pro Serial Fishing
From UIC
Glary Utilities Pro Serial Fishing
Contents |
| Glary Utilities Pro Serial Fishing | |
|---|---|
| Author: | Andrew10111989 |
| Email: | none |
| Website: | none |
| Date: | 25/06/2010 (dd/mm/yyyy) |
| Level: |
|
| Language: | Italian |
| Comments: | |
Tools
Link e Riferimenti
Introduzione
In questo mio terzo tutorial registreremo Glary Utilities Pro, questo programma fa un po’ di pulizia nel PC eliminando Files temporanei, correggendo chiavi di registro, oltre a tante altre Utilities appunto per criptare/decriptare file, rimuovere spyware, insomma un po’ di tutto e niente, è Shareware, abbiamo 30 giorni per eliminare la protezione fishando il seriale, credo proprio che saranno sufficienti ^_^. Per questa lezione è ben accetta una conoscenza medio-bassa sull’utilizzo di Olly, del linguaggio Assembly, e useremo anche IDA senza troppi artifici.
Essay
Come prima cosa diamo un’occhiata al PEiD e vediamo qualche info sul nostro programma. La cartella di installazione contiene una manciata di eseguibili, il nostro obiettivo è il File Integrator.exe:
Ok è scritto in Delphi 6.0 – 7.0, avviamo quindi il programma dal collegamento sul desktop, premete il tasto “Enter Code” ed eccoci qua.
Apriamo il nostro caro Olly ( io uso la 1.10 ) e dal Menù File -> Attach selezioniamo il processo da debuggare, ovvero Integrator.exe. Ormai uso quasi sempre questo modo anziché aprire direttamente l’eseguibile da Olly perché a volte mi evita controlli sul Debugger all’avvio del programma che terminano inaspettatamente l’esecuzione. Prima di mettere breakpoints ad cazzum proviamo a inserire dei valori casuali nelle TextBox “Your name” e “Registration code”, premiamo “OK”, et voilà una bella MessageBox per noi, tripudio della platea! Ora possiamo seguire due strade, o piazzare un bp sulla GetWindowTextW, oppure sulla MessageBoxA, io ho provato entrambe le strade, ma ho ottenuto un miglior risultato con la seconda scelta, in quanto più immediata al nostro obiettivo, lascio a voi la prima come esercizio ;). Piazziamo quindi in Olly un bp su MessageBoxA, torniamo al programma, e premendo nuovamente “OK” dovrebbe poppare Olly con in basso a sinistra il riferimento alla user32.MessageBoxA. Quindi diamo un bel Execute Till Return, ovvero premete Ctrl-F9, premiamo poi “OK” nella MessageBox che comparirà nel programma, quindi F8 per uscire dalla chiamata. Siamo rientrati nel modulo “lockdll” che ha chiamato la nostra MessageBox, ora mettiamo un attimo da parte Olly e apriamo questa dll con IDA, per una migliore visione della situazione. Una volta aperto il file lockdll.dll posizioniamoci premendo “G” all’indirizzo 00404559, che corrisponde in Olly a 01814559, e vediamo il listato nella parte superiore alla MessageBox.
Dentro Olly ci troviamo appunto dopo la chiamata alla MessageBoxA, ovvero in 00404559, all’indirizzo 00404508 viene copiato in EDX la stringa di errore visualizzata dalla MessageBox. Qual è l’ultimo Jump che evita la nefasta chiamata saltando il tutto? Quello segnato di rosso nell’ immagine che, come vedete grazie a IDA, possiamo notare che porta l’esecuzione del programma più avanti. Il Test effettuato dal Jnz in 004044E1 è calcolato in base al valore di EAX, il quale a sua volta viene settato nella call a 004044DA, a questo punto non ci resta che seguire la call per vedere cosa combina, tasto destro su “sub_403BBC” e “Jump to operand”.
Questa è la funzioncina che decide la sorte della nostra registrazione, i punti salienti sono in 00403BF6, in cui viene passata alla LStrCpy la nostra chiave attraverso il registro EAX, in 00403C0F viene chiamata un’ altra volta la LStrCpy ma questa volta si passa un’altra variabile, quindi in 00403C1D una LStrCmp decide se il Jz all’indirizzo successivo debba saltare o meno; se le chiavi inserite sono uguali salta, quindi EBX non viene azzerato ( prima freccettina rossa ), EAX in 00403C43 assume il valore di EBX ( seconda freccettina rossa ), quindi tornati dalla chiamata il Test al, al dà esito positivo e il Jnz in 004044E1 salta il messaggio d’errore! Ho messo come nome del jz in 00403C1D “Seriale_Corretto” perché è lì che avviene l’operazione magica, la decisione che influirà sull’esito della registrazione. Ora torniamo ad Olly e cerchiamo di vedere cosa contiene EAX prima della chiamata alla LStrCpy in 00403C0F. Togliamo quindi il bp alla MessageBoxA e mettiamone uno all’ indirizzo: 018144DA ( la call che chiama la funzione di controllo ). Premiamo F9, torniamo al programma, riclickiamo “OK” ed ecco Olly che brecka dove gli abbiamo gentilmente chiesto. Con F7 entriamo nella chiamata, steppiamo velocemente fino a 01813C0A per leggere il valore della chiave passata alla LStrCpy in 01813C0F, ovvero l’obiettivo del nostro fishing; non ci resta che copiarne il valore dal registro EAX e darla in pasto al nostro programma! Prima di registrarlo potete provare a cambiare nome di registrazione, e verificare che effettivamente la chiave è sempre quella e non è creata attraverso algoritmi, o meglio funzioni codate ad hoc. Una volta accertati di questo potete procedere con la registrazione e verificare che anche al ravvio la cosa funzioni ;-)…
Note Finali
Quando ho visto l’inserimento di Nome e Chiave speravo in un algoritmo da reversare e tirarci fuori un keygen, sul modello del mio primo tutorial ( keygen di emu8086 ), ahimè questa volta è stato più facile del previsto, il programma seguiva abbastanza precisamente gli schemi visti nelle prime lezioni sul Reversing. Probabilmente esistono diversi CrackMe con i quali allenarsi per chi è ancora alle prime armi, ma affrontare programmi commerciali è molto più stimolante e soddisfacente :P… Ciao e alla prossima! ^_^
A_19
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 malevole 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.



