MapInfo 4.1.2
(Secchiamo 'sta Dongle di Sentinel)


26/12/99

by "AndreaGeddon "

 

 

UIC's Home Page

Published by Quequero


Se Que ha scritto il primo tute su una dongle...
Il tute probabilmente pi� commentato da me :)...L'ho riempito di kazzate, cmq bravo Andrea, un ottimo tute su un altro dongle Sentinel, che non ci crederai ma � addirittura peggio implementato di quello del 3D Studio.....Pazienza, tanto noi i tute ce li facciamo lo stesso e i dongle so sempre carini da crackare, magari appena finisco di reversare i driver della tastiera inizio il terzo capitolo sui dongle parlando di qualche hasp (sempre se trovo un programma che la usi) cos� tu poi fai il quarto? Okkei? :)))) Ciauzzzzzz....Ah, ogni tanto scaricati il form della UIC aggiornato :))))
... io scrivo il secondo!!!!
UIC's form
Home page: www.andreageddon.8m.com 
E-mail: [email protected]
UIC's form

Difficolt�

( )NewBies (x)Intermedio ( )Avanzato ( )Master

 

Con questo tute andremo ad eliminare la dongle di MapInfo, che � protetto con Sentinel 5.1


MapInfo 4.1.2
(Secchiamo 'sta Dongle di Sentinel)
Written by AndreaGeddon

Introduzione

Che dire... un bel programma, con una sentinella di guardia... uccidiamola!

Tools usati

SoftIce
WinDasm  (se avete IDA o HIEW � meglio, vi spiegher� poi il perch�)

URL o FTP del programma

Me lo ha passato unn amico, non so dove lo si pu� trovare.

Notizie sul programma 

Il programma � MapInfo versionne 4.1.2 italiana. Serve per lavorare sulle mappe, e da quel poco che ho visto mi sembra davvero un ottimo programma. Se frugate nelle directory del programma ne troverete una che si chiama sentinel, se guardate il file doc in questa directory vi dir� anche la versione :-). Cos� sappiamo da subito con chi abbiamo a che fare.

Essay

Iniziamo. Se eseguite il programma vedrete che all'avvio compare il form MDI principale dell'applicazione ma ivece di attivarsi compare una messagebox che vi chiede di inserire la dongle. Ho tentato l'attacco con il vecchio caro bpio -h 378 per monitorizzare gli accessi alla parallela, ma non ho concluso niente. Allora seguendo le indicazioni di Quequero ho breakato su MessagBoxA, e da l� inizia la nostra analisi. Innanzitutto noterete subito che con F12 non tornate al codice dell'eseguibile (Mapinfow.exe) ma tornate nella libreria MILIB412.DLL. Precisamente vi ritroverete alla linea 1C015D16. Se provate a steppare dopo vengono chiamate tre call, e alla terza call il programma termina. Dopo la terza call c'� un RET, ma se provate ad eseguirlo saltando le call incapperete in un page fault. Il nostro obiettivo � di capire da dove viene chiamata questa routine della DLL dal file eseguibile. Visto che non possiamo usufruire del RET, andiamo in WDasm e disassembliamo MILIB412.DLL. Fatto? Proseguiamo. Allora, innanzitutto portiamoci alla riga 1C015D16, che � quella con la call a messageboxa. Cosa dobbiamo fare? Semplice. Se questa routine viene chiamata dal MAPINFOW.exe, deve essere per forza definita come una funzione esportata. Allora, dalla riga in cui ci troviamo iniziamo a risalire, risalire, osservate le varie reference, ed arrivamo alla linea 1C015C60. Proprio sopra questa riga c'� la scritta:

Exported fn(): ordinal 0265 - Ord:0265h

Quindi questo � l'inizio della routine. Se osservate bene il codice potete notare che in questa routine non ci si pu� arrivare da altri jump o call. Notate anche la string reference "System error" che i programmatori ci hanno gentilmente lasciato :-).

Comunque, adesso sappiamo che la funzione che contiene la routine di errore � la 0265. Ricordatelo. Adesso possiamo anche mettere da parte MILIB412.DLL, e andiamo a disassemblare MAPINFOW.EXE. Fatevi un giretto, e quando tornerete forse lo troverete disassemblato. Per evitare questa trafila vi consiglio di salvarlo come testo disassemblato. Andiamo subito subito a cercare tra le imported function, e cerchiamo quelle importate dal file MILIB412 (ma vaaaaaa). Abbiamo la lista di tutte le funzioni chiamate, ma noi cerchiamo la 0265. Trovata? bene, ora cliccateci sopra due volte e vedrete che viene chiamata solo dalla linea 005E3B82.

Eccovi un p� di righe:

 

* Referenced by a CALL at Addresses:

|:0044A03E , :00546D32 , :005E08F2 , :005ED4D3

|

:005EB340    lea eax, dword ptr [esp+08]      qui inizia questa routine di merda

:005EB344    mov ecx, dword ptr [esp+04]

:005EB348    sub esp, 00000100

:005EB34E    cmp word ptr [00617914], 0000

:005EB356    push eax

:005EB357    push ecx

:005EB358    nop                                     ma che ci fanno due nop soli soletti qui?

:005EB359    nop                                     se avete IDA o HIEW non li vedrete...

:005EB35A    lea edx, dword ptr [esp+08]

:005EB35E    push edx

:005EB35F    Call dword ptr [006290CC]    MSVCRT40.vsprintf

:005EB365    lea ecx, dword ptr [esp+0C]

:005EB369    add esp, 0000000C

:005EB36C    push 00000000

:005EB36E    push ecx

:005EB36F    push 00000605

:005EB374    push 00000004

:005EB376    call 005DFBF0

:005EB37B    add esp, 00000110

:005EB381    ret                                  che bel RET...

* Reference To: MILIB412.Ordinal:0265, Ord:0265h

|

:005EB382 E823B70100 Call 00606AAA                qui � dove arriviamo

:005EB387 81C408010000 add esp, 00000108

:005EB38D C3 ret

 

Allora, la cosa che si potrebbe tentare di fare � di non far mai eseguire la call a MILIB412:ord0265. Se guardate bene, avrete notato che COMUNQUE le tre righe di codice che chiamano MILIB412:ord0265 non vengono mai eseguite. E come ci si arriva qui? Da dove? E qui entrano in gioco i due nop che se ne stanno da soli... � ora di tornare al SoftIce. Visto che questo � l'unico punto innn (hai scritto "in" con tre "n" complimenti, questo rimane come reperto museale :) NdQuequero cui viene chiamata la routine di errore, DEVE essere eseguito per forza, nonostante le cazzate che dice il WDasm. Allora settiamo un bpx 0177:005EB382 tanto per cominciare. Lanciamo il SoftIce... POP! Eccoci qua. Siamo alla riga 005EB382. Da dove ci saremo arrivati mai???? Torniamo un p� pi� su a vedere i due nop... alla riga 005EB358 cavolo, non ci sono pi�, ma al loro posto c'� un bel jump condizionato che va proprio a finire su 005EB382. Se avete usato il disassemblato di IDA o di HIEW lo avrete visto gi� dall'inizio, quindi non c'� nessuna sorpresa. Questo commento su dei nop fantasmi serve solo per nonn (ma allora � un vizio! :) NdQuequero far perdere anche a voi tutto il tempo che ci ho perso io perch� non me ne ero accorto che WDasm scazza. Vabb�, andiamo oltre. Adesso anche cos� non possiamo fare niente per sfuggire all'inevitabile MessageBox di errore. Continuiamo a tracciare indietro le call. Questa funzione viene chiamata da quattro posti diversi, quindi vediamo quale � quello che ci interessa. Per farlo breakate su 005EB340, eseguite le varie call tranne quella a MILIB412, senn� il programma terminer�. Potete saltarla cambiando l'indirizzo di EIP in modo che punti all'istruzione successiva quando vi trovate sulla call a MILIB412. Eseguite il RET e tronerete alla riga 0044A03E. Poco importa se adesso cadrete in un page fault, l'importante � che sappiamo da dove veniamo!!!

Eccovi un altro p� di codice per la riga 0044A03E:

 

 

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:

|:00407A34(U), :00515A21(U), :00527274(U), :00527303(U), :00569404(U)

|:00569471(U), :0057241F(U), :005E56F9(U)    ---> miiii che so mo queste???

|

:0044A030    mov eax, dword ptr [esp+04]

:0044A034    push eax

:0044A035    call 005E9B40          viene chiamata una routine che carica il testo della message box

:0044A03A    add esp, 00000004

:0044A03D    push eax

:0044A03E    call 005EB340          qui � dove arriviamo, ovviamente non va avanti perch� il prog termina

:0044A043    add esp, 00000004

:0044A046    xor eax, eax

:0044A048    ret

 

Bene, ancora niente. Cacchio! Ma non finir� mai? Anche qui non sembra esserci modo di evitare la fine! Ah, che non vi venga in mente di noppare le CALL! Non riuscireste nemmeno a contare tutti i page fault che vi beccate! Facciamo il lavoro del salmone, continuiamo a risalire (questa entra nell'albo delle frasi pi� belle che uso nei tutorial, ovviamente violandone tutti i copyright :) NdQuequero. Solo che adesso la strada di risalita si divide in otto!! Che famo? Semplice, almeno uno di quegli otto indirizzi "referenced by" deve condurci qui, quindi proviamo a settare unnn (gi� � un vizio! Le "n" proprio le adori eh? Sei un feticista della N???....."Innn" l'hai scritto, "nonn" pure, "unnn" anche, ci mancano solo "ennn" e "annn" :) NdQuequero bpx su tutte e otto le linee di codice. Beh, se volete risparmiarvi la fatica vi dico subito il finale: 005E56F9. Andiamo a vedere cosa ci troviamo:

 

* Referenced by a (U)nconditional or (C)onditional Jump at Address:

|:005E56A0(C)

|

:005E56C5   test edi, edi

:005E56C7   jne 005E56FE        la ricerca � finita! Guarda un p�, se saltiamo evitiamo la routine di errore!

:005E56C9   mov [ebp-08], 00000207

:005E56D0   mov ebx, dword ptr [ebp-08]

:005E56D3   mov edi, esp

:005E56D5   mov ecx, 000000C8

:005E56DA   mov edx, ecx

:005E56DC   shr ecx, 01

:005E56DF   xor eax, eax

:005E56E1   repz

:005E56E2   stosw

:005E56E4   sub edx, 0000003C

:005E56E7   add esp, edx

:005E56E9   mov ebp, esp

:005E56EB   push ebx

:005E56EC   xor eax, eax

:005E56EE   mov ebx, eax

:005E56F0   mov ecx, eax

:005E56F2   mov edx, eax

:005E56F4   mov esi, eax

:005E56F6   mov edi, eax

:005E56F8   push eax

:005E56F9   jmp 0044A030      ecco che salta alle routine di errore

* Referenced by a (U)nconditional or (C)onditional Jump at Address:

|:005E56C7(C)

|

:005E56FE 66837DFE00 cmp word ptr [ebp-02], 0000

:005E5703 740C je 005E5711

:005E5705 E8D6F4FFFF call 005E4BE0

 

Bene! Abbiamo trovato il responsabile!!! Finalmente. Proviamo se funziona. Lanciamo il softice, settiamo un bpx 0177:005E56C7 e quando poppa modifichiamo al volo il jump... fatto? Bene! Niente messagebox di errore! Finito? Noooo! Okey, ora il programma � attivo, ma se proviamo ad usare i menu... ERRORE!!! DOVE CAZZO HAI MESSO LA DONGLE???? Bah! Non c'� da stupirsi. Come vi ho detto, gli indirizzi erano OTTO, quindi dovrete ripetere per altre 7 volte il lavoro appena fatto, dovrete rifarlo per tutti e 8 gli indirizzi. Fortunatamente noterete subito che lo schema � praticamente identico ogni volta. Non vi sar� difficile prendere e modificare il jump incriminato. L'unica cosa che cambia, � che a 00515A21 c'� un jump far, mentre le altre volte � un jump short. Con questo ho concluso il capitolo Sentinel Dongle.

AndreaGeddon

 

Note Finali

Saluto tuuuutta la ML. Saluto in particolare Paradox che mi ha messo nel suo tute, ora io ti cito nel mio. Saluto Quequero che ha scritto il tute sulla dongle di 3Dstudio, ma che purtroppo non mi � servito. A parte il fatto credo che Que lavori per la Autodesk, visto che ha fatto pubblicit� a quello che definisce un bel programma per la grafica 3D. Que, suppongo tu non conosca SoftImage, LightWave o tutti gli altri titoli che sono immensamente migliori.... Ciauz bestie. (hihihihihihihi ti garantisco che li conosco molto meglio di quanto tu creda :)))))))) NdQuequero

Ooops... mo mi dimenticavo Xoanon, che anche se dice che siamo tutti leim lo saluto lo stesso. Que, non credere che nessuno ha notato Zoa: se nessuno lo ha mandato a cagare per i suoi commenti, � proprio perch� la sua fama (o fame?) lo precede. Riciauz. Non dite cos� senno si monta ancora di pi� :).....Zoa � da ammirare non adulare, senno prima o poi l'universo lo conquista davvero! NdQuequero :)))))))) byezzzzzzzzz

 

Disclaimer

Queste informazioni sono solo a scopo puramente didattico. Non mi ritengo responsabile dell'uso che ne verr� fatto.

 
UIC's page of reverse engineering, scegli dove andare:

Home   Anonimato   Assembly    CrackMe   ContactMe   Forum   Iscrizione      
       Lezioni    Links   Linux   NewBies   News   Playstation        
  Tools   Tutorial   Search   UIC Faq

UIC