7° Corso Newbies
KeyFile Sniffing


18/10/2000

by " Pincopall "

5/09/2000

 

UIC's Home Page

Published by Quequero


Se un programma è utile, dovrà essere cambiato.

Bravo pinco, buon tute, anche questo discretamente sintentico ma cmq ben spiegato

Se un programma è inutile dovrà essere documentato.

UIC's form
E-mail: pincopall90@hotmail.com
Pincopall on #crack-it, #hackmaniaci, #hackit99 (su www.ecn.org)
UIC's form

Difficoltà

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

 

La soluzione di questo corso consiste nello sniffare un keyfile, ovvero carpirne il nome ed il contenuto, i keyfile però non saranno uno solo ma 4, uno per ogni livello di difficoltà . 


7° Corso Newbies
KeyFile sniffing
Written by Pincopall

Introduzione

Allora, ecco la soluzione, o almeno la MIA soluzione al settimo corso per NewBies della UIC in attesa dello Strainer (Que sii buono!!!)

Tools usati

WDasm 8.93 --- Il disassemblatore

Filemon --- Il "monitoratore" :))

Hex WorkShop --- L' editor(e) esadecimale, potete usare il vostro preferito

Softice --- Il debugger

URL o FTP del programma

Lo trovate nel sito della uic, www.uic-spippolatori, nel caso non lo conosceste, (ma allora come fate ad essere a leggere questo tutorial??), comunque è nella sezione Lezioni, reparto NewBies, interno 7, citofonare AndreaGeddon ;-)) .

Notizie sul programma 

Allora, questo 7° corso è così articolato, ci sono quattro file check, ed ognuno dei quattro vuole un file diverso, con contenuto ovviamente diverso, quando il file è giusto ci appare la scritta "-REGISTERED-" , quando è sbagliato, un sacco di cose, a seconda di cosa è sbagliato, se il nome del keyfile, se il codice in esso contenuto, ecc...

Essay

LIVELLO 1

OK, allora, dopo esserci scaricati l' allegato, eccoci pronti ad affrontare la sfida propostaci da AndreaGeddon, bene, lo facciamo partire e vediamo quattro pulsanti con scritto KeyFile one, ecc.., ah, allora si parla di KeyFile, vabbè, Già me lo diceva il titolo :-), cmq, aprimao Filemon e vediamo di ke file o files si tratta, una volta aperto il Filemon, premiamo il primo pulsante, e vediamo ke il programma "Settimo" cerca il file "Keyfile.and" in c:, bene , kiudiamo (per ora) il Filemon e aprimao invece l'editor esadecimale , creiamo un nuovo file, ci mettiamo dentro un valore a caso di byte e salviamolo come Keyfile.and, ora il prog Settimo trova il file keyfile.and ma come vediamo ci dà sempre errore, perkè? ovviamente perkè il codice del file è sbagliato, come ci dice l'errore saltato fuori stavolta, andiamo dunque ad editare il nostro keyfile.and con l'editor esadecimale; ma.... ke ci dobbiamo mettere dentro? bene , guardiamo, allora, apriamo SoftIce com Ctrl+D e settiamo un bpx all'api CreateFileA come ci diceva anke il caro AndreaGeddon skiacciando il primo pulsante "info", bene, ora usciamo dal SIce con F5 e clikkiamo su "KeyFile one", ed ecco che il debugger salta fuori, premiamo una volta F12 ed eccoci qui:
  * Possible StringData Ref from Data Obj ->"C:\KeyFile.And"
                                  |
:0040158D               push 00404154

* Reference To: KERNEL32.CreateFileA, Ord:0031h
                                  |
:00401592                   Call dword ptr [004052AC]
:00401598                   mov dword ptr [ebp-3C], eax
:0040159B                   cmp dword ptr [ebp-3C], FFFFFFFF
:0040159F                   je 00401661  ------- Se il file non è presente salta ad errore 
:004015A5                   push 00000000
:004015A7                   mov eax, dword ptr [ebp-3C]
:004015AA                   push eax

* Reference To: KERNEL32.GetFileSize, Ord:00EDh
                                  |
:004015AB            Call dword ptr [004052A8]
:004015B1            mov dword ptr [ebp+FFFFFF54], eax
:004015B7            cmp dword ptr [ebp+FFFFFF54], FFFFFFFF
:004015BE            je 0040164F---- Se salta compare la stringa "Errore nel filesize"
:004015C4            push 00000000
:004015C6            lea ecx, dword ptr [ebp+FFFFFF58]
:004015CC            push ecx
:004015CD            mov edx, dword ptr [ebp+FFFFFF54]
:004015D3            push edx
:004015D4            lea eax, dword ptr [ebp+FFFFFF60]
:004015DA            push eax
:004015DB            mov ecx, dword ptr [ebp-3C]
:004015DE            push ecx

* Reference To: KERNEL32.ReadFile, Ord:01D6h
                                  |
:004015DF             Call dword ptr [004052A4]
:004015E5             test eax, eax ----- Controlla ke il keyfile non sia vuoto ...
:004015E7             je 0040163D   ----- .... se lo è salta ad errore 
:004015E9             cmp dword ptr [ebp+FFFFFF58], 00000000
:004015F0             je 0040163D
:004015F2             mov edx, dword ptr [ebp+FFFFFF58]
:004015F8             mov byte ptr [ebp+edx-000000A0], 00
:00401600             xor ecx, ecx
:00401602             lea esi, dword ptr [ebp+ecx-000000A0]-- muove in esi il nostro codice
:00401609             lea edi, dword ptr [ebp+ecx-00000038]-- muove in edi il giusto codice
:00401610             mov ecx, 0000002B
:00401615             repz
:00401616             cmpsb 
:00401617             je 0040162B --- Salta se sono uguali, sennò.....

* Possible StringData Ref from Data Obj ->" Codice sbagliato"
                                  |
:00401619          push 00404140
:0040161E          lea ecx, dword ptr [ebp+FFFFFF5C]

Come vedete dunque, in edi c'è il giusto codice, o meglio la giusta stringa che deve contenere il nostro keyfile, andiamo dunque nell'editor esadecimale e scriviamo la stringa che troviamo facendo "d edi" e ke è : "LaFolliaGovernaIlventoCheScendeDalleStelle" , salviamo il file, e clikkiamo di nuovo sul pulsante , Sice popperà di nuovo (se non avete disabilitao i Bp con "bc*") e nella finestrella di fianco troveremo la stringa "-REGISTERED-". EVVAI meno uno !!

LIVELLO 2

Okkei, eccoci dunque al secondo livello, AndreaGeddon ci dice che è un po' come il primo, solo ke stavolta ci sono un po' più di calcoli da fare, bene, partiamo, rifacciamo partire FileMon e vediamo ke, clikkando il pulsante "KeyFile Two" questa volta il proggy cerca il file andrewz.uic nella dir di Windowz, bene, andiamo nell'editor esadecimale e creiamoci il nostro bel file andrewz.uic salvandolo nella dir di Win. Anke stavolta mettiamo un bpx createfilea nel SoftIce e dopo aver clikkato sul pulsante ecco ke salta fuori il nostro debuggerino ke ci porta all'indirizzo 00401771, bene ma guargate un po' cosa c'è un po' più sopra, ci sono un mucchio di spostamenti di byte ke vi riporto qui:

:004016F8            sub esp, 00000088
:004016FE            push ebx
:004016FF            push esi
:00401700            push edi
:00401701            mov dword ptr [ebp+FFFFFF6C], ecx
:00401707            mov [ebp-1C], DF
:0040170B            mov [ebp-1B], C3
:0040170F            mov [ebp-1A], C9
:00401713            mov [ebp-19], F8
:00401717            mov [ebp-18], FF
:0040171B            mov [ebp-17], E6
:0040171F            mov [ebp-16], EF
:00401723            mov [ebp-15], F0
:00401727            mov [ebp-14], CC
:0040172B            mov [ebp-13], C5
:0040172F            mov [ebp-12], D8
:00401733            mov [ebp-11], CF
:00401737            mov [ebp-10], DC
:0040173B            mov [ebp-0F], CF
:0040173F            mov [ebp-0E], D8
:00401743            xor eax, eax
:00401745            mov byte ptr [ebp-0D], al
:00401748            lea ecx, dword ptr [ebp+FFFFFF78]

Come vedete i byte "toccati" sono 16, da "ebp-0D" in cui viene mosso 00 (ke è il valore di al dopo xor eax, eax) a "ebp-1C" in cui viene mosso DF, tali byte, proviamo a metterli nel keyfile, ci accorgiamo però ke non vanno bene, perkè? perkè come si può vedere sotto, questi vengono ancora manipolati, in ebp+ecx-00000084 c'è il codice da noi inserito:

:004017D7           mov byte ptr [ebp+eax-00000084], 00
:004017DF          xor ecx, ecx --- viene azzerato ecx che sarà usato come contatore
:004017E1          xor eax, eax --- viene azzerato eax
:004017E3          mov al, byte ptr [ebp+ecx-00000084] --- viene mosso in al un carattere
:004017EA          cmp al, 00 --- viene confrontato con zero
:004017EC          je 004017FC --- se è zero salta sennò...
:004017EE          xor al, AA --- viene xorato col valore AAh=170
:004017F0          mov byte ptr [ebp+ecx-00000084], al --- viene rimesso dov'era
:004017F7          inc ecx --- viene incrementato il contatore
:004017F8          xor eax, eax --- viene azzerato di nuovo eax
:004017FA          jmp 004017E1 --- ricomincia il ciclo finkè al=00
Ogni byte di quelli da noi inserito, è stato dunque manipolato, e se avevate messo quei byte ke vi ho fatto vedere all'inizio, ora avremo la frase "uicRULEZforever" e, come vediamo dal confronto dei byte ke fa all'adress 0040181A, il salto salta :) e ci viene la scritta "-REGISTERED-" . E DUE!!

LIVELLO 3

Qui nella sezione "info" Andrew ci dice di non fidarci di Filemon, che stavolta bisogna stare attentia dove si mette il file (oltre ke a quello ke ci si mette nel file), vabbè, noi lanciamo Filemon e vediamo ke il prog " settimo" cerca un file chiamato "avelletri.fra", ma ke lo cerca nella directory in cui abbiamo messo il programma (nel mio caso c:\pinco\corsi), in c:\windows\system, in c:\windows\system32, in c:\windows\command ed in c:\windows, bene, proviamo a mettere il nostro file in c:\pinco\corsi, dopo averlo ovviamente creato con l'editor esadecimale (ma non serve ke ve lo dica più no?), e vediamo ke , pigiando il pulsante "Keyfile three" il proggy mi dice: "Errore nell'apertura del keyfile", mannaggia, come mai? bene , stavolta usiamo il WDasm, e cerchiamo tale stringa che troveremo nella finestra "String Data References", è la stringa con la parola "keyfile" scritta con la "k" minuscola. Ora che ci siamo, guardiamo in alto e vediamo la API a cui brekkare, ovvero GetSystemDirectory, dunque entriamo in SIce (^D) e mettiamo un bpx su quell'API; ma prima di fare questo, notiamo ancora un po' in alto, una scritta , e quella è la stringa da inserire nel nostro keyfile, ovvero "La mia mente controlla la mia realtà", e se andate a vedere anke per gli altri livelli, troverete lo stesso la stringa lì pronta ad aspettare di essere carpita da voi, mettiamo dunque la stringa nel keyfile e cerkiamo ora di capire dove è ke va messo 'sto keyfile:

Questa è la sintassi dell'API GetSystemDirectory:

UINT GetSystemDirectory(

    LPTSTR lpBuffer,	// address of buffer for system directory 
    UINT uSize 	// size of directory buffer 
   );

  

Ecco il codice prima di GetSystemDirectory allora:

:00401929             push 00000104
:0040192E             lea eax, dword ptr [ebp+FFFFFEC8]
:00401934             push eax

* Reference To: KERNEL32.GetSystemDirectoryA, Ord:0131h
                                  |
:00401935            Call dword ptr [004052B4]
:0040193B            push 00000000

Guardiamo allora cosa viene pushato all'adress 00401934, lì si ha infatti un push eax, e facendo "d eax" si trova "C:\Windows\system", il file avelletri.fra, contenente la stringa "La mia mente controlla la mia realtà va dunque messo lì dentro. Ah, se mettevate il file con dentro la stringa giusta in un 'altra dir veniva fuorti la scritta "Te l'avevo detto di non fidarti di Filemon"

EVVAI ANKE IL TERZO E' FINITO!!

LIVELLO 4

Dunque eccoci al quarto livello, avviamo di nuovo Filemon e vediamo ke cerca il file papero.que, e ke mi dice ke l'ha trovato, cosa? l'ha trovato ? ma io non l'ho creato, già ma il programma lo crea da solo come si pigia il pulsante e mi dice "codice sbagliato", bene allora, andiamolo a vedere 'sto codice. Mettiamo nel file una stringa a caso tipo 123456789 e vediamo usando Sice che succede, anke se AndreaGeddon stavolta mi dice ke è un po' più difficile seguire il programma sotto SIce...dunque, metto un bpx su CreateFileA, esco dal Sice con F5, e clikko sul quarto pulsante, SoftIce poppa e premo F12 pensando di ritrovarmi ,come prima, subito in "Settimo" , ed invece sorpresa delle sorprese, mi ritrovo in MSVCRT prima ed in MSVCIRT per due volte dopo, prima di arrivare in Settimo, bene, ecco a kosa sono:

 
:00401BB0        Call dword ptr [00405444]
:00401BB6        lea edx, dword ptr [esp+08]
:00401BBA        lea ecx, dword ptr [esp+0C]
:00401BBE        push edx

* Reference To: MSVCIRT.??5istream@@QAEAAV0@AAH@Z, Ord:0076h
                                  |
:00401BBF        Call dword ptr [00405440]
:00401BC5        lea ecx, dword ptr [esp+0C]

* Reference To: MSVCIRT.?close@fstream@@QAEXXZ, Ord:00FEh
                                  |
:00401BC9     Call dword ptr [00405448]
:00401BCF     cmp dword ptr [esp+08], 08311809
:00401BD7     jne 00401BE0
:00401BD9     push 0040412C
:00401BDE     jmp 00401BE5

Bene dunque , quello ke attira la mia attenzione è quel compare seguito da un jump condizionale ke se non salta mi fa andare alla risposta "-REGISTERED-", e per vederlo basta vedere il contenuto della locazione 0040412C ke viene pushata se il salto non salta :-) ; dunque mi viene un sospetto, ovvero, ke verròà confrontato in quel compare??? faccio un "? 08311809" tanto per vedere il valore in decimale di questo numero e vedo ke è 0137435145, wow, piccolino eh!, allora guardo con cosa confronta sto numerone e faccio "d esp+08" e trovo ke la prima DWord in esso contenuta è 075BCD15, ma guardiamo questo in decimale a ke numero corrisponde... facciamo "? 075BCD15" e voilà il numero è 0123456789 ovvero il mio codice, dunque se il valore esadecimale del mio codice deve essere 8311809, vuoi vedere ke il mio codice deve proprio essere 137435145?? Bene, mettiamo questa stringa nel nostro keyfile papero.que, salviamo, incrociamo le dita, clikkiamo ed eccola lì, appare la stringa "-REGISTERED-". EVVAIIIII AVEMO FINITOOO !!!

Okkey that's the end guyzzz

Se vedemu alla prossima (oppure allo SMAU, se c bekkiamo ;-))

Pincopall

Note finali

Okkey, allora ringrazio AndreaGeddon per avermi dato una frase su cui mettermi a pensare stasera prima di addormentari ovvero:"La Follia Governa Il Vento Che Scende Dalle Stelle" ;-)

Un saluto a tutta la ML,a tutti quelli del canale #crack-it e #hackit99 ed un particolare saluto al mio amico C1CC10 con il quale, insieme a Nio e B3bos , ke saluto , stò fondando l'hacklab della mia città :-)), Ciauzzzz ci vediamo allo SMAU!!

Disclaimer

Vi ricordo 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: all'interno del tutorial non ho mai menzionato nulla che possa istigarvi ad utilizzare impropriamente quanto imparato. 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.