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"

 

 

UIC's Home Page

Published by Quequero

Quando mia moglie, guidando, sterza in corrispondenza di una
curva, e' una coincidenza.

Menomale, dopo tantissimo qualcuno si è preso la briga di fare questo tute, bravo fytse

Il marito dice alla moglie:
"Quando uno di noi due morirà, io andrò a vivere a Parigi!"

UIC's form
E-mail: [email protected]
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

Written by Fytse

Introduzione


Ed ecco finalmente il mio tutorial su Tarantula V.1.99... finalmente!!!
Ci ho messo un po' di tempo prima di scrivere questo tut ma, come si dice, meglio tardi che mai!
Allora, iniziamo, il programma è stato affrontato anche da altri membri della U.I.C. che mi hanno aiutato non poco in questo mio primo crack, ecco i partecipanti: GR!SU(Che ha già scritto un altro tut su questo progr. affrontando il seriale e riuscendo a capire come viene generato), RITZ, THE GOLEM(ma che fine hai fatto???), QUEQUERO(piccolo aiutino hehehe). 

Tools usati

Soft-Ice 4.00
Hiew
W-Dasm 8.93

URL o FTP del programma

http://www.indian-sites.com/nostrumindia/download.htm

Notizie sul programma 

Programma simile al FrontPage, in pratica serve per creare o modificare pagine internet di tipo html.
Vi è una dialog-box di registrazione in cui viene richiesto un codice per poter registrare la propria versione.

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

Note finali

Un salutone a tutta la U.I.C., dateci dentro col sesto corso!!!

Disclaimer

Vorrei ricordare che il software va comprato e  non rubato, dovete registrare il vostro prodotto dopo il periodo di valutazione. Non mi ritengo responsabile per eventuali danni causati al vostro computer determinati dall'uso improprio di questo tutorial. Questo documento è stato scritto per invogliare il consumatore a registrare legalmente i propri programmi, e non a fargli fare uso dei tantissimi file crack presenti in rete, infatti tale documento aiuta a comprendere lo sforzo immane che ogni singolo programmatore ha dovuto portare avanti per fornire ai rispettivi consumatori i migliori prodotti possibili.
Noi reversiamo al solo scopo informativo e di miglioramento del linguaggio Assembly.
Capitoooooooo????? Bhè credo di si ;)))) 

 

 

UIC's page of reverse engineering, scegli dove andare:

Home   Anonimato   Assembly    CrackMe   ContactMe   Forum       
    Iscrizione   Lezioni    Links   NewBies   News   Playstation        
  Tools   Tutorial   Search   UIC Faq

UIC