Menu

Dongle: primi passi by Furb3T

---------> Furb3T<---------

presenta:

Dongle: primi passi.


Attenzione : il materiale che trovatein questo tutorial è a puro scopo didattico.


    Cari studenti, oggi affronteremo un tipo diprotezione che ultimamente va per la maggiore: la chiave hardware, in inglese Dongle.Questa protezione consiste in un plug che si inserisce nella porta parallela del computerdove dovrebbe girare quel determinato programma; questo non fa altro che verificare se èinserita questa chiave nella porta ( I problema da superare), dopodichè passerà ilcontrollo alla chiave che verificherà alcuni requisiti ( II problema da superare). Avretecapito, quindi, che per i nostri scopi, in primo luogo bisognerà far vedere al prg lachiave hardware e in secondo luogo dovremmo capire qual è lo schema di protezione cheviene elaborato nella chiave per superare quest'altro scoglio. Vorrei fare alcuneprecisazioni: esistono diversi tipi di chiavi hw, nel momento in cui riconoscete ilmomento vi suggerisco di andare nel sito dei costruttori di quella chiave e leggere lecaratteristiche, ciò vi aiuterà nell'affrontare meglio il problema; altra precisazione:le chiavi hw possono essere delle cose facilissime da bypassare, ma non tutte sono cosìanzi alcune di queste potrebbero svolgere alcune routine del prg, ed in questo casosarebbe difficile ricostruire tutta la routine, ma il nostro motto è non scoraggiarsimai, anzi è proprio dalle difficoltà che si matura e si trovano nuove strade da percorrere.

    Iniziamo a muoverci!!! Il prg ( molto semplice) che ho preso come riferimento è CpsWin32 versione 1.15,  e lo strumento che utilizzeremo è come al solito Softice. Lanciate il prg e noterete subitoche compare una MessageBox che vi dice che non avete la Chiave!!! Qualcuno di voi subitoavrà pensato di settare un Bpx MessageBoxA, e l'idea non sarebbe malvagia; tuttavia, noidobbiamo risolvere i 2 problemi che ho descritto sopra, e settare un Bpx MessageBoxA ciporterebbe troppo avanti nel codice da analizzare. Il nostro interesse è per prima cosaindividuare il punto dove viene vista la presenza della chiave, a tal fine dobbiamosettare Bpio -h 378 rw. Bpiovuol dire break point input output settato sulla porta 378 che di solito è la portaparallela (altre volte la porta parallela potrebbe essere la 278). Lanciate il prge....voilà siete dentro Sice ed esattamente vi troverete all'interno di Sc32w.dll .Disabilitate il Bpio ( Bd *) e premete F12 per ritornare alla call che chiama la dll.Arriverete a questo punto:

00419082 CALL 0056859B ----> chiama la dll e probabilmente inizializza la
00419087 MOV DWORD PTR [EBP-1C], AX   chiave. Osservate come nelle
0041908B MOV EDX, DWORD PTR [EBP-1C]
istruzioni cheseguono il valore di
0041908E AND EDX, 0000FFFF
  EDX venga variatofino a diventare = FFFF, ciò
00419094 TEST EDX,EDX
  dovrebbe far pensareche il JZ non dovrebbe essere
00419096 JZ 004190C5 
rilevante ai nostrifini.

  Continuiamoquindi a steppare per vedere cosa succede e se le nostre intuizioni erano giuste:

004190C5 MOV DWORD PTR [0075F5F4], 0000
004190E2 XOR EDX,EDX
---> EDX viene azzerato (Possibileinizializzazione?)
004190E4 MOV DX, DWORD PTR [0075F5F4]
---> Muove la flag aDx
004190EB CMP EDX, DWORD PTR [EBP-18]
---> Cosa è EBP-18?
004190EE JGE 00419159 ---> jump importante

    Se andiamo a vedere il valore di EBP-18, ( DEBP-18) vediamo che questo è 5; probabilmente nel check che è stato fatto dallaprecendente call è stato rilevato che non c'è la chiave hw e il risultato di questoerrore (5) è stato messo in EBP-18. Provate a editare la flag di EBP-18 e al posto di 5mettete 0 ( 0 perchè è il valore che viene attribuito a EDX), in questo modo avverrà ilJGE ma ancora non avremo finito di operare: rimane da risolvere il II problema.Procediamo:

00419159 MOV DWORD PTR [0075F5F4], 003F ---> 3F è di solito l'ammontare di dati da leggere nella chiave,quindi le nostre ipotesi precedenti erano giuste!!! :)
00419162 PUSH 0075F1E8
00419167 MOV DX, DWORD PTR [0075F5F4]
00419174 CALL 00568595
--> questa call dovrebbe leggere idati dalla chiave
00419179 MOV DWORD PTR [EBP-1C], AX
--> i dati da Axvengono memorizzati in [Ebp-1C]
0041917D MOV DWORD PTR [0075F5F4], 0005
00419186 XOR EAX,EAX
---> inizializza Eax
00419188 MOV AX, DWORD PTR [0075F1E8] ---> Ax = FFFF
0041918E XOR ECX,ECX ---> inizializza Ecx
00419190 MOV CX, DWORD PTR [0075F5F4]
00419197 XOR EDX,EDX ---> inizializza Edx
00419199 MOV DX, DWORD PTR [EBP+2*ECX-28] ---> Dx = 5460h
0041919E CMP EAX,EDX
---> compara Eax a Edx
004191A0 JZ 004191CC ---> Altro jump importante.

    Che fortuna!!! il prg compara Eax con Edx,dove Eax riporta l'errore (FFFF) mentre Edx riporta il valore esatto (5460). A questopunto basterebbe cambiare la flag a Eax portandola = 5460 per ottenere il jump che abilitail prg. Provare per Credere!!!!

Ringraziamenti : A tutto il  mio gruppo preferito RingZer0.


Top: Sicurezza su Internet - Back
Previous: Da Time limit a Registrato by Furb3T - Up: Sicurezza su Internet - Next: Reversing di un programma Visual Basic 5

This page last updated: Friday 08 November 2002 at 3:58pm

Please send any comments on this page to Astalalista.

Labelled with ICRA

This page is powered by Copyright Button(TM).
Click here to read how this page is protected by copyright laws.

Use this button to
NOT browser button


begin banner Exchange zone

Member of BannerPower Rotation System

Home Main Portal Translate Tell A Friend Create Page Create Site Search Site Search WWW E-mail Login Insert A Link Free for All Free Dating Forum disabled-come soon Guestbook Links Vote For Us disabled-come soon Beaded Necklace | Jewelry Directory | Map of Jersey City | Mrs. Pacman Game | Shades