Vai al contenuto

[Guida] Introduzione al reversing [by Predator]


Messaggi raccomandati

Per iniziare a mettere qualcosa in questa sezione ho deciso di postare questa introduzione al reversing creata da Predator, uno dei migliori reverser italiani, vi lascio alla sua guida:

 

 

0.Condizioni d'uso

 

Il contenuto di questa guida è strettamente tecnico e da considerarsi solo a scopo educativo. Non presenta nessun scopo di lucro, non mi assumo nessuna responsabilità dell'uso che farete delle informazioni che troverete nel sito. Ogni forma di utilizzo diversa è da considerarsi reato e può essere perseguita secondo termini di legge.

 

Proseguendo accetti queste condizioni, consapevole che il software va acquistato e non rubato.

 

Predator.

 

1. Documentazione

 

INTRODUZIONE

[spoiler=Espandi...]

 

Gli smanettoni del PC come voi avranno sicuramente sentito parlare di Hacker, Cracker e Reverser.

 

Hacker deriva dal termine inglese "hack" che significa spezzare. Figura evoluta sopratutto con l'avvento di internet, possiamo definirlo un esperto informatico specializzato nel campo delle reti, infatti l'hacker usa sopratutto le vie della rete per arrivare dove altri non riescono. Col passare degli anni Hacker diventò un termine per indicare un pirata informatico.

 

Cracker come indica il termine "crack" rottura, si tratta di un "parente" dell'Hacker ma che ha come obiettivo la rottura degli schemi di protezione dei software. Fin dai primi usi di programmi su PC è facile vedere "release" di programmi modificate da Cracker.

 

Reverser termine che deriva dalla tecnica del "reverse engenieering". Come dice la parla stessa "ingegneria inversa", si tratta di una tecnica usata per vedere come funziona un software. A differenza del Cracker che ha come scopo la rottura della protezione, il Reverser ha come unico interesse quello di capire l'intero funzionamento del software senza possederne i sorgenti.

 

Personalmente ritengo che oggigiorno la figura del VERO Hacker è praticamente scomparsa, un tempo quando internet era ancora una bambina e i software dei server erano pieni di bug, fecero al felicità di molti asd. Oggi a parte qualche rara eccezione (che ci da Microsoft hahaha) è davvero difficile riuscire a scoprire nuovi bug che permettono di penetrare in macchine altrui.

Vi metto in guardia, c'è un modo infallibile per riconoscere un finto hacker, quando incontrerete qualcuno che va dicendo che lui è un hacker state sicuri al 100% che non lo è, buttatelo nella ignore list perchè è solo un .

Più attualizzabile è la figura del Cracker (ve lo dimostrerò) anche se le protezioni dei software, rispetto un tempo, sono diventate davvero più complesse il cracker non fa nulla di magico, applica solo la sua conoscenza e passione per il settore.

 

 

 

Obiettivi:

 

Siete sempre stati dal lato passivo del cracking e desiderate esserne parte attiva? Siete nel posto giusto :-)

L'obiettivo di tutti i documenti che troverete in questo sito è quello di aiutare un neofita (un newbie), ad entrare nel mondo del cracking con la minor fatica possibile. Non pretendete di diventare Cracker famosi, altrimenti passerete la vita davanti al PC, c'è ben di meglio nella vita. Prendete il cracking come una curiosità un hobby, non ossessionatevi e riponete le vostre capacità in cose più professionali e remunerative il cracking non vi da da mangiare.

Detto questo buon proseguimento ^_^

 

Predator.

 

 

 

IL CRACKING (altra intro :p )

[spoiler=Espandi...]

COSA E' IL CRACKING?

 

Se cerchiamo nel vocabolario probabilmente troveremo una definizione di questo tipo

 

cracker: sottile galletta croccante, spesso salata.

He he he sicuramente non è questo che interessa a noi, giusto? A noi interessa l'ambito informatico.

Con questo termine si intende l'arte del bypassare o disattivare i sistemi di protezione dei software senza possederne il sorgente.

Faccio un esempio:

avete un programma che una volta installato e avviato, ci avvisa con un messaggio che la versione che stiamo usando è dimostrativa e durerà 30 giorni, al termine del quale dovremo acquistare il programma.

Questo è un tipico esempio di progamma shareware, ovvero quelle versioni di programma che servono per far valutare il software. Possono essere completi e scadere dopo un periodo di tempo oppure avere alcune funzioni o menu disabilitati, che saranno abilitati solo nella versione completa.

Le software house per facilitare la produzione dei loro programmi e per facilitarne la vendita, nella stramagioranza dei casi mettono a disposizione software completi che diventarenno senza limiti una volta acquistato il prodotto. Come?

Possiamo distinguere varie categorie di shareware

- registrabili

- non registrabili

 

I registrabili sono quelli che possono essere sbloccati inserndo un nome e un seriale, quest'ultimo spesso calcolato da un algorimo in base al nome.

I non registrabili sono apparsi per rendere difficile la vita dei cracker, questo perchè non presentano un box dove inserire i dati della registrazione ma per esempio consentono di utilizzare il programma completo per un determinato numero di giorni o di operazioni, ecco i cosidetti Trial.

 

Poi possiamo parlare di protezioni della copia, tipo la famosa SecureRom della Sony che legge una locazione del CD che non puo' essere scritta dai comuni masterizzatori perciò all'avio di una copia il programma non partirà. Peggio ancora una chiave hardware che si attacca alla porta parallela o usb.

Nei tutorial che andrò a proporre vedremo tutti questi esempi.

 

GLI STRUMENTI DEL CRAKER?

 

Per poter crakkare abbiamo bisogno essenzialmente di:

- un Debugger

- un Disassembler

- un editor esadecimale

- un monitor di registro

- un monitor di file

- una guida sulle API (non gli insetti :-D)

- Packer/unpacker

- altro :-)

 

Comunque capita spesso che per protezioni di media difficoltà sia sufficenti solo il debugger.

 

Predator.

 

 

 

IL REVERSING

[spoiler=Espandi...]

INTRODUZIONE ALL'ARCHITETTURA X86

 

Da dove iniziare:

 

Come detto in precedenza il Cracker ha come scopo quello di rompere o bypassare la protezione del software. Come si può modificare un programma senza possederne i sorgenti?

Il formato eseguibile di un programma non è altro che una sequenza di byte, che rappresentano le istruzioni che il processore deve eseguire. Alla base di tutto c'è il formato BINARIO, una cosa che qualsiasi apparecchiatura elettrica ha in comune è il formato binario.

Perché il binario?

La comunicazione è un bene irrinunciabile, purtroppo capita che la parte importante della comunicazione cioè il contenuto del messaggio, venga reso incomprensibile a causa del linguaggio. Due soggetti che vogliono comunicare in modo comprensibile devono avere necessariamente un linguaggio comune.

Ad ugual modo noi per poter comunicare con il computer dobbiamo avere un linguaggio condiviso da entrambi. Normalmente chi usa il proprio PC o un qualsiasi altro elettrodomestico non pensa a come questo realizzi le operazioni che esegue.

Nel PC il processore comunica con tutte le sue periferiche in input e output con segnali elettrici attraverso delle linee di controllo: il BUS.

Analizziamo dapprima COME questi controlli vengono attivati e successivamente QUALI sono.

- dare risposta è abbastanza semplice: ogni linea di controllo è o non è attraversata da corrente. Perciò solo due possibilità.

- una volta assimilato il segnale, si deve interpretare il messaggio, in questo caso un messaggio formato da 2 "parole": c'è corrente/non c'è corrente.

 

ecco perchè parliamo di linguaggio binario.

 

*il processore comunica con tutte le sue periferiche esclusivamente in binario, emettendo o meno un segnale di corrente.

 

 

I numeri binari sono semplici espressioni, del tutto simili ai numeri decimali. L''unica differenza sta nel fatto che utilizzano solo 2 simboli (lo zero e l'uno), invece di 10 del formato decimale al quale siamo abituati, di seguito a scopo di esempio riporto i primi 20 numeri binari (da 0 a 19):

 

0

1

10

11

100

101

110

111

1000

1001

1010

1011

1100

1101

1110

1111

10000

10001

10010

10011

 

 

 

IL BUS

[spoiler=Espandi...]

IL BUS

 

Nel PC per usare il BUS non dovrete obliterare nessun biglietto dehehehe.

In precedenza abbiamo visto che il BUS è un insieme di linee che il processore usa per comunicare con qualsiasi cosa lo circonda.

Quanti tipi di BUS esistono?

Esistono 3 tipi di BUS:

- BUS di dati

- BUS degli indirizzi

- BUS di controllo

 

vediamo in sintesi quali compiti svolgono e perchè sono così importanti.

 

il BUS Dati:

Si tratta della struttura di scambio dati più importante del computer, lo scambio avviene in modo bidirezionale ed è gestito esclusivamente dal processore. Per qualificare una CPU (16 Bit, 32 Bit, 64 Bit) si contano il numero di linee che il BUS utilizza. Questo indica la dimensione del bus dati.

Ecco che un processore a 32 bit ha uno scambio dati veloce il doppio rispetto i vecchi 16 bit e oggi con i 64 bit è triplicato. In pratica con l'aumentare delle linee del bus dati, aumenta ovviamente anche il numero di dati passati contemporaneamente, perciò aumenta la velocità.

 

Il BUS Indirizzi:

Se il bus dati è indispensabile per lo scambio dati, è vero anche che la CPU deve sapere dove si trovano questi dati, altrimenti non saprebbe distinguere un dato dall'altro. E' qui che entra in campo il BUS degli indirizzi (BUS Address), fisicamente è di dimensioni uguali al bus dati, con lo stesso numero di linee. Il suo scopo è quello di individuare i dati, a differenza del bus dati è monodirezionale ed è sempre la CPU a comandare.

Come detto fin dall'inizio il PC comunica esclusivamente in binario, per noi sarebbe complicato leggere indirizzi binari, allora ci verrà in aiuto la conversione in esadecimale :-)

Vi avevo detto che avremo visto qualche istruzione assembler, ecco la prima: MOV.

Di solito la lettura e la scrittura delle locazioni di memoria avviene con il comando MOV. esempio:

MOV AL, ES:[DI]

questo comando in assembler traduce li linguaggio macchina e significa: Metti in AL il contenuto di ES:[DI]

cosa sono AL e ESI lo vedremo poi, per il momento serve solo per capire il meccanismo.

 

Il BUS di Controllo:

Questo non è un vero e proprio bus come gli altri, abbiamo visto che il bus degli indirizzi serve a individuare le informazioni nel bus dati ma questo non basta. La CPU deve essere certa di essere collegata all'oggetto giusto e per questo pone dei Bit di controllo 0 e 1in una o più linee di controllo. In pratica il BUS di Controllo serve ad organizzare le linee di controllo.

 

Predator.

 

 

 

 

SISTEMI DI ENUMERAZIONE

[spoiler=Espandi...]

Sistemi di Enumerazione

 

ora che sappiamo che ogni informazione del nostro PC viene comunicata in binario, dobbiamo trovare un modo per renderli comprensibili alla nostra mente.

Un sistema di enumerazione è un insieme di elementi che esprimono un numero e rispetta queste regole:

- il numero degli elementi è detto base B

- ogni cifra del numero è uguale ad uno qualunque degli elementi del sistema di numerazione

- ogni cifra occupa una posizione nel numero, il cui numero d'ordine è crescente

- ciascuna delle cifre del numero ha un peso diverso a seconda della posizione che occupa

- il peso di una cifra corrisponde alla potenza della base B elevata alla posizione n della cifra stessa nell'ambito del numero

 

non ci avete capito molto? Non importa, non preoccupatevi :-)

possiamo dire che ogni sistema di enumerazione ha le sue regole e le rispetta correttamente, se per esempio nel sistema di enumerazione Decimale (quello che ci insegnano alle elementari 0,1,2,3,4,5,6,7,8,9...) prendiamo il numero 4789 (preso a caso), il numero N è così composto:

N = 4x103+7x102+8x101+9*100 = 4x1000+7x100+8x10+9x1 = 4000+700+80+9 = 4789

non ho fatto altro che applicare le regole sopradescritte sulla base del nostro sistema di enumerazione Decimale.

Tutto questo per introdurvi poi al sistema di enumerazione Esadecimale che useremo spesso.

 

Se vogliamo fare un analogo esempio nel sistema Binario, notiamo che le regole sono le stesse, prendiamo il numero binario 1101 e convertiamolo in Decimale:

N = 1x23+1x22+0x21+1x20 = 1x8+1x4+0x2+1x1= 13

 

1101 base 2 si scrive (1101)2

13 base 10 si scrive (13)10

 

Visto che facile? Ora sapete convertire i numeri binari in decimale hehehe

Ma non è finita qui, nell'uso dell'assembler avremo a che fare continuamente con li sistema di enumerazione Esadecimale cioè base 16.

Ma come usare 16 caratteri? semplice oltre i numeri da 0 a 9 aggiungeremo le lettere A, B, C, D, E, F.

Facciamo subito una considerazione importante, se nel sistema decimale ogni elemento ha una valenza che va da 0 a 9 in esadecimale va da 0 a 15 (rispetto al Decimale ovviamente).

Giusto per avere una visione migliore dei sistemi di enumerazione scrivo di seguito una tabella riassuntiva

 

 

Sistema

Esadecimale - Corrispondente Decimale - Corrispondente Binario

 

0 - 0 - 0000

1 - 1 - 0001

2 - 2 - 0010

3 - 3 - 0011

4 - 4 - 0100

5 - 5 - 0101

6 - 6 - 0110

7 - 7 - 0111

8 - 8 - 1000

9 - 9 - 1001

A - 10 - 1010

B - 11 - 1011

C - 12 - 1100

D - 13 - 1101

E - 14 - 1110

F - 15 - 1111

 

 

E convertire da decimale a binario ed esadecimale non ci pensiamo? Ma certo :-)

 

Premetto che ci sono una valanga di programmi calcolatrice (pure quella di windows basta attivare l'opzione scientifica dal menu visualizza), che fanno questo tipo di conversione e fanno pure le operazioni (tipo XOR, AND ecc).

 

Ecco, premesso questo mi pare comunque buon allenamento mentale sapere come si fa:

 

da decimale a binario:

- dividere il numero decimale per 2 (il resto è definito "bit meno significativo")

- dividere il quoziente per 2 (il resto è definito "bit successivo")

- continuare a dividere il quoziente che si ottiene per 2, tenendo il resto dell'operazione

- l'operazione termina quando la divisione del quoziente non è più possibile, il resto di questa operazione è definito "bit più significativo del risultato"

ecco un esempio che rende tutto più chiaro, prendiamo il numero 246 e trasformiamolo in binario:

operazione risultato resto

 

246 : 2 = 123 0

123 : 2 = 61.5 1

61 : 2 = 30.5 1

30 : 2 = 15 0

15 : 2 = 7.5 1

7 : 2 = 3.5 1

3 : 2 = 1.5 1

1 : 2 = 1.5 1

 

leggendo dal basso verso l'alto (vedrete più avanti che a causa dello Stack leggeremo spesso al contrario, cmq sono altre cose), il numero 246 in binario diventa 11110110.

Ora convertire da binario ad esadecimale è decisamente semplice, basta che tenete il riferimento alla tabella qui sopra, prendiamo il numero binario a gruppi di 4 elementi:

11110110 -> 1111 0110 -> F 6

ecco calcolato il nostro 246 in esadecimale F6 :-)

se avete la mente allenata, possiamo fare anche una conversione dal decimale direttamente all'esadecimale

 

246 : 16 = 15 resto 6

6 : 16 = 6<16 perciò teniamo 6

 

15 e 6 = F6

 

ok faccio un altro esempio (ma non ossessionatevi, non serve, la conversione a mano si usa solo in caso di necessità, usiamo le calcolatrici):

il numero 1254

 

1254:16= 78 resto 6

78:16= 4 resto 14 (E)

4

 

risulta 6 14 4= 6 E 4 -> rivoltiamo e otteniamo 4E6

 

bene bene, se siete arrivati fino a qui capendo tutto quello che avete letto, potete dire di aver sufficientemente chiaro i seguenti concetti:

- quale è lo scopo del cracker (ma va?)

- il PC comunica in binario

- il linguaggio macchina è possibile capirlo grazie alla conversione in assembler

- il processore comunica attraverso il BUS

- ci sono diversi sistemi di enumerazione, quelli che interessano a noi sono binario, decimale ed esadecimale

- sappiamo eseguire conversioni nei vari sistemi... e se non siamo scemi o costretti usiamo un software per farlo

 

è ovvio che ho dato solo una infarinatura per capirne i meccanismi e così farò per gli altri argomenti, ritengo inutile approfondire concetti che non avremo bisogno di sapere fino in fondo, altrimenti sarebbe una cosa lunghissima.

Se desiderate soddisfare maggiormente la vostra curiosità e sete di sapere, potete documentarvi di più per conto vostro.

 

Ok di seguito analizzeremo quali tipi di BUS esistono, a cosa servono, cosa è lo Stack e cosa sono i registri. Nel mentre scapperà anche qualche istruzione in assembler ;-)

 

Predator.

 

 

 

LETTURA DELLE INFORMAZIONI

[spoiler=Espandi...]

Come si leggono le informazioni?

 

L'unità fondamentale dell'informazione è il Bit. Acronimo di Binary Unit, può assumere solo due valori 1 e 0.

E' più corretto dire che il bit assume uno stato logico vero o falso. Comunque è normale consuetudine parlare di valore o numero.

E' così, con continue sequenze di 1 e 0 che il processore comunica, questo linguaggio è definito linguaggio macchina.

Un linguaggio che per la mente umana risulta ovviamente incomprensibile.

Ed è qui che entra in campo l'assembler, il linguaggio in grado di tradurre il linguaggio macchina in istruzioni comprensibili all'uomo.

L'assembler è un linguaggio di basso livello che permette il controllo assoluto del PC in ogni singolo microscopico elemento, è anche vero che si tratta di un linguaggio difficile. Esempio l'istruzione CALL traduce la sequenza 11001101, ma vedremo più avanti il significato delle più note istruzioni assembler.

 

Dopo il Bit c'è il Nibble. Dato che ogni Bit può assumere 2 valori, un Nibble è composto da 4 Bit e può assumere 16 espressioni diverse.

24 = 16 valori, che vanno da 0000 a 1111, ecco al tabella completa:

 

0000

0001

0010

0011

0100

0101

0110

0111

1000

1001

1010

1011

1100

1101

1110

1111

 

però in termini pratici l'unità di misura più conosciuta ed usata è il Byte, cioè una combinazione di 8 Bit.

Tutte le istruzioni assembler sono composte da multipli di Bit cioè da Byte.

Ogni carattere che leggiamo sullo schermo, perciò anche ogni singola lettera o simbolo che state leggendo in queste pagine, hanno dimensioni di un Byte. Sappiamo che la codifica completa di queste informazioni è descritta nella Tabella dei caratteri Ascii.

Sappiamo che i caratteri hanno 256 possibilità (da 0 a 255). Se apriamo il notepad, teniamo premuto il tasto ALT e digitiamo 65, rilasciano il tasto ALT apparirà il carattere "A" (tanto per fare un esempio di carattere ASCII).

Dato che un Byte è composto da 8 Bit e che un carattere è un Byte, arriviamo a concludere che 28 = 256 che tradotte in binario vanno da 00000000 a 1111111.

Nell'informatica (i programmatori lo sanno di sicuro), si è soliti usare misure come il Word cioè variabili di dimensione pari a 65536 Byte.

Word=16 Bit. ovvero 216 = 65536.

Altrettanto usato il DoubleWord che come dice la parola è un doppio Word 232 = 4294967296.

L'uso dei 32 Bit è solito dei processori attuali... ormai arrivati a 64 e chissà fino a dove arriveranno.

 

Predator.

 

 

 

I REGISTRI E LO STACK

[spoiler=Espandi...]

I REGISTRI E LO STACK

 

Il processore bensì abbia una struttura complessa, è una struttura logica. La CPU non è molto diversa dall'uomo, quando deve richiamare delle informazioni fa proprio come farebbe una persona con un blocco degli appunti. Le memorizza scrivendole una riga sotto l'altra e poi le riprende al momento del bisogno.

Il processore non è da meno, memorizza temporaneamente le informazioni nella sua memoria in attesa che vengano richiamate e utilizzate.

Queste locazioni di memoria del processore si chiamano REGISTRI.

I registri sono locazioni di memoria del processore estremamente veloci, memoria da non confondere con la ram

A differenza delle informazioni presenti nella ram, quelle nei registri sono immediatamente disponibili, mentre nella ram devono essere prelevati con una differenza di tempo nettamente superiore.

Sui registri ci sarebbe da dire veramente molto, ma questo è un corso di cracking non di assembler, perciò non mi soffermerò ai dettagli, magari integrerò successivamente altra documentazione.

 

Ma lo Stack che cosa è? Lo Stack è l'area di memoria nella quale il processore annota gli indirizzi che gli servono per tornare al punto di esecuzioni delle chiamate dell'istruzione CALL.

Lo Stack letteralmente significa pila (pila di piatti) e gestisce le informazioni in esso contenuto con il sistema LIFO, Last In First OUT.

Mi spiego meglio, tutti abbiamo presente l'immagine di una pila di piatti, sulla quale noi mettiamo un piatto sopra l'altro. L'ultimo piatto che mettiamo in cima, sarà il primo piatto che noi andremo a prendere. LIFO = il primo ad entrare è il primo ad uscire, cioè l'ultimo messo è il primo ad essere prelevato, chiara la figura? immaginate proprio una pila di piatti.

Ora vi sarà anche chiaro perchè precedentemente vi avevo detto che nella conversioni da un sistema di enumerazione a quello binario occorreva rovesciare i dati, proprio perchè la scrittura dello stack avviene al contrario

 

Bene iniziamo a scendere nelle istruzioni assembler.

Le procedure nello stack vengono chiamate da 2 istruzioni CALL e INT.

Una CALL è una chiamata ad un'altra procedura, perciò quando questo avviene il processore si annota nello stack la locazione di memoria, una volta terminata la procedura c'è SEMPRE un punto di ritorno che avviene attraverso l'istruzione RET o IRET (vi ricorda il return vero )

facciamo un esempio:

 

----

0102 MOV AX,01 mette il valore 01 dentro AX

0103 CALL 020A esegue la chiamata alla funzione all'indirizzo 020A

0104 MOV AH,4C mette il valore 4C in AH

----

020A ADD BX,AX qui arriva la CALL di 0103, somma BX con AX e mette il risultato in BX

020B RET ritorna da dove è stato chiamato cioè la CALL a 0103

----

 

credo che questo banalissimo esempio chiarisca a dovere la funzione svolta da CALL e RET, inoltre posiamo osservare anche l'uso di MOV e ADD.

Vediamo anche come si gestisce lo stack con le istruzioni PUSH e POP

PUSH XX si occupa di scrivere la Word contenuta in XX nello stack, lo dice anche il nome stesso PUSH cioè spingere qualcosa.

POP XX si occupa di leggere la Word dallo stack e copiarla in XX, il nome POP, estrarre qualcosa.

 

Riassumendo:

- per ogni CALL ci deve essere un RET

- per ogni INT ci deve essere un IRET

- per ogni PUSH ci deve essere un POP

 

ok per il momento è sufficiente, vedremo su campo pratico altre informazioni, inutile riempire ora la testa di ulteriori dettagli.

 

Predator.

 

 

 

ISTRUZIONI ASSEMBLER CPU 80X86

[spoiler=Espandi...]

Istruzioni Logiche Descrizione

AND prodotto logico

XOR XOR logica

OR OR logica

 

 

 

2. Downloads

 

OllyDebugger v 1.10 (PlugIns by Predator)

[spoiler=Espandi...]Lo strumento più utilizzato in assoluto. Un debbugger fantastico! che ormai sostituisce il vecchio (anche se valido) Soft-ICE, lo conoscete vero? :-)

Gira splendidamente sotto XP, è completo di plugins e ho modificato lo schema colori in modo a mio avviso ottimale.

 

Nota: è configurato per essere usato nella cartella C:\RE\OllyDbg110 se desiderate usarlo in un'altra directory, modificate i percorsi che trovate nel il file ollydbg.ini

 

[Download]

 

 

RegMon v 7.0

[spoiler=Espandi...]

Mostra gli accessi che un programma fa al registro di sistema di Windows.

 

[Download]

 

 

 

FileMon v 7.0

[spoiler=Espandi...]Mostra gli accessi che un programma fa a tutti i files che usa.

 

[Download]

 

 

 

Access Password Recovery v. 2.0 by Predator

[spoiler=Espandi...]Recuperare le password di Access versione 97/2000/2003 XP non è mai stato più facile. Se eravate convinti che una lunga password di Access fosse una sicura protezione per i vostri dati, nulla di più sbagliato. Questo programma reversa l'algorimo di criptazione e ritorna la password in un attimo, senza ricorrere al brute forcing.

 

[Download]

 

 

 

DeDe 3.50.02.1619

[spoiler=Espandi...]Un ottimo disassemblatore per i linguaggi UnManaged.

 

[Download]

 

 

 

3. CrackME

 

[CrackME #1] Ice9 [1/10]

Modificato da BeTmAsTeR
Link al commento
Condividi su altri siti

  • 1 anno dopo...

Crea un account o accedi per lasciare un commento

Devi essere un membro per lasciare un commento

Crea un account

Iscriviti per un nuovo account nella nostra community. È facile!

Registra un nuovo account

Accedi

Sei già registrato? Accedi qui.

Accedi Ora

Giochi in Uscita



×
×
  • Crea Nuovo...