ASM Riddle di Quequero

Stato
Discussione chiusa ad ulteriori risposte.
Hey Daniele.Grazie.ho fatto doppio click sullo script tuo che Gabripro mi ha mandato ,e ho visto che nella finestra DOS stampa una miriade di OK,poi finisce e mi dà il file di output.io nello script ho sostituito il percorso del mio level6 che è:
C:\Documents and Settings\enrico\Desktop\Level6.exe per il file in lettura e:
C:\Documents and Settings\enrico\Desktop\Level6out.exe per l'uscita.
lo script parte premendo Enter o facendo doppio click sul tuo .py file
e termina con un errore dicendo che trova una stringa nulla,ma il problema non è questo(gabripro mi aveva già detto di quest'errore),è che andando a vedere il
mio Level6out.exe arriva solo fino all'OFFSET 10A0, cioè non lo fa intero.ho installato Python 2.6.3.Perchè non fa il file per intero? c'è qualche impostazione da settare su Python o no?hai qualche idea ?GRAZIE.ciao.
 
il fatto del non farlo intero è piuttosto strano... se lo faccio da linux lo fa tutto, da windows invece ne fa metà... domani se ho un po' di tempo faccio in modo di gestire l'errore e spero che su windows poi vada...
 
Ultima modifica:
hewhh!!! Grazie ancora.se fai lo script per il level6 , fanne uno che faccia solo le differenze,cioè che tolga dal file originale 1 unità (hex o decimale è lo stesso in questo caso) per gli offset 0+3 (0,3,6,9,12,15,18,21,24,.......etc etc te li ho scritti in decimale,non in hex,fa attenzione)
2 per gli offset 01+3(1,4,7,10,13,16,19,22,25,....... idem)
3 per gli offset 02+3(2,5,8,11,14,17,20,23,26.........idem).una volta fatto questo se lo script è giusto hai un'altro nuovo file.
poi fai lo script che xorra solamente (quello che mi ha dato Gabripro,è il tuo precedente a quello postato più sopra era più vicino alla soluzione di questo).
questi sono solo miei suggerimenti,ma se trovi una strada + veloce e facile ok lo stesso.ho provato a capire i tuoi comandi nello script e,in parte credo di averli capiti,ma visto che tu lo usi da tanto vorrei capire meglio questo dal tuo primo script:
while True:<----esegue tutte le operazioni sotto while? 1st question
a = ord(file_or.read(1))<-----qui legge un intero dal file di origine e a che offset?l'offset corrente ? 2nd e 3rd
if a < 1:<---------finchè a è minore di 1 esegui la riga sotto altrimenti esegui quello che c'è scritto dopo else? 4th
res = a^A0<-------qua fa lo xor col Valore in A0 suppongo ( A0 = ord('\xcd')) 5th
else:
a-=1<--------qua toglie 1 ad a? 6th
res = a^A<-----qua fa lo xor col valore di A, res che cos'è? sta per result,risultato,che operazione compie? 7th.
Grazie se vorrai rispondermi.Ciao!!
 
allora, per la prima parte non so quando riesco, questa settimana ho un mucchio di roba da studiare...
while True: esegue un compito mentre (while) il risultato dopo è vero (True è sempre vero), in pratica è un ciclo infinito
ord() trasforma un carattere nel suo codice ascii (in decimale)
file_or.read(1) legge il byte successivo e sposta il puntatore in avanti di uno

in python i gruppi sono separati dall'indentazione: quindi tutto quello di un rientro di più sotto if verrà eseguito solo se la condizione è vera...
in res = a^A non vedo dove sia la difficoltà, semplicemente assegna il valore dello xor alla variabile res, non vedo dove sia la difficoltà

in pratica se il byte è minore di 1 lo lascia stare e lo xorra per cd, se invece è maggiore di 1 tolgo 1 e poi levo cd-1 e così via per gli altri...
 
ciao.grazie per le info.se ho capito giusto, i bytes 00 sono xorrati con cd,e al
posto di res avrei potuto scrivere una lettera (h per esempio).questo script è
quello che si avvicna di+ alla soluzione.sinceramente non so se quella che ho
proposto io sia valida(a GabriPro avevo scritto che potrei anche aver sbagliato tutto),xchè ci sono offset che contengono ancora zeri, e per quanto ne so,non credo di poter sottrarre 1,2, o 3,per ottenere un valore valido.in effetti anche tu
nello script i byte 00 li xorri sempre con CD(forse questa è l'unica eccezione).
ancora grazie.se ho novità ,scriverò.
 
ciao.volevo aggiungere che Python il file di output su windows,lo fa intero(96kb) se ad esempio lo sovrascrivo con zeri o un'altro valore hex,ma se sovrascrivo
con hex casuali,arriva a farmi un file di output di 305 byte.mistero.per il level6:
81 31 16 CC 68 86 CC 6B 8A CC 6B 86 CB 6C 86 CC
questa è la prima riga del Level6 già diminuita di 1,2,3 come vedi.
82 33 19 CD 6A 89 CD 6D 8D CD 6D 89 CC 6E 89 CD
questa è quella originale.
se prendo la prima riga e faccio l'op di xor con CC 6B 86=(CD-1,6D-2,89-3) ho:
4D 5A 90 00 03 00 00 00 0C 00 00 00 07 07 00 00
e mi sembra che sia giusto.puoi sovrascrivere l'exe con gli zeri e lasciare solo
la prima riga,e poi lanci il tuo script,se i valori vengono uguali a quest'ultima stringa vuol dire che lo script fa le operazioni corrette,altrimenti no.certo che non posso editare a mano tutto il file,altrimenti gli script a che servirebbero?
ma almeno così vedi se lo script fa le operazioni corrette.io ho provato il tuo
primo script,quello che mi dato gabripro,quello che si avvicina alla soluzione,ma va bene per il Level6.exe che non è stato modificato in alcun modo,non con quello a cui si sottrraggono i valori 1,2,3.grazie ancora! a presto
 
quello che ha postato gabri fa esattamente ciò che dici: prende ciascun offset, toglie 1 e lo xorra per cd -1, poi quello dopo -2 e xorra per 6d-2, quello dopo ancora -3 xorrato 89-3

la discussione era relativa al fatto che probabilmente dopo questo è necessario fare ancora qualcosa... oppure i numeri (-1,-2,-3) sono sbagliati
 
Ultima modifica:
si.ci vuole in idea.
PythonWin 2.6.4 (r264:75706, Nov 3 2009, 13:23:17) [MSC v.1500 32 bit (Intel)] on win32.
Portions Copyright 1994-2008 Mark Hammond - see 'Help/About PythonWin' for further copyright information.
>>> b= open('C:\Python26\level6.exe','r')
>>> b.read(3)
'\x823\x19'
>>> b.tell()
>>> b.tell()
3L
>>> Perchè non scrive i valori Hex giusti? non dovrebbe esserci 82 33 19 all'interno della stringa?
altro pezzo:
>>> b=open('C:\Python26\level6.exe','r')
>>> b.read(68)
'\x823\x19\xcdj\x89\xcdm\x8d\xcdm\x89\xccn\x89\xcd\xd5\x89\xcdm\x89\xcdm\x89\x8dm\x89\xcdm\x89\xcdm\x89\xcdm\x89\xcdm\x89\xcdm\x89\xcdm\x89\xcdm\x89\xcdm\x89\xcdm\x89\xcdm\x89\xcdm\x89-m\x89\xcd\x7f\xa8w\x7f'
mescola letter a valori HEX,cioè legge un pò valori HEX e un pò lettere.
intanto vado avanti a cercare di capire di +.Ciao!
>>> import os
>>> b= os.path.getsize("C:\Python26\level6.exe")
>>> b
98304L
 
Ultima modifica:
ciao.scrivo nuovamente.probabilmente Daniele ha visto giusto.è sbagliata la differenza.prova il primo script togliendo 1, 3 ,4 sia ai valori hex ,sia alla stringa
CD 6D 89 in modo che:
81 xor CC
30 xor 6A
15 xor 85
ho fatto l'esempio solo con i primi 3 byte.ciao!
provato non funziona.come non detto! è una questione di differenza........mah....difficult to find it!
 
Daniele.Ciao!.in windows xp il file non lo fa intero perchè nel tuo script hai aperto il file di origine in modalità 'r' ,cioè sola lettura.devi aprirlo in 'rb'.cioè per
uso binario e non ASCII.in questo modo il file di out è intero.Ciao!
file() takes two arguments. The first is the filename (which may be passed as a variable or a literal string, as we did here). The second is the mode. The mode determines whether we are opening the file for reading(r) or writing(w), and also whether it's for ASCII text or binary usage - by adding a 'b' to the 'r' or 'w', as in: open(fn,"rb")
 
Asd finalmente cpt perchè non restituisce il file intero... ora mi rimetto a fare alcune prove cmq non è detto che venga il risultato subito perfetto. Ci sta che ci sia da togliere dopo
 
Daniele.Ciao!.in windows xp il file non lo fa intero perchè nel tuo script hai aperto il file di origine in modalità 'r' ,cioè sola lettura.devi aprirlo in 'rb'.cioè per
uso binario e non ASCII.in questo modo il file di out è intero.Ciao!
file() takes two arguments. The first is the filename (which may be passed as a variable or a literal string, as we did here). The second is the mode. The mode determines whether we are opening the file for reading(r) or writing(w), and also whether it's for ASCII text or binary usage - by adding a 'b' to the 'r' or 'w', as in: open(fn,"rb")
sicuro che funzioni aprendolo in modalità binaria? io avevo fatto delle prove e non funzionava... cmq se avete risolto tanto meglio
Asd finalmente cpt perchè non restituisce il file intero... ora mi rimetto a fare alcune prove cmq non è detto che venga il risultato subito perfetto. Ci sta che ci sia da togliere dopo
io penso proprio che ci sia da togliere anche dopo... ma quanto?
 
ciao.non so se è assoluto il che funzioni sempre aprendolo in modalità binaria.però se devo sostiutire hex value mi sembra più logico aprire i file tutti con la stessa modalità.mi era passato per la mente che non fosse lo xor l'operazione da eseguire ,ma ho provato con altre e nulla.ho riletto i commenti
sul forum,ma nulla.mi sono soffermato qui:
99 05
E6 B8
questi sono i byte originali ,del level6 non modificato in alcun modo.
dovrebbe essere la parola "This".....program cannot be run in Dos mode(è il resto).quel 99 alla fine deve diventare 54 cioè =T.
B8 dovrebbe diventare 73 cioè = s
99 xor CD =54=T
B8 xor CD= 75=che non è s.
tra 99 e B8 ci sono 3 byte di distanza,quindi "andrebbero" xorati con il medesimo valore, anche se tolgo o aggiungo.ma non ho trovato un unico valore da togliere che vada bene per entrambi.(ancora non abbiamo la/le chiavi
esatte,ma dovremmo essere molto vicini alla soluzione,magari è una cosa stupida.....sì una volta individuata EH EH EH)
quindi è evidente(questo ormai lo sappiamo)che c'è qualche altra cosa da fare.e c'è chi c'è riuscito con carta penna e calcolatore.MAh.....Ciao!
ps: non demordo!(ma forse...sì)
 
allora, avevo già provato sempre con un programma a procedere per quella via, infatti avevo cercato il numero che mi permetteva di ottenere ciò che volevo, senza però nessun risultato... è per questo che ho subito pensato che ci fosse "Altro da fare"
 
ciao!.non ho ancora risolto ma......
1° ho pensato che per arrivare al byte definitivo forse lo XOR è stato eseguito più volte,(io ho pensato 3 volte),e non una sola togliendo quindi un'unica volta,nel modo in cui abbiamo provato.
ho provato a prendere quel 33 (secondo byte all'inizio) che diventerà 5A nell'exe.
per arrivare a 5A non esiste una sola strada,ma ce ne sono alcune diverse tra loro. se prendiamo cioè 6D dalla famosa stringa che è il valore con cui 33 andrà xorato possiamo fare:
33 xor 6C = 5F e abbiamo tolto 1 a 6D primo xor (a little from first)
5F xor 6B = 34 e abbiamo tolto 2 a 6D secondo xor(some more from 2nd)
34 xor 69 = 5A e abbiamo tolto 4 a 6D terzo xor (more again from 3rd)
rispettando cioè il fatto di togliere sempre un po di più.
quindi in questo caso abbiamo tolto 1, 2 e 4 da 6D:lo stesso risultato però si ottiene anche togliendo 1,3, e 5 da 6D o con 2,3, e 5.
io ho provato con questi valori per il momento,ma visto che nel rispondere a GabriPro il Que ha detto che il numero di combinazioni è molto limitato,si tratterà di immaginare che siano 4 o 5 al massimo.io ne ho già viste 3 come vedete.
Se lo stesso principio lo applichiamo anche ai valori da xorare con CD e 89 forse la soluzione la troviamo.si tratta di star lì a cercare tutte le combinazioni
e a combinarle tra loro ,eventualmente.forse un piccolo passo avanti......
 
ciao!.non ho ancora risolto ma......
1° ho pensato che per arrivare al byte definitivo forse lo XOR è stato eseguito più volte,(io ho pensato 3 volte),e non una sola togliendo quindi un'unica volta,nel modo in cui abbiamo provato.
ho provato a prendere quel 33 (secondo byte all'inizio) che diventerà 5A nell'exe.
per arrivare a 5A non esiste una sola strada,ma ce ne sono alcune diverse tra loro. se prendiamo cioè 6D dalla famosa stringa che è il valore con cui 33 andrà xorato possiamo fare:
33 xor 6C = 5F e abbiamo tolto 1 a 6D primo xor (a little from first)
5F xor 6B = 34 e abbiamo tolto 2 a 6D secondo xor(some more from 2nd)
34 xor 69 = 5A e abbiamo tolto 4 a 6D terzo xor (more again from 3rd)
rispettando cioè il fatto di togliere sempre un po di più.
quindi in questo caso abbiamo tolto 1, 2 e 4 da 6D:lo stesso risultato però si ottiene anche togliendo 1,3, e 5 da 6D o con 2,3, e 5.
io ho provato con questi valori per il momento,ma visto che nel rispondere a GabriPro il Que ha detto che il numero di combinazioni è molto limitato,si tratterà di immaginare che siano 4 o 5 al massimo.io ne ho già viste 3 come vedete.
Se lo stesso principio lo applichiamo anche ai valori da xorare con CD e 89 forse la soluzione la troviamo.si tratta di star lì a cercare tutte le combinazioni
e a combinarle tra loro ,eventualmente.forse un piccolo passo avanti......
per CD ho trovato 1-3-4 1-2-5
per 6D ho trovato 1-2-4 1-3-5 2-3-5
per 89 ho trovato 1-2-3 1-4-5 1-6-7
mi sembra che no ce ne siano altre,ma ....proverò a vedere.basterà poi incrociare queste nello script,togliendo gli opportuni valori ogni volta che si esegue lo xor.così per esempio se voglio usare per CD 1-2-5,per 6D 1-3-5, e per 89 1-6-7 nello script dove ci sono i valori A= ord('\xxx),inserirò:
A= ord('\xCC') B=ord ('\x6C') C=ord ('\x88') e ho tolto 1 e xorato la prima volta: rinomino il file di out ottenuto e lo xoro la seconda volta cambiando nello script A,B,C con CD-2=CB , 6D-3=6A, 89-6= 83 ,stessa storia di prima ,rinomino il file di out e proseguo con i valori restanti.le combinazioni sono 18 da provare.
 
Ultima modifica:
in che senso? si che puoi rinominare. il tuo script crea un file di uscita col nome che ti pare.ma per riusarlo senza cambiare il percorso del file di out,rinomina il file nel nome di quello d'uscita dello script senza cambiare il nome nello script.
o come vuoi era solo per velocizzare questo.
Però a parte tutto questo c'è sempre 1F a offset 50 0E,e nessuno di questi valori va bene per ottenere 6E la lettera n di cannot ..........be run in DOS mode.
sto ancora cercando.... sto fatto.
no so se tra uno XOR e l'altro ci sia da togliere qualcosa per esempio......Mah.
P.l.e.c.u.e. .k.r.t.k.v. .g.r. .o.r.t.k.k.g.v.2...P.l.g.g.w.g. .e.n.t.e.r. .a. .r.u.o.f.e.r.2...P.l.e.c.u.e. .k.r.t.k.v. .g.r. .o.r.t.k.k.g.v. .b.k.t.y.k.e.n.
P.l.e.a.s.e. .e.n.t.e.r. .a.n. .i.n.t.e.g.e.r.....P.l.e.a.s.e. .e.n.t.e.r. .a. .n.u.m.b.e.r...*.P.l.e.a.s.e. .e.n.t.e.r. .a.n. .i.n.t.e.g.e.r. .b.e.t.w.e.e.n
0 0 0 2 2 0 0 4 4 0 4 4 0 6 4 0 6 4 0 6 4 2 4 4 0 0 0 2 6 4 2 0 0 0 0 0 0 0 0 0 4 0 2 4 0 0 4 ? 0 0 0 2 2 0 0 4 4 0 4 4 0 6 4 0 6 4 0 6 4 2 4 0 0 6 0 2 6 0 0
La stringa di numeri corrisponde alla differenza che bisogna contare per ottenere la frase esatta( asciitable).Cercavo di vedere se c'era una sequenza ripetibile,ma nulla per il momento..questa frase è verso la fine ,quella esatta è del level1.mah...
 
il file in output viene scritto byte alla volta, se rinominassi il file non sarebbe più completo... se intendevi invece ripetere tutto il ciclo diverse volte con ciascun valore allora penso che sia quasi più veloce farlo a mano, oppure fare con calcolatrice, piuttosto che creare innumerevoli files per tentativi
 
Ultima modifica:
beh.a parte il fatto di provare tutte le combinazioni,non riesco a capire cosa vuoi dire con "se rinominassi il file non sarebbe più completo".io intendevo il file che ti dà lo script una volta lanciato;se lo rinomini che cambia? il file rimane identico,cambia solo il nome.
ho pure capito che basterebbero 3 bytes del file (anche 1 solo quel 1F)per provare ma come hai visto se provi a offset diversi multipli di 3 che cioè si xorano (si presume) con lo stesso valore la stessa differenza per entrambi non va bene.quell' 1F ne è un esempio.
la struttura del PE per intero ,però non la conosco bene neanch'io.però sto vedendo questo adesso:
http://www.microsoft.com/whdc/system/platform/firmware/PECOFF.mspx
dove c'è il PE Header la scritta PE in ASCII,
i primi 4 bytes sono il PE Header stesso, 50 45 00 00 poi comincia all'offset 0
il COFF file Header
2 byte 4C 01 (vanno letti in ordine inverso,così anche per gli altri-little endian)
The number that identifies the type of target machine. For more information, see section 3.3.1, "Machine Types."
offset 2:
The number of sections. This indicates the size of the section table, which immediately follows the headers.
04 00
The low 32 bits of the number of seconds since 00:00 January 1, 1970 (a C run-time time_t value), that indicates when the file was created.
offset 4 (4bytes)
8B A7 C9 42 (nel mio caso dopo uno xoramento) i secondi dal 1970 1 gennai
offset 8 (4bytes)
00 00 00 00
The file offset of the COFF symbol table, or zero if no COFF symbol table is present. This value should be zero for an image because COFF debugging information is deprecated.
offsset 12(4 bytes)
00 00 00 00
The number of entries in the symbol table. This data can be used to locate the string table, which immediately follows the symbol table. This value should be zero for an image because COFF debugging information is deprecated.
offset 16(2 bytes)
E0 00
The size of the optional header, which is required for executable files but not for object files. This value should be zero for an object file. For a description of the header format, see section 3.4, "Optional Header (Image Only)."
offset 18(2 bytes)
11 01<-- applicazione di Win32 non valida(è uno dei motivi per cui non va
e dà errore quando lo lanci in effetti è a 16 bit )The flags that indicate the attributes of the file. For specific flag values, see section 3.3.2, "Characteristics." <------IMAGE_FILE_32BIT_MACHINE
0x010 valore
Machine is based on a 32-bit-word architecture.
negli altri "win32.exe" il valore è 0F 01 o 0E 01,ma non è sufficente a farlo partire,(IAT a parte,relocazioni a parte,)c'è qualcos'altro.beh...... vedremo.
comunque..... se non troviamo l'erre.......penso che addentrarsi troppo nella giugla non porti a molto.la soluzione non deve essere troppo complicata,ma ovviamente bisogna conoscere quel "poco" che ci porti verso la fine,e questo "poco" non l'abbiamo ancora capito o trovato.Ciao.
pur essendo lo XOR un 'operazione facile da capire ,risulta essere una tra le più invulnerabili,quando usata
come in questo caso per criptare un programma,questo perchè all'origine
dello xor visto , confronto fatto bit a bit , non si potrà mai stabilire chi dei 2 guardiani dice il vero o il falso,e lo stesso risultato (0 ) è prodotto da due
verità 1 xor 1 o da due falsi 0 xor 0 .ho parecchi programmi(se volete ve li uploado su megaupload) XOrIT,CryptiT,XoRDecrypter (con uno script che confronta
tutte le possibili combinazioni con i 255 caratteri Ascii):nessuno di questi mi ha fornito la soluzione(a meno che il que oltre allo xor non abbia fatto qualche altra operazione beh....allora ).ci sono anche siti tipo questo se volete provare:
PS: se v'interessa "craccare" i giochi protetti con ActiveMark( Trygames,GameHouse,AOLgames),o HP & WildTangentGames,AlawarGames,Zylomgames,ReflexiveGames, e tutti i giochi protetti con Armadillo (MSNgames,IPlay,OberonMedia,Pogo,ShocKwave,Playfirst,Gamefools,IWin etc.etc) sono a vs disposizione.ovviamente usando OllyDbg,Imprec,ArmInLine,LordPe e qualche altro tool. é molto facile .
 
Ultima modifica:
Ciao.Ancora sul level6.Daniele se sei sintonizzato prova a guardare qui:
c'è un programma che si chiama XOR-Analyze,ma sembra che in Win XP non si possa vedere un out di risposta.io ho scaricato i binari per XP,ma la versione originale è per Linux.in XP si puuò eseguire dalla command-line con questa sintassi:
xor-analyze -l -k3 ts.exe (se digiti /? dopo xor-analyze vedi la guida in xp).
potresti provare a vedere se funziona xorando Level6 con CD 6D 89, poi da
questo selezioni la frase criptata "This program cannot be run ..........mode"
la copi in un nuovo file ,la salvi e gli dai exe come estensione in modo che
xor-analyze possa analizzarla.poi puoi prendere dal Level1 la frase esatta e fai
la stessa cosa.così hai due file exe di 38 byte l'uno.
questo xor-analyze ha dentro 3 programmi ,uno dei quali può confrontare un
file criptato con quello originale.Basta che gli dai il numero di byte della chiave
3 nel nostro caso e poi fai il confronto tra i due file.exe di 38 byte.io non ho
potuto vedere nulla come ti ripeto ,i comandi funzionano,ma non c'è uscita in XP e nel read.me c'è scritto che l'autore non ha finito di svilupparlo per Windows.se trovi novità mi sai dire.Grazie
è un altra idea.PS.non è detto che il risultato sia pieno di significato,ma vedi se ti fa capire di +.qui trovi spigazioni utili e puoi vedere come è usato:
 
allora, premettendo che il programma è un po' antiquato perchè per eseguirlo sono dovuto andare a cercare una libreria presente nei repo di dapper (parliamo di 3 anni fa), comunque non vedo perchè non dovrebbe funzionare...

allora...

Codice:
./xor-analyze -n -l -v '/home/daniele/Documenti/Level 6/level6origine.exe'
xor-analyze version 0.5 by Thomas Habets <[email protected]>
Counting coincidences... 20 / 20
Key length is probably 3 (or a factor of it)
Key length  Coincidents       Bytes    Coincidents (in percent)
         1            1  /     1000 =        0.10 %
         2            1  /     1000 =        0.10 %
         3          189  /     1000 =       18.90 % (winner)
         4            3  /     1000 =        0.30 %
         5            1  /     1000 =        0.10 %
         6          156  /     1000 =       15.60 %
         7            5  /     1000 =        0.50 %
         8            1  /     1000 =        0.10 %
         9          162  /     1000 =       16.20 %
        10            8  /     1000 =        0.80 %
        11            1  /     1000 =        0.10 %
        12          169  /     1000 =       16.90 %
        13            8  /     1000 =        0.80 %
        14            3  /     1000 =        0.30 %
        15          143  /     1000 =       14.30 %
        16           12  /     1000 =        1.20 %
        17            2  /     1000 =        0.20 %
        18          143  /     1000 =       14.30 %
        19           12  /     1000 =        1.20 %
        20            1  /     1000 =        0.10 %

a questo punto non ottengo niente di nuovo, infatti mi dice che la chiave (probabilmente) è di 3 caratteri... per andare avanti mi chiede di fornire un file .req che onestamente non capisco che sia...

il programma per confrontare sinceramente non lo trovo, io ne vedo tre: uno per criptare, uno per decriptare e uno per analizzare... se magari mi addassi su msn o su skype (trovi tutto nel mio profilo) ci potremmo sentire meglio, altrimenti ogni volta a scrivere qua sul forum non mi accorgo della risposta
 
Stato
Discussione chiusa ad ulteriori risposte.