Ricevitoria 2000 Professional
From UIC
Editing Ricevitoria 2000 Professional
Contents |
| Infos | |
|---|---|
| Author: | GR!SU |
| Email: | grisucrk@freemail.it |
| Website: | |
| Date: | 26/11/1999 (dd/mm/yyyy) |
| Level: |
|
| Language: | Italian |
| Comments: | Qualcuno ha affermato che l'arte di crackare è una NOBILE arte... ha ragione!!!
Commenti, se volete |
Introduzione
In questo tutorial troveremo insieme i codici di registrazione ed individueremo l'algoritmo per creare un Key Maker.
Tools usati
URL del programma
http://www.progettosoftware.com
Può essere richiesto in prova gratis per 30 giorni direttamente a Progetto Software
Notizie sul Programma
Il programma che andremo ad esaminare è uno dei 16 programmi di sistemistica Lotto, Totocalcio, Enalotto, Totogol e Totosei contenuti nel pacchetto Ricevitoria 2000 Professional Pack distribuito da Progetto Software, naturalmente, noi ne esamineremo solo uno perché tutti gli altri utilizzano lo stesso algoritmo di generazione della chiave. inoltre tutto questo è valido anche per il programma FanthaManager.
Essay
Allora….Allora…. Iniziamo!!!! Come al solito iniziamo con l'esaminare il programma per cercare di reperire il maggior numero di informazioni possibili per poter capire come e in che modo occorre attaccarlo. La software House dice che per poter registrare il programma dopo il periodo di valutazione di 30 giorni occorre telefonare ai propri numeri per poter ricevere un numero di serie, che una volta inserito nel box indicato e dopo aver premuto il pulsante "Genera Codice", verrà generato un Codice che occorrerà comunicare alla stessa la quale a sua volta ci fornirà la Chiave che una volta digitata ci farà registrare definitivamente il Programma. Bene bene , già questo ci dice molto…..che cosa!!?? Ve lo dico immediatamente, il numero di serie , cioè il primo numero che ci verrà comunicato, praticamente non serve a niente o quasi, cioè dovrebbe, e dico dovrebbe secondo la House complicarci la vita , però il fatto che lo comunicano loro significa che sarà uguale per tutti o al massimo potrebbero esserci vari numeri di serie ma uguali per tutti, quindi occorre trovare prima questo numero altrimenti non potremmo generare il Codice che a sua volta ci genera la chiave quindi questo significa che è tramite il nostro numero di codice (che come vedremo varia ad ogni installazione) che viene generata la chiave quindi il numero di serie serve solo ad abilitare l'algoritmo di generazione del codice che a noi non interessa come lo elabora al contrario ci interessa invece l'algoritmo di generazione della Chiave. Dopo questa ingarbugliata spiegazione iniziamo il nostro lavoro.
Proviamo ad inserire un numero di serie qualsiasi ,premiamo Genera Codice e vediamo cosa succede , niente neanche una Message Box questo significa già che uno dei pochi sistemi per attaccare (ma ce ne sono altri) potrebbe essere quello di usare un BPX Hmemcpy ma non ve lo consiglio perché in questo modo dovremmo passare buona parte della giornata a steppare L , optiamo quindi per un'altra soluzione. Facciamo Ctrl-D ed entriamo nel nostro fidato Debugger e settiamo BPX SetFilePointer, Invio e poi F5 per uscire ora quindi quando andremo a premere "Genera codice" popperemo in Sice facciamo F12 per uscire dalla funzione e ci ritroviamo nella Prgwaux.dll, facciamo ancora F12 fino a che ci ritroviamo nel nostro LottoSthudioPro ed esattamente Qui. Se ora iniziamo a steppare, a 004CB86C troviamo un JLE che se invertiamo fa si che il il Prg. accetti qualsiasi numero di serie e ci genera il Codice, ma siccome noi non vogliamo Patchare ma vogliamo trovare in Numero di Serie corretto, deduciamo evidentemente che dobbiamo analizzare la parte di codice precedente al su detto JLE. Mettiamo quindi un BPX su 004CB856
004CB857 Call 004CB110 // Faccio F8 poi F10 fino alla Call successiva (che per questo Prg è
// 015F:007B1CFA)
004CB85C Call 004CB100 // Qui troviamo l'algoritmo che CMP il mio numero di serie con quello
// corretto
004CB861 mov esi, eax // Qui
004CB863 Call 004CB0F0 // Date un occhiata anche a questa Routine se il numero inserito è esatto
// me lo riporta in EAX altrimenti EAX=00
004CB868 mov ebx, eax
004CB86A test ebx, ebx
004CB86C jle 004CB8C3 // Salta se il numero non è esatto
Andatevi a studiare la routine che effettua il compare (015F:007B1CFA in PrgSwAux.dll) scoprirete che il numero di serie, può essere un qualsiasi numero decimale che convertito in Hex (esadecimale) risulti in questa forma raddoppiata (es. 5F5F oppure 1515 o ancora 1919 o 2121) cioè in pratica scegliete qualsiasi numero Hex in questa forma convertitelo in decimale ed inseritelo nel Box "Numero di serie" premete Genera ed otterrete un Codice in questa forma:XXXX XX XXXXXXXX XXXXXXXX X i primi quattro caratteri e i successivi due non sono, come vedremo in seguito, utilizzati mentre i successivi otto caratteri variano al variare del numero di serie inserito, gli altri otto invece variano ad ogni nuova installazione del programma,l'ultimo non è usato,in questo modo (hanno pensato gli autori)si ottiene un Codice unico e diverso per ognuno di noi tramite il quale la Soft House ci crea la Chiave di registrazione. Ora è proprio qui che entriamo in campo NOI.
PS. La parte di testo evidenziata in verde è valida solo per i Programmi LottoSthudioStandard e LottoSthudioProfessional,(forse è un Bug che hanno corretto) per gli altri, l'algoritmo è sempre lo stesso (c'è una piccola differenza) solo che accetta un unico numero di serie, sempre nella stessa forma raddoppiata cioè tipo 1515, 5F5F, che è unico per ogni programma, purtroppo ora non posso trattarli tutti, ma la procedura ed il punto in cui elabora l'algoritmo è lo stesso variano solo gli indirizzi.
QUALE E'L'ALGORITMO CHE GENERA LA CHIAVE?
Inseriamo una Chiave qualsiasi, entriamo in Sice e settiamo nuovamente BPX SetFilePointer invio e poi F5 per uscire premiamo quindi OK ed ecco che Sice poppa facciamo F12 fin che ritorniamo in LottoStudioPro ed esattamente in questo punto
004CB763 mov edi, eax // In Eax troviamo la seconda serie di otto caratteri del codice non in
// Hex ma così come li vediamo scritti nel Box mentre in Ebx c'è la
// chiave da
// noi inserita, (provate in Sice ? EBX)
004CB765 Call 004CB0F0
004CB76A mov esi, eax // In Eax troviamo il Numero di serie (? EAX), mentre in Ebx c'è la
// Chiave
// da noi inserita (? EBX)
004CB76C test esi, esi // Controlla se è presente il Numero di Serie>
004CB76E jle 004CB797 // Salta se non è presente
004CB770 test ebx, ebx // Controlla se è stata inserita la Chiave
004CB772 jle 004CB797 // Salta se non c'è
004CB774 push esi // Numero di Serie
004CB775 push edi // Seconda serie di Otto caratteri del codice
004CB776 Call 004CB0E8 // Contiene l'algoritmo, Facciamo F8
004CB77B cmp ebx, eax // In Ebx c'è la chiave da noi inserita, in Eax c'è quella esatta che ci
// permette di registrarci (? EAX)
Dopo aver esaminato questa ultima parte di codice ci risulta evidente che l'algoritmo che genera la chiave si trova nella Call precedente, quindi a 004CB776 facciamo F8 ed entriamo nella routine che si trova in PrgSwAux.dll .
00401BD5 mov ebp, esp
00401BD7 push ebx // In Ebx c'è la Chiave da noi inserita
00401BD8 mov eax, dword ptr [ebp+0C] // Muove in Eax il Numero di Serie
00401BDB push eax
00401BDC call 00401488 // Riporta in Eax la prima serie di otto caratteri del Codice
Quello che segue è L'algoritmo di generazione della chiave
00401BE4 mov ebx, 00009AC1 // Valore fisso che in Decimale è 39617
00401BE9 shl ecx, 05
00401BEC add ecx, eax
00401BEE lea ecx, dword ptr [eax+4*ecx]
00401BF1 lea ecx, dword ptr [eax+2*ecx]
00401BF4 mov eax, dword ptr [ebp+08]
00401BF7 cdq
00401BF8 idiv ebx
00401BFA add ecx, edx
00401BFC xor edx, edx
00401BFE mov eax, ecx
00401C00 mov ecx, 05F5E0FF // Muove in Ecx la seconda serie di otto caratteri
00401C05 div ecx
00401C07 mov eax, edx
00401C09 inc eax
00401C0A pop ebx
00401C0B pop ebp
00401C0C ret 0008 // Ritorna a :004CB77B ed effettua il Compare
PS. Tutti gli indirizzi possono essere differenti.
Adesso praticamente abbiamo tutto quello che ci occorre, se vogliamo solo registrarci basta inserire i vari serial trovati, altrimenti potremmo creare un Key Maker, oppure potremmo far diventare (Patchandolo naturalmente!!)il programma stesso un Key Generator, in questo tutorial non tratterò però questa possibilità, potrete invece farlo voi prendendo spunto dagli ottimi Tut. di nOtEtA , KeYmaKer iN RuN-tiMe, invece per quanto riguarda il Key Maker, non penso ci sia niente da dire, l'algoritmo c'è lo avete, qualche linguaggio di programmazione dovreste conoscerlo (io uso l' Assembly),quindi datevi da fare.
Ha..!! dimenticavo di informarvi che i vari codici di registrazione li va a scrivere in Window\System\Qutk8bb0.Dll quindi se avete bisogno di fare delle prove per eliminare la registrazione ogni volta dovrete cancellare questo file che avrà ovviamente un nome diverso per ognuno dei 16 programmi, anche gli indirizzi sono diversi ,il procedimento però è lo stesso.
Spero di essere stato abbastanza chiaro.. :)
Note Finali
Abbiamo visto come anche se si cerca di realizzare qualche protezione un pò più elaborata onde evitare la distribuzione dei seriali di registrazione , una volta trovato l'algoritmo si crea un Key Maker ed il problema è risolto. Da questo possiamo imparare come sia difficile trovare qualcosa di veramente sicuro (non credo che esista), quindi facciamo molta attenzione quando realizziamo le protezioni per i nostri programmi.
Ora non mi resta che, ovviamente Ringraziare QUEQUERO per la sua grande disponibilità e la UIC tutta ed in rigoroso ordine casuale tutti quelli che mi hanno aiutato a progredire in questa nobile ARTE (anche se alcuni di loro forse non lo sanno).
Un dovuto e sentito ringraziamento va' all'amico Sator SSH per avermi iniziato a questa Nobile Arte. +ORC mitico Neural_Noise, Scacco, CoRN2, ED!SON, raZZia, FROSTMAN, CbD, Qapla , +MaLattiA, along3x, Marcus, AloR, Xoanon, Int19, alt255 tutto il gruppo di RingZ3r0, tutti quelli che ho dimenticato ed anche quelli che non conosco. Ed un ringraziamento va anche a nOtEtA per avermi aiutato nella realizzazione del Key Maker .
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.