Algoritmo Wipe-Way
(proteggiamo i nostri dati)


Data

by "Quequero"

 

 

UIC's Home Page

Published by Quequero



In questo tute vi insegnerò a creare un algoritmo wipe-way, cosa? Non lo conoscete!!!!

 
UIC's form
Home page se presente: http://quequero.cjb.net  
E-mail: UIC@mail.usa.com UIC@bigfoot.com
#uic #crack-it
UIC's form

Difficoltà

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

 

Abbiamo tutti la necessità di dover proteggere i nostri dati ed in particolar modo i gestori di sistemi informatici, bene adesso imparerete come proteggere i vostri dati....cancellati.


Algoritmo Wipe-Way
(proteggiamo i nostri dati)
Written by Quequero

Introduzione

Lo so che non conoscete gli algoritmi wipe-way ma è ora di presentarli :)

Tools usati

TASM 5.0

Essay

Salve a tutti, quest'oggi impareremo a creare un algoritmo di crittazione wipe-way, in realtà il termine mi è venuto in mente stanotte ma facciamo un brevissima digressione e vediamo che tipi di algoritmi esistono.
Il primo e più usato tipo di algoritmo è il Two-way cioè prendo un documento A, lo critto ed ottengo B se poi passo B sotto un filtro riottengo A e questo mi sembra abbastanza banale, critazione-decrittazione, poi c'è un altro tipo di algoritmo il One-way cioè, prendo A, lo critto ottenendo B e poi ci serve dio per riottenere A...In sostanza una volta crittato A non riotterrete mai l'originile, a cosa serve quest'ultimo? Semplice in genere viene usato per tenere le password, in un sistema durante il login l'utente inserisce una password, questa viene crittata con l'algo One-way e confrontata con quella (lo stesso crittata) contenuta nel file /etc/passwd, ma questi algoritmi vengono usati anche in altri modi, si adottano per cancellare i file, il perchè è presto detto, come sapete quando gettate un file nel cestino e poi lo eliminate bastano le norton utilities per recuperarlo, per questo prima di gettare un file lo si può crittare con un algo One-way in modo da renderlo indecifrabile anche una volta recuperato. In realtà non è tutto rosa e fiori perchè si può risalire, anche se con uno sforzo immane in tempi di calcolo e tempo, al file originale, semplicemente prendendo una massa enorme di dati, crittandola con quell'algo e poi confrontandola con il file recuperato, prima o poi otterrete qualcosa di uguale ed avrete il file in perfette condizioni. Ed è qui che Queuqero vi viene in aiuto, perchè con centomila semplici mosse :)))) creeremo un algo che critta i file in modo abbastanza casuale e poi cercheremo di capirne l'efficacia, seguitemi.
Io vi presento qui sotto l'algoritmo e non tutto un intero programma, il resto lo potete adattare voi secondo le vostre esigenze, io suppongo solo che nel buffer....."buffer" siano contenuti i byte di una eventuale password o di un eventuale file, vi spiegherò approfonditamente il funzionamento dell'algoritmo alla fine:
 
Random1    dd 5809172h
Random2    dd  5371h
 
.code
START:
        xor ecx, ecx
 
algo:
mov eax, Random1   
mul Random2                          
inc eax
mov ebx, dword ptr[buffer+ecx]
ror ebx, 4
shl ebx, 2
xor ebx, eax
ror ebx, 4
        shr ebx, 8
xor ebx, eax
        call GetTickCount
xor ebx, eax
mov eax, ebx
mul Random1
        xor ebx, eax
call GetTickCount
        xor ebx, eax
mul Random2
        xor ebx, eax
call GetTickCount
        ror eax, 3
shr eax, 4
        mov edx, eax
push edx
        call GetTickCount
pop edx
        add eax, edx
xor eax, edx
        xor ebx, eax
        mov dword ptr[buffer+ecx], ebx
add ecx, 4
;Qua ci dovete aggiungere un check per vedere le la pass o i byte nel buffer sono finiti
jmp algo
 
Eccomi, non vi preoccupate, vi commento tutto adess: all'inizio del codice ECX viene azzerato perchè usato come contatore, poi ci sono queste istruzioni:
 
mov eax, Random1   
mul Random2                          
inc eax
che servono a piazzare un numero casuale in EAX, poi:
 
mov ebx, dword ptr[buffer+ecx]
ror ebx, 4
shl ebx, 2
xor ebx, eax
ror ebx, 4
        shr ebx, 8
xor ebx, eax
 
vengono mossi in ebx i primi 4 byte della password o del file, vengono rotati a destra di 4, shiftati a sinistra di 2 e poi vengono xorati con il valore casuale che si trovava in EAX, il risultato viene di nuovo rotato a destra di 4 shiftato a sinistra di 8 e poi di nuovo xorato con EAX:
 
 
        call GetTickCount
xor ebx, eax
mov eax, ebx
mul Random1
        xor ebx, eax
call GetTickCount
        xor ebx, eax
mul Random2
        xor ebx, eax
call GetTickCount
        ror eax, 3
shr eax, 4
        mov edx, eax
push edx
 
ed adesso viene chiamata l'API GetTickCount che riporta in EAX i millisecondi da quando WinPorco è stato avviato (ed anche questa routine conferisce una casualità notevole), i byte vengono quindi xorati con questo valore, EAX viene poi ancora randomizzata con il primo algoritmo ed i byte vengono ancora xorati con questo valore random, viene chiamata di nuovo GetTickCount e quindi i byte vengono ancora xorati con EAX che viene di nuovo randomizzata e usata per xorare ancora i byte, poi si GetTickCount viene ancora chiamato ma il risultato stavolta viene randomizzato tramite dei ror e degli shift, quello che ne esce fuori viene messo in EDX che viene poi salvato:
 
 
        call GetTickCount
pop edx
        add eax, edx
xor eax, edx
        xor ebx, eax
        mov dword ptr[buffer+ecx], ebx
add ecx, 4
        ;Qui va il test
jmp algo
 
viene chiamata per l'ultima volta GetTickCount, viene ripreso il valore che stava in EDX e viene sommato a quello riportato da GetTickCount, la somma di questi valori viene quindi xorata con EDX ed il risultato xora poi i nostri cari byte che vengono rimessi a posto, il contatore viene incrisato di una DWORD e si ricomincia il loop finchè il file non è finito.
Hehe che bello, ho appena testato questo algo ed è davvero una meraviglia, dunque come facciamo a sapere se questo algoritmo è sicuro? Semplicissimo, bastano due calcoli, dunque.....ci sono in gioco ben sette numeri molto casuali, dunque, considerando che possono assumere valori da 00000000 a FFFFFFFF significa che bisognerebbe indovinare un numero che varia da 0 a 4.294.967.295, ottimo ci sono circa 4 miliardi di combinazioni possibili, tenendo conto del fatto che i numeri devono essere azzeccati tutti e sette perchè l'errore anche di un solo byte avrebbe risultati disastrosi sulla decrittazione, possiamo dire che è molto difficile indovinarli, considerando anche che ogni byte viene crittato con sette valori casuali diversi, heheheh, insomma, fatevi due calcoli e vedrete che anche crittando un file con solo tre lettere, i risultati di decrittazione sono davvero ma davvero lunghissimi, pensate solo per tranquillizzarvi che per ogni byte sono possibili 4.294.967.295 di combinazioni per sette volte, quindi elevate quel valore alla settima e vi renderete conto della sicurezza di quest'algo :)))
 
Ciauz e buona crittazione da Quequero
 
Mi raccomando non vi crittate l'hard disk :)
Note finali


Saluto tutti i miei amici di #UIC e #crack-it ciauzzzzzzzzzzzz :)))))

Disclaimer

Qui inserirete con questo carattere il vostro piccolo disclaimer, non è obbligatorio però è meglio per voi se c'è. Dovete scrivere qualcosa di simile a: 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   ContactMe   CrackMe   Links   
NewBies   News   Forum   Lezioni  
Tools   Tutorial 

UIC