3D Studio VIZ R3
(Dongle up your ass)


24-03-2000

by "Quequero"

 

 

UIC's Home Page

Published by Quequero


Ah Gigè, MA QUANTE KAZZO NE

Hehehehe, che fatica commentarsi i tutorial :), ad ogni modo avete davanti il primo tutorial della UIC sul cracking di un target che usa un dongle.....Può essere interessante :)

VUOI SAPÈ! OOOOOOOO
UIC's form
Home page se presente: http://quequero.cjb.net
E-mail: [email protected]
#Crack-it #UIC
UIC's form

Difficoltà

( )NewBies (X)Intermedio (X)Avanzato ( )Master

 
Volevate un tutorial sui dongle? Beh, eccone uno fresco fresco :).

3D Studio VIZ R3
(Dongle up your ass)
Written by Quequero

Introduzione

Ragazzi, sono stato assente molto tempo per motivi in realtà stupidi, ma in questo momento di "idle" ho deciso di attaccare una protezione che mi "chiamava" oramai da molto tempo......La release che attaccheremo sarà l'ultima della Kinetix (già, proprio quelli del 3D Studio Max) e cercheremo di abbattere la protezione rappresentata dal dongle stesso.

Tools usati

IDA 3.x
SoftIce 4.x (ma qualunque versione va bene)

URL o FTP del programma

http://vizonline.autodesk.com/ qui troverete aiuto, il programma lo potete trovare sui cd dei giornali oppure ve ne fate prestare uno originale o copiato e lo crackate

Notizie sul programma 

Il 3D Studio è un programma che è fantastico......O almeno, suppongo che sia fantastico visto che non lo so usare tanto bene :)..Ad ogni modo è conosciutissimo perchè è lo stesso che hanno usato per creare i mostri di Hercules, gli effetti di Matrix, Quake3, Jurassic Park; il programma serve per l'animazione e la modellazione 3D, se siete abbastanza bravi potete anche cimentarvi in imprese tipo la relizzazione di immagini digitali (e devo dire da quello che ho visto in giro che se lo sapete usare potete farci venir fuori qualunque cosa con un grado altissimo di realtà).....Insomma, il programma sembra proprio valere tanto oro quanto pesa ed è un po' il "SoftIce" dei grafici tanto per capirci.

Essay

Installate tutto il programmuzzo, riavviate e preparatevi spiritualmente a questo nostro piccolissimo attacco :)....All'avvio farà la sua comparsa un bel logo e quindi un simpatico box recante la scritta:
Hardware lock is not attached, or you are using the wrong lock, or the lock device drivers are not running.
Decisamente molto simpatico.....La chiave hardware non è attaccata (ma va?).....Oppure stai usando la chiave sbagliata (se, come se a casa avessi dongle a iosa), oppure il dispositivo della chiave non sta correndo (eppure è strano, sono stato a rincorrere la parallela per dieci minuti.........Bhoooooooo)....
Bene gente di mala fede :)....Suggerisco di iniziare a mettere un breakpoint su MessageBoxA (già, da questo lato è più semplice crackare la protezione piuttosto che usare il solito bpio -h 378 rw). Prima di procedere di nuovo al riavvio del programma vi consiglio VIVAMENTE di farvi una copia di backup dell'eseguibile (3dsviz.exe) e di farla disassemblare dalla cara IDA, segnate la casella "Load Resources" al momento del disasm, ma non scappate perchè dopo qualche secondo vi chiederà di cercare per lei due dll (splash.dll e zlib.dll) che si troveranno nella cartella del 3D Studio, fatto questo spegnete winamp, chiudete tutto quello che avete nel systray, overclockate il processore e andate a farvi un giro......Dopo circa 15 minuti troverete un bel file tutto disassemblato, incasinato quanto l'intestino di un bue mutante. A questo punto riattivare il breakpoint del messagebox......Avviate 3D Studio e fatevi un giro per quelle routine...Bene, uscite dalla chiamata in cui vi trovate e felicemente settate un breakpoint sulla chiamata alla routine che genera il box (0048A783 tanto per capirci), adesso fate ripartire il programma ed entrate in questa call, troverete subito qualcosa di simile:
 
.text:0048A7A3            sub esp, 200h
.text:0048A7A9            mov eax, _data_648D34
.text:0048A7AE           test eax, eax
.text:0048A7B0            jz short _text_48A7C3
 
c'è un test eax, eax...Non cambiatelo perchè mettendo in eax un valore diverso da zero entrerete in questa routine:
 
text:0041AE00             mov eax, _data_648D34
text:0041AE05             mov eax, [eax]
text:0041AE07             retn
come vedete la chiamata muove in eax il valore della locazione 648D34 (che è zero)...E poi muove in eax ciò che essa stessa punta...Ciò significa che se voi mettete nel registro un numero qualunque, allora il programma arrivato alla locazione 0041AE05 muoverò in eax ciò che.......Eax punta, cioè nulla e quindi....CRASH!
Quindi continuate la vostra esplorazione del codice e tenete particolarmente d'occhio tulle le XREF che incontrate. Infatti da ora in poi dovremo lavorare a ritroso per giungere alla parte di codice che ci interessa, (in realtà le parti che ci interessano sono molte, ma facciamo una cosa alla volta) suggerisco di iniziare a rintracciare la call che chiama la routine che genera il box, è necessario risalire per capire dove si possa trovare qualche check, ed è uno dei pochi metodi attuabili viste le dimensioni ragguardevoli del file :).
Iniziate a rinominare tutte le routine delle quali conosciamo la funzione e stiamo particolarmente attenti alla chiamata sulla quale abbiamo settato l'ultimo breakpoint:
 
.text:0048A783              _text_48A783:               ; CODE XREF: _text_48A6C0+4Dj
.text:0048A783              call NoHardwareKey    ; Questa è la routine della messagebox
 
Bene, vediamo una reference all'indirizzo 48A6C0.....Clickiamoci sopra e vediamo cosa fa questa chiamata (o se preferite, premete G e scrivete in IDA 48A6C0)....Approderete qui:
 
.text:0048A6DF            test eax, eax
.text:0048A6E1             mov esi, 4
.text:0048A6E6             jz short _text_48A6F5
.text:0048A6E8             cmp dword ptr [eax+4D4h], 1
.text:0048A6EF             jz _text_48A798
.text:0048A6F5              push 404h
.text:0048A6FA            lea eax, [ebp+var_404]
.text:0048A700              push eax
.text:0048A701              call _text_5F91C0
.text:0048A706              test ax, ax
.text:0048A709              jz short _text_48A70F
.text:0048A70B              push 5
.text:0048A70D             jmp short _text_48A783
Okkei, date un'occhiata a tutte le variabili che vedete e poi allegramente entrate nella routine chiamata all'RVA 0048A701
siete dentro? Okkei, siamo molto vicini ad un check che esamineremo dopo, per ora non vi dico nulla visto che a noi interessa capire la protezione, non ci frega nulla di sapere la locazione dei check se poi non sappiamo da dove vengono, giusto???
 
------------------------------------------------- Piccolo trucchetto del mestiere ------------------------------------------------------
Vi consiglio trovare le call che cercano di accedere al dongle......Ma come? Beh, o andate giu di breakpoint oppute fate come ho fatto io (grazie Zafer, il trucchetto è suo, io non ci avrei mai pensato) cioè, togliete la parallela dalla stampante e ne prendete la spina che dovrebbe essere  attaccata alla stampante.....La guardate e cercate il primo pin (in genere ci sono dei numeri, ma vista frontalmente è il primo pin in alto a sinistra).......Bene, adesso ci dovete collegare un led (non siate tirchi che costano 100£ l'uno)......Già, proprio un led (e qua l'intentiva è stata tutta mia :) guardate il Led, il gambo più lungo è il catodo (dove deve arrivare tensione con segno -) e l'altro è l'anodo (tensione positiva) inserite il gambo dell'anodo nel secondo pin della parallela e mettete a contatto il catodo del Led con la massa della porta (la parte in metallo) se avete fatto tutto bene avete create un utilissimo congegno che vi svelerà ogni volta che un programma cerca di accedere alla parallela...Come? Ovvio, il led si accende e mentre steppate potete capire con facilità se state chattando col dongle o meno :)....È facilissimo in realtà, e con 2000£ vi fate un congegnetto che credetemi userete anche in futuro :).
------------------------------------------------- Fine trucchetto del mestiere ----------------------------------------------------------
 
Bene, bene, abbiamo visto queste simpatiche routine, ora cerchiamo di brekkare su qualche check, per prima cosa collegate il vostro nuovo attrezzo alla parallela :), avviate 3D Studio........Notate che dopo circa 2 secondo il led lampeggia, bene, riavviate 3D Studio e prima che il led si accenda provate a premere ctrl+d e steppate fino ad arrivare all'RVA 005F9E65 (il metodo usato è molto empirico ma funziona benissimo), ora entrate in questa chiamata e steppate con F10 fino a 004021C7, entrate qua dentro e steppate ancora fino a 0048A701, entrateci, e vi ritroverete qua:
 
.text:005F91C0             push esi
.text:005F91C1             push edi
.text:005F91C2             mov eax, [esp+arg_0]
.text:005F91C6             or eax, eax
.text:005F91C8             jnz short _text_5F91D3
.text:005F91CA            mov ax, 2
.text:005F91CE             pop edi
.text:005F91CF             pop esi
.text:005F91D0             retn 8
Mmmmmmmm........Un po' di zen adesso.......Soffermiamoci sulla call a 0048A701 e cosa vediamo?
 
.text:0048A6FA             lea eax, [ebp+var_404]
.text:0048A700              push eax
.text:0048A701              call _text_5F91C0
.text:0048A706              test ax, ax
.text:0048A709              jz short _text_48A70F
.text:0048A70B              push 5
.text:0048A70D             jmp short _text_48A783
.text:0048A70F              lea ecx, [ebp+var_404]
.text:0048A715              push ecx
.text:0048A716              call _text_5F9220
.text:0048A71B              test ax, ax
.text:0048A71E              jz short _text_48A724
.text:0048A720              push 5
.text:0048A722              jmp short _text_48A783
vediamo che c'è una chiamata e poi un test ax, ax (e di fatti nella chiamata 48A701 ci siamo entrati dentro.......Ma poco dopo troviamo una chiamata simile (cioè: call, e poi test ax, ax).......Possiamo supporre che la prima call sia un check (Non è che lo facciamo ad cazzum, anche perchè andando a ritroso nel codice giungiamo alla routine che ci chiude il programma :)..E quindi anche la seconda, perciò esaminiamole tutte e due, iniziamo con quella all'RVA 0048A701 (che chiameremo PrimoCheck):
 
.text:005F91C0             push esi
.text:005F91C1             push edi
.text:005F91C2             mov eax, [esp+arg_0]
.text:005F91C6             or eax, eax                       ; EAX=0? Non saltare
.text:005F91C8             jnz short _text_5F91D3
.text:005F91CA            mov ax, 2
.text:005F91CE             pop edi
.text:005F91CF             pop esi
.text:005F91D0             retn 8
può essere interessante........Vi riporto lo stato dei registri appena entrati in questa chiamata:
EAX=0096F8FC  EBX=00400000  ECX=00000000  EDX=11000810  ESI=00000004
EDI=0096FD00  EBP=0096FD00  ESP=0096F8E0
che chiamata "innocua"...Dhe hi hi, allora cosa succede qua dentro? Vengono salvati esi ed edi, in eax viene mosso 0096F8FC.....Poi viene testato EAX, se è 0 allora muove 2 in AX.......Passiamo all'altra chiamata:

.text:005F9220             sub esp, 4
.text:005F9223              push esi
.text:005F9224              push edi
.text:005F9225             mov edi, [esp+0Ch+arg_0]
.text:005F9229             or edi, edi
.text:005F922B             jnz short _text_5F9239
.text:005F922D             mov ax, 2
.text:005F9231             pop edi
.text:005F9232             pop esi
.text:005F9233             add esp, 4
.text:005F9236              retn 4

Succede lo stesso solo che stavolta viene testato edi......Allora a runtime facciamo una cosa, alla  prima chiamata azzeriamo eax, e poi dopo "mov ax, 2" lo azzeriamo di nuovo e quindi steppiamo.....Alla seconda facciamo in modo che il salto a 005F922B NON avvenga e quindi azzeriamo EAX prima del "retn 4".......Chiudiamo sice.........Niente, stesso messaggio, proviamo a cercare un altro check, rientriamo....Facciamo le stesse modifiche e steppiamo ancora...Sempre utilizzando un pochetto di zen andiamo qualche rigo più giù ed entriamo alla chiamata che si trova all'RVA 0048A35A, ecco cosa troviamo:
 
.text:005F9400              push ebx
.text:005F9401              push esi
.text:005F9402             mov eax, [esp+arg_0]
.text:005F9406             or eax, eax
.text:005F9408             jnz short _text_5F9413
.text:005F940A             mov ax, 2
.text:005F940E             pop esi
.text:005F940F             pop ebx
.text:005F9410              retn 8
 
mmmmmm non mi sembra affatto nuovo, stessa cosa di prima, facciamo in modo che eax in uscita contenga zero....Tadàààà funziona...Deh hi hi :).......Bene, abbiamo crackato il programma??? Beati voi che credete ancora nelle favole :)....Innanzitutto apportiamo una piccola modifica al programma, trasformando in questo modo le routine:
 
Primo check:
.text:005F91C0              push esi
.text:005F91C1              push edi
.text:005F91C2             mov eax, [esp+arg_0]
.text:005F91C6  33C0  xor eax, eax
.text:005F91C8             jnz short _text_5F91D3
.text:005F91CA 33C0   xor eax, eax
.text:005F91CC     90    nop
.text:005F91CD     90    nop
.text:005F91CE             pop edi
.text:005F91CF             pop esi
.text:005F91D0              retn 8
Secondo check:
.text:005F9220              sub esp, 4
.text:005F9223              push esi
.text:005F9224              push edi
.text:005F9225             mov edi, [esp+0Ch+arg_0]
.text:005F9229 33FF   xor edi, edi
.text:005F922B            jnz short _text_5F9239
.text:005F922D 33C0  xor eax, eax
.text:005F922F      90   nop
.text:005F9230      90   nop
.text:005F9231             pop edi
.text:005F9232             pop esi
.text:005F9233             add esp, 4
.text:005F9236              retn 4
Terzo check:
.text:005F9400              push ebx
.text:005F9401              push esi
.text:005F9402             mov eax, [esp+arg_0]
.text:005F9406 33C0   xor eax, eax
.text:005F9408             jnz short _text_5F9413
.text:005F940A 33C0  xor eax, eax
.text:005F940C      90  nop
.text:005F940D      90  nop
.text:005F940E            pop esi
.text:005F940F            pop ebx
.text:005F9410            retn 8
(se il patch non dovesse andare, sostituite i nop con "inc eax   dec eax" o più semplicemente appena entrati nella chiamata sostituite tutti e tre i check con un bel "xor eax, eax    retn x")

Adesso il programma sembra funzionare correttamente.........Gia, sembra....Perchè? Beh perchè c'è sicuramente ALMENO un altro check.......Che è semplicissimo da scoprire, basta aprire 3D Studio e lasciarlo lì per 5 minuti......Poi un bel box ci accoglierà dicendoci che non c'è nessuna chiave......Bene andiamo a distruggere anche quel check :)
Lo Zen ancora una volta ci da una mano :)......(Ah! Io ho scoperto il check mentre giocherellavo col 3D Studio, poi ho riaperto il programma ed ho misurato il tempo col cronometro....Erano 5 minuti e qualcosa, ma visto che i programmatori sono spesso idioti sapevo per certo che quel check era impostato a 5 minuti esatti :) un check di quel genere quasi sicuramente sarà settato con un bel SetTimer:

UINT SetTimer(

HWND hWnd, // handle of window for timer messages
UINT nIDEvent, // timer identifier
UINT uElapse, // time-out value
TIMERPROC lpTimerFunc // address of timer procedure
);
allora, per chi non lo sapesse, il parametro da cercare non è il 3°, bensì il secondo perchè il sistema salva i dati nello stack al contrario....Breve digressione:
molti di voi si chiedono perchè i dati vengono salvati al contrario, e se scrivete in ASM sapete anche che non potete chiamare un api come fareste in C, cioè chiamando i parametri dal primo all'ultimo, ma dove pushare al contratio tutti i parametri oppure dovete usare la notazione in riga. Perchè tutto questo? Lo stack funziona con un metodo detto LIFO (Last In First Out) cioè, è come quando accatastate tante monetine, se poi dovete recuperarle senza farle cadere sarete costretti a tirarle via a partire della più alta (che è quella che avete messo lì per ultima), quindi lo stack fa la stessa cosa, prendendo in esempio l'API SetTimer vediamo che il sistema deve recuperare per primo il primo parametro e per ultimo il quarto parametro, ma visto che lo stack si muove in maniera ambigua (LIFO) se noi facessimo pushare i parametri in questo ordine:
1
2
3
4
quando il processore andrà a popparli tirerebbe li tirerebbe fuori in ordine inverso:
4
        3
2
        1
se invece noi li pushiamo al contrario (cosa che viene fatta automaticamente nei linguaggi ad alto livello, ma la dobbiamo fare manualmente se scriviamo in ASM) allora il processore li popperà nel giusto ordine, guardate:
PUSH:
4
3
2
1
 
POP:
1
2
3
4
è questo il motivo per il quale in sice dobbiamo andare a cercare il secondo parametro e non il quarto. Fine digressione.
Sappiamo che il check viene fatto dopo 5 minuti e sappiamo anche che SetTimer vuole che gli sia passato il tempo in millisecondi, quindi:
1000 millisecondi = 1 Secondo
1 minuto = 60 secondi cioè = 60*1000 = 60.000 millisecondi
5 minuti = 60.000*5 = 300.000
300.000 in esadecimale corrisponde a 493E0h
allora, mettiamo un breakpoint su SetTimer ed avviamo 3D Studio, appena troviamo il Timer giusto ci settiamo un bp sopra........Oki, la chiamata inizia all'indirizzo 00402546, cambiate il secondo parametro in modo da attendere solo qualche millisecondo e vedete che viene fuori:
Box1: Hardware lock or its driver is not functioning
        Box2: Hardware lock failure -- program must terminate
abbiamo quindi due reference sulle quali attaccarci per risalire al codice, quindi mettiamo un bp su messagebox e vediamo dove tornano queste due chiamate che li generano:
0048A622 e 0048A6A4
andiamo in IDA e vediamo cosa troviamo da queste parti:
 
.text:0048A60F              push 2010h
.text:0048A614             lea eax, [ebp+var_270]
.text:0048A61A              push eax
.text:0048A61B             lea ecx, [ebp+var_170]
.text:0048A621              push ecx
.text:0048A622              push 0
.text:0048A624              call ds:MessageBoxA
.text:0048A62A              _text_48A62A: ; CODE XREF: CheckCall+377j
.text:0048A62A            ; CheckCall+386j
ora vi starete chiedendo: "Chi è CheckCall?"....Quella non è altro che la chiamata che contiene tutti quanti i check cioè quella che si trova all'RVA 0048A240, clickate sulla XREF e dove finite?
 
.text:0048A5A3             push esi
.text:0048A5A4             push 1Ch
.text:0048A5A6             lea eax, [ebp+var_674]
.text:0048A5AC            push eax
.text:0048A5AD            call QuartoCheck
.text:0048A5B2             and eax, 0FFFFh
.text:0048A5B7             jz short Box1
.text:0048A5B9             mov ecx, [ebp+var_4]
Esattamente dopo il quarto check (che polli i programmatori) quindi andando per esclusione anche la chiamata a 0048A5AD DEVE essere un check, esploriamola:
 
.text:005F99C0              push ebx
.text:005F99C1              push esi
.text:005F99C2              push edi
.text:005F99C3             mov eax, [esp+arg_0]
.text:005F99C7             or eax, eax
.text:005F99C9             jnz short _text_5F99D5
.text:005F99CB             mov ax, 2
.text:005F99CF             pop edi
.text:005F99D0             pop esi
.text:005F99D1             pop ebx
.text:005F99D2              retn 18h
 
Mmmmmmm non sembra essere troppo diverso da prima.......Ed invece lo è.......E molto, non vi nascondo che questo check mi ha dato dei piccoli problemi per via della sua strana conformazione :)....Allora, se facciamo la solita modifica (cioè muoviamo in eax 0) poi incappiamo in un secondo sub-check, e cmq il check viene fatto due volte, quindi vi propongo ben tre soluzioni attuabili:
1) Modifichiamo la chiamata affinche xori eax e poi  all'RVA 0048A5B2 invece di "and eax...." facciamo saltare al programma tutti quanti gli altri check, ciò significa che dobbiamo mettere un "jmp 48A63D" (solo che dovremmo inserire un jmp di questo tipo dopo ogni chiamata a questa routine e le chiamate ne sono diverse)
 
2) Modifichiamo la chiamata nel solito modo ed invece di mettere il jump ci calcoliamo quanti byte intercorrono dall'istruzione dopo della call fino alla fine dei check: 0048A63D-0048A5B2 = 8Bh, quindi aggiungiamo allo stack pointer 8Bh appena prima del ret così la chiamata tornerà proprio all'istruzione 0048A63D
 
3) Noppiamo tutta la routine che setta il timer così che non sarà fatto alcun check ogni 5 minuti e ci leviamo tutti gli inutili problemi di torno :)
 
Io ho scelto l'ultima, quindi se volete, aprite il file con un hex editor (RVA 402546   offset 2549h) e noppate tutta la routine dall'offset 2549h all'offset 255Bh.
Visto che scrivo i tutorial a runtime ho appena testato e sembra funzionare correttamente, se non dovesse andare ci sarebbero comunque altre due soluzioni :).
Finito? NO!
Mentre guardavo il listato mi sono accorto di un "probabile" 5° Check (offset 1F95D0), stavo guardando le varie routine ed ho scoperto che ce n'era una uguale agli altri check, eccovela:
 
.text:005F95D0         push esi
.text:005F95D1         push edi
.text:005F95D2         mov eax, [esp+arg_0]
.text:005F95D6         or eax, eax
.text:005F95D8         jnz short _text_5F95E3
.text:005F95DA         mov ax, 2
.text:005F95DE         pop edi
.text:005F95DF         pop esi
.text:005F95E0         retn 0Ch
.text:005F95E3          push eax
.text:005F95E4         call _text_5F33E0
.text:005F95E9         mov esi, eax
.text:005F95EB         cmp word ptr [esi], 72
.text:005F95F0         jz short _text_5F9600
.text:005F95F2         mov ax, 2
.text:005F95F6         pop edi
.text:005F95F7         pop esi
.text:005F95F8         retn 0Ch
è decisamente un check, ma non sono riuscito ad arrivare a questa routine in quanto non ho potuto clickare tutti i maledetti menu del 3D Studio, tutto inizia comunque da una call all'RVA 00464DB0, solo che questa call stranamente non ha reference all'esterno, tranne una nella sezione .rdata:
; DATA XREF: .rdata:0060B0C4o  ----> .rdata:0060B0C4 dd offset   _text_464DB0
e la cosa non mi piace per niente...............Mumble mumble.............Forse forse sono arrivato ad una qualche conclusione...Dunque, proviamo a fare una cosa......Forziamo il jnz a 00F95D8 e facciamolo diventare un jmp che punterà all'RVA 005F95F6, quindi cambiamo quei "pop edi" e "pop esi" in xor eax, eax.......Dovrebbe andare....Olè, raga, mentre facevo un disegno so riuscito ad arrivare a questa routine e sembra proprio che non questa modifica vada bene, quindi ecco cosa dovrete fare:
 
.text:005F95D0                              push esi
.text:005F95D1                              push edi
.text:005F95D2                              mov eax, [esp+arg_0]
.text:005F95D6                              or eax, eax
.text:005F95D8     E919000000     jmp 0001F95F6
---- snip ------ snip ------ snip ------ snip ------

.text:005F95F6     33C0                 xor eax,eax
.text:005F95F8                               retn 0Ch
Benissimo, possiamo considerare ora il 3D Studio crackato e funzionante al 100%....Altri check non ce ne sono, questo è poco ma sicuro, vorrei comunque farvi notare una cosa, cioè che prima di ogni check trovate questa istruzione:
 
.text:0048A5A6             lea eax, [ebp+var_674]
io purtroppo me ne sono accorto solo ora, ma cmq visto che l'ho scoperto ho potuto controllare che non ci fossero altri check presenti.......E non ce ne sono :)
 
Conclusione:
stavolta abbiamo crackato un programma che utilizzava un dongle Sentinel senza avere il dongle originale, siamo anche stati fortunati perchè quello che c'era da capire per eludere i check non è stato eccessivamente difficile, ma potrebbe capitarci un programma crittato nel quale dongle risiede l'algo di decrittazione.......A quel punto NON possiamo fare nulla senza il dongle originale......Ma se riuscissimo a procurarcelo potremmo creare un emulatore....Credo quindi che appena avrò a disposizione un dongle originale ed un programma che utilizzerà questa tecnica, ne farò sicuramente un tutorial.

 

Quequero
Note finali
Ringrazio tutti quanti i membri della UIC dal primo all'ultimo, ringrazio in particolar modo:
Master degli SPP: per la sua disponibilità sempre immensa, e per la sua voglia di insegnare ai lamer come me tutte quelle cose strabelle che lui solo conosce :)
Rigor Mortem degli SPP: anche lui per essere una persona incredibilmente disponibile e per tantissimi altri motivi
+Xoanon: che sti giorni sembra essere una persona seria, fiduciosa....Sarà forse per il ritorno di Anninaaaaaaaaaaaa??? :)
Ghibly: perchè è l'unica donna che riesce a gestire decine di bot senza sapere un tubo di unix-linux e related :)
Olga: che ultimamente è morta ma che resta il miglior revrser donna al mondo.....E forse l'unica in grado di tener testa al più grande reverser di tutti tempi.......cioè Killexx......Che anche se non lo sento da millenni continuerò a stimare per sempre, sei grande kill.
Ringrazio in fine tutta quanta la crew degli SPP per avermi letteralmente REGALATO un dominio di primo livello con tanto di hosting......Grazie SPP.
E visto che per una volta non vado di fretta saluto:
Andrea M. (anche se un giorno per colpa mia qualcuno ti licenzierà :), cod, AndreaGeddon, Ritz, nu, cek, syscalo, [alt255], ja lai, Annalisa, Romano M. (sei un grande), Marco C. e Claudio R. (grazie moltissime), Il_Bieco, Spinone, Along3x, Alor e tutti gli altri che quando dei fare i ringraziamenti non ti vengono mai in mente :)......Ciauzzzzzzzzzzzzz
 
Un Fuck:
Al palermitano maledetto (non che abbia nulla contro i palermitani sia inteso) che telefona alla mia pupa....Ma che vuoiiiiiii sei un vecchio.....Pensa alle vecchie e lascia la mia piccola (si fa per dire) 'cesca..........Fuck fuck fuck e strafuck.....Non puoi fare qualche altro numero ad cazzum? Col culo che ti ritrovi magari becchi quello di Anna Falchi che ti assicuro è meglio della mia pupa..........Fuckkkkkkkkkkkkkkkkkkkkkkkk
 
------------------------------------------------- Addendum 07-04-2000 ---------------------------------------------------------------
Salve a tutti.......Dovrei fare delle correzioni al tutorial visto che Xoanon mi ha seriamente minacciato :)))))
Ho sbagliato a scrivere quelle cose sul suo conto.......Xoanon è sempre stata una persona seria (ermmm...) e sempre fiduciosissima nei confronti di noi leim :).....L'Annina con cui sta è nuova, e per chi lo avesse pensato non è quella di prima dal momento che quella sta col metalmeccanico e non c'entra niente :) e con questa mancanza mi sono precluso l'invito al suo matrimonio. :)
Oltretutto ho commesso un errore a dir poco madornale dicendo che Kill3xx fosse il più grande reverser del mondo....Non è vero, mi sono sbagliato, avevo invertito il suo nome con quello di Xoa....È lui infatti il più grande reverser del mondo....Eccovi una sua frase:
 
Qui si revisa il reato di bestemmia, pubblica ingiuria e sostituzione
di persona. Il più grande reverser di tutti i tempi son io. Ti
diffido dal riavvicinare il mio nome a cotal leim.
Anzi no, non minimizziamo, di tutto l'universo conosciuto e sconosciuto........Non c'è (e non ci sarà mai) reverser più grande di lui.......È unico ed inimitabile, oltre che onnipotente ed imperituro :)...E con questo credo di aver finito, ciauzzzzzzz.....Ermmm xoa, adesso me la puoi togliere la pistola da dietro la schiena! :)
------------------------------------------------- Fine Addendum ------------------------------------------------------------------------

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   Linux   NewBies   News   Playstation        
  Tools   Tutorial   Search   UIC Faq

UIC