MapInfo 4.1.2 |
|
|
26/12/99 |
by "AndreaGeddon " |
|
|
Published by Quequero |
|
Se Que ha scritto il primo tute su una dongle... |
|
... io scrivo il secondo!!!! |
UIC's form |
|
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
Introduzione |
Tools usati |
URL o FTP del programma |
Me lo ha passato unn amico, non so dove lo si pu� trovare.
Notizie sul programma |
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 |
Home
Anonimato Assembly
CrackMe ContactMe Forum Iscrizione
Lezioni Links Linux NewBies News Playstation
Tools Tutorial Search
UIC Faq