Tarantula 1.99 Freghiamo la dialog-box di registrazione ed evitiamo il crc inserendo una nuova sezione |
|
|
25/1/99 |
by "Fytse and U.I.C. group" |
|
|
Published by Quequero |
|
Quando mia moglie, guidando, sterza in corrispondenza di
una |
Menomale, dopo tantissimo qualcuno si è preso la briga di fare questo tute, bravo fytse |
Il marito dice alla moglie: |
UIC's form |
|
UIC's form |
Difficoltà |
( )NewBies (X)Intermedio (X)Avanzato ( )Master |
Questo tutorial è centrato principalmente sull'inserimento di una nuova funzione nel file Tarantula.exe per fregare il crc e modificare a nostro piacimento l'eseguibile senza far andare in errore in programma.
Tarantula 1.99
Freghiamo la dialog-box di registrazione ed evitiamo il crc inserendo una nuova sezione
Introduzione |
Tools usati |
URL o FTP del programma |
Notizie sul programma |
Essay |
Iniziamo subito col fregare la dialog-box di registrazione, per ulteriori info su quanto si è detto in mailing-list vi rimando al tut di GR!SU, sarebbe inutile ripetere di nuovo le stesse cose.
Diamo uno sguardo alla call all'indirizzo 54FC0F.
Dopo aver effettuato un loop che "gioca" con il nostro seriale si arriva al
punto in cui vengono presi i primi 4 caratteri capovolti e vengono messi in eax (54FC40);
subito dopo vengono aggiunti anche gli ultimi 8; viene sommato il trattino (54FC47; vi
informo che è essenziale per attivare il tasto di registrazione); viene sommato il primo
numero dopo il trattino(54FC4E); viene sottratto il valore esadecimale
"EA".
Il problema a questo punto è di trovare un seriale che dopo queste operazioni e dopo
l'esecuzione di "cdq" ed "idiv ecx" generi il valore 00 in al(io l'ho
fatto facilmente modificando il 5 numero del seriale); ma non è tutto perché poi gli
ultimi 8 caratteri immessi vengono confrontati con altri 4 presenti in "esi" e
che vengono di volta in volta modificati in base al nick ed alla pass.(e così tutto va a
puttane dato che in "al" non viene + generato 0).
Dato che in esi vi sono sempre e solo 4 caratteri, dopo il 5 numero del seriale si devono
necessariamente inserire 4 zeri.
Per ulteriori info su come trovare il seriale giusto, guardatevi ancora il tut di GR!SU.
Ecco il listato assembly della locazione in questione:
:0054FC0F mov ecx, dword ptr [ebx]
:0054FC11 dec ecx
:0054FC12 mov eax, dword ptr [ebp-14]
:0054FC15 shr eax, cl
:0054FC17 and eax, 00000001
:0054FC1A mov edx, dword ptr [ebp-04]
:0054FC1D mov ecx, dword ptr [ebx]
:0054FC1F mov dl, byte ptr [edx+ecx-01]
:0054FC23 xor dl, byte ptr [ebp+eax-1D]
:0054FC27 xor eax, eax
:0054FC29 mov al, dl
:0054FC2B imul dword ptr [ebx]
:0054FC2D add esi, eax
:0054FC2F dec dword ptr [ebx]
:0054FC31 cmp dword ptr [ebx], 00000000
:0054FC34 jne 0054FC0F
:0054FC36 mov dword ptr [00575174], 0069238F
:0054FC40 mov eax, dword ptr [ebp-14]
:0054FC43 add eax, edi
:0054FC45 xor edx, edx
:0054FC47 mov dl, byte ptr [ebp-1D]
:0054FC4A add eax, edx
:0054FC4C xor edx, edx
:0054FC4E mov dl, byte ptr [ebp-1C]
:0054FC51 add eax, edx
:0054FC53 sub eax, dword ptr [ebp-10]
:0054FC56 mov ecx, 00000064
:0054FC5B cdq
:0054FC5C idiv ecx
:0054FC5E mov eax, edx
:0054FC60 test al, al
:0054FC62 je 0054FC6B
:0054FC64 mov esi, 00000007
:0054FC69 jmp 0054FC94
Io ho Modificato il progr. in questo modo:
54fc5c 31c9 xor ecx, ecx
54fc5e 89f7 mov edi, esi
54fc60 84c9 test cl, cl
Adesso non facciamoci fregare, infatti alla locazione 005500AB vi sono praticamente le
stesse operazioni ripetute di nuovo e che il progr. esegue subito dopo queste. Per fregare
la dialog-box, dobbiamo apportare le stesse modifiche di sopra anche in questo punto del
progr.
Dato che x capire se è registrato o meno Tarantula esegue questa call ad ogni avvio, la
dialog-box di registrazione non compare +, in quanto crede di essere già registrato ed il
programma si avvia come se fosse registrato... adesso vi direte: tutto qui??? nooo,
abbiamo appena iniziato!!!
Ora abbiamo il problema del crc che visualizza una message-box di errore e che disabilita le opzioni quali la generazione dei file html e l'apertura, salvataggio dei file. In pratica, il progr. prima di avviarsi controlla se è stato modificato ed in caso affermativo vengono disabilitate le funzioni principali e viene visualizzato un errore di external exception.
Steppando varie volte col Soft-Ice, sono riuscito a scoprire dopo quale operazione il progr. ci manda all'errore di external exception (questa è la parte + pallosa in quanto non abbiamo la benché minima idea di quale operazione possa essere, dato che non viene richiamata una message-box proprietaria del progr.):
Diamo un'occhiata a queste locazioni:
:0053B528 push ebx
:0053B529 push esi
:0053B52A mov esi, eax
:0053B52C mov eax, dword ptr [0057517C]
:0053B531 cmp eax, dword ptr [00575178]
:0053B537 je 0053B545
Se in 53B531 i valori differiscono viene visualizzata la message-box di errore: external
exception...
Il nostro scopo allora è quello di muovere in eax lo stesso valore che si trova in
memoria alla locazione 00575178; L'istruzione precedente carica proprio in eax un valore
preso dalla memoria... riavviamo Tarantula...
"bpm 57517C w" in Soft-Ice... ed eccolo che poppa in pochi istanti (il controllo
sull'integrità del codice viene effettuato all'inizio e non dopo aver inserito il nick e
la pass.).
Ci troviamo ora alla locazione 00541F1E mov dword ptr [0057517C], eax
Steppiamo con F8 ed ecco la parte di codice che ci interessa:
:00541F5B xor edx, edx
:00541F5D mov dl, byte ptr [ebx]
:00541F5F imul edx, esi
:00541F62 add dword ptr [0057517C], edx
:00541F68 inc esi
:00541F69 inc ebx
:00541F6A dec eax
:00541F6B jne 00541F5B
:00541F6D cmp dword ptr [ebp-08], 00000000
:00541F71 jne 00541F2F
Questo è un loop che continua fino a quando eax viene decrementato a 0 da FFFF iniziale.
Successivamente questo loop viene rieseguito dopo delle operazioni perché in 541F71 c'è
un salto all'indietro.
Se il codice viene modificato in 57517C viene salvato un valore differente da quello che
dovrebbe essere e viene visualizzata la message-box di errore.
Se vi interessa scendere più nei particolari, studiatevi come viene generato questo
numero(quello in 57517C)... troverete di sicuro un'operazione read_file che porta in
memoria i byte + importanti del progr. e su questi verranno eseguite delle semplici
operazioni per pervenire ad un numero finale che non deve differire da quello
prestabilito.
Ora il nostro scopo è quello di far caricare in eax, prima del confronto, il valore
giusto. Provate a modificare la memoria prima di caricare il valore... il programma
funzionerà benissimo e non avremo + problemi.
Pensavo bastasse modificare ancora una volta il progr. così:
:0053B52C mov eax, B317F1F2
Ma anche se si avvia bene(e senza message-box di errore) se cerchiamo di aprire un file,
di salvarlo o di generare un file html, viene visualizzata ancora la message-box di
errore. Se modifichiamo invece il valore di
memoria direttamente con il SoftIce il progr. funziona benissimo.
A questo punto, ho pensato di inserire una nuova sezione e una nuova funzione. A questo
scopo guardatevi il tutorial di Pusillus scritto per RingZ3r0.
Inserimento di una nuova funzione:
Ora dobbiamo utilizzare Hiew, ecco tutta la procedura passo passo per inserire una nuova funzione:
Apriamo il file Tarantula.exe
Andiamo in modalità hex con F4
Riga 0000014F: 0080c021 (In questo modo aggiorniamo il valore dell'image size)
Sommiamo il valore precedente con il valore hex 80 delle righe che dovremo immettere alla
fine del file.
Apportiamo queste modifiche subito dopo la sezione .rsrc (le sezioni sono grandi 40 byte)
00000338 2E70 6970 706F 0000 8000 0000 00C0 2100 .pippo........!.
00000348 8000 0000 007E 1F00 0000 0000 0000 0000 .....~..........
00000358 0000 0000 2000
0060
.... ..`
Con queste modifiche abbiamo creato una nuova sezione chiamata .pippo con queste
caratteristiche:
Number: 9
Name: .pippo
VirtSize: 00000080
RVA: 0021C000
PhysSize: 00000080
Offset: 001F7E00
Flag: 60000020
Andiamo proprio alla fine del file ed inseriamo 128 zeri, salviamo il file.
Abbiamo così creato la nostra nuova sezione che si andrà ad accodare alla fine del file.
Controllate in Hiew andando in modalità hex, premendo prima F8 e poi F6 dopo aver
ricaricato il file.
Ora dobbiamo inserire delle righe in ASM che immettano alla locazione di memoria 57517C il
valore F2F117B3.
Ecco come ho operato io direttamente in Hiew:
F4 modalità "decode" ed ecco che compare proprio come in un W-Dasm o in SoftIce
il codice ASM.
F5 goto ".0061C000"
F3 edit
F2 ASM "mov dword[57517C], B317F1F2
L'op code comunque è questo: C7057C515700F2F117B3
Infine un semplicissimo retn
Op code: C3
Abbiamo inserito così la stringa che salva in memoria il valore richiesto dal programma
per non andare in errore... cosa manca? ah ecco dobbiamo trovare un punto del programma
che ci rimandi alla nostra beneamata call, ricordiamoci però di richiamarla solo dopo che
il valore in 57517C sia già stato calcolato e memorizzato.
E' buona qualsiasi locazione prima del controllo, basta che sia delle stesse dimensioni.
Io ho modificato la locazione 00541F98
Ancora una volta F5 goto ".00541F98"
F3 edit
F2 ASM
Call 61C000
Ecco l'opcode: E863A00D00
Ora non facciamoci fregare di nuovo... c'è infatti quest'altra locazione che ci
infastidisce, infatti adesso prima di aprire o salvare un file viene dato un altro errore
dato dalla locazione 54E993:
:0054E98E mov eax, dword ptr [0057517C]
:0054E993 cmp eax, dword ptr [00575178]
I calcoli che esegue precedentemente sono praticamente uguali a quelli che abbiamo già
visto prima alla locazione 541F5B, qui vengono ripetuti e viene poi riconfrontato il
"numeretto".
Dobbiamo apportare così un'altra lieve modifica per muovere in eax il valore giusto.
Sfruttando lo spazio libero che abbiamo creato con la nuova funzione, implementiamo una
nuova call al progr. in questo modo:
:0054E98E call 61c010
:0061C010 mov dword[57517c], B317F1F2
:0061C01A mov eax, dword[57517c]
:0061C01F retn
In questo modo modifichiamo la memoria (per un eventuale altro controllo), muoviamo in eax
il valore accettato dal progr. e ritorniamo poi all'operazione seguente la call(cioè il
cmp che ci dava quest'ultimo errore).
Sperando di non avere + a che fare con Tarantula... saluto tutti e vi consiglio, x fare
proprio le cose in grande, di modificare anche le chiavi del registro in modo che
all'avvio appaia il vostro nome, il codice di registrazione (quello che volete) e la
scritta REGISTERED (anche se non lo è affatto) in questo modo:
Nella cartella HKEY_CURRENT_USER\Software\Nostrum India\Tarantula\Setup inserite (o
modificate) le stringhe:
"Author Name" con il vostro nick
"RegKey" con la vostra pass.(ovviamente inventata)
Ciauzzz by Fytse
|
Un salutone a tutta la U.I.C., dateci dentro col sesto corso!!!
Disclaimer |