| ||
Data |
by "Pincopall " |
|
15/06/2002 |
Published by Quequero | |
|
Pinco grazie per avermi ricordato dove mettere i commentuzzi :))), beh hai rovinato una famiglia di programmatori lo sai vero? Poverelli :) e la prossima volta allineami almeno gli opcode, se ce li vuoi lasciare e anche le istruzioni :PP argh :)...Prossimo tute...Via! (seconda volta che riuppo questo tute...pincuzzo e' anche l'uomo dei reup, mi rimanda un tute mediamente sei volte :P) |
Dedica sulla foto di 4a fattami da mio amico Beb0s. |
|
||
Difficoltà |
(X)Idiotz ( )NewBies ( )Intermedio ( )Avanzato ( )Master |
Dunque, questo è ovviamente un tutorial, ma più che un tutorial vuol essere una specie di avvertimento a coloro i quali producono questo tipo di demo ad alto rischio, cosa intendo? Bhè intendo dire che nn si puà sperare di proteggere la bellezza di 6 programmi con una protezione in Visual Basic 5 ! e siamo nel 2002! perchè la definisco Demo ad "alto rischio"..bhè leggete e poi ditemi se è stato facile o no trovare la pwd.
Introduzione |
Tools usati |
URL o FTP del programma |
Notizie sul programma |
Ma parliamo ora di cosa è questo "Marinari Byngo
Setup", credo che questo tipo di programma si chiami Installer,ovvero questa è
una suite di sei programmi :
Marinari Lotto Statistica
Marinari
Super Enalotto
Marinari Totocalcio
Marinari Totogol
Marinari
Totosei
Marinari Totip
e tale suite è protetta da questo Marinari
Byngo Setup che se non riceve la chiave giusta, diversa per ogni programma (
ok la protezione è da niente, ma ora nn esageriamo =)) installa il programma
da noi scelto fra i sei in trial mode, ovvero con funzioni disabilitate, tempo
di scadenza ed altre cose del genere.
Come dite? perkè stò scrivendo un
tutorial su una protezione idiota?
a) Per avviso ai programmatori tutti
che ancora non lo sapessero, ma che cmq dubito leggeranno mai questo tute, a
nn fare mai una cosa del genere con i loro prodotti, od almeno a proteggere
l'installer con una protezione degnaa di questo nome.
b) Perchè ho
conosciuto un GENIO che stava cercando di reversare stì prog e che per averli
tutti in full version non aveva trovato soluzione migliore se non crakkare
tutti e sei i programmi una volta installati ( cosa che poi non gli è riuscita
dato che spesso alcune delle funzioni disabilitate non vengono proprio
installate nel programma trial ), quando il tutto si poteva fare patchando, se
proprio si vuole patchare, uno o 2 byte.
c) Ho passatro stamani l'esame di
Chimica Organica e mi devo sfogare, la ragazza è in vacanza coi suoi, cosa
meglio di reversing&mp3 ( thank you Yoda Player =) ?
Bhè direi che
è ora di cominciare no?
Essay |
Allora, nella versione che ho io, essendo una versione di promozione
inserita in una rivista come vi ho detto, dei sei programmi uno era in
omaggio, era LottoLight, grazie =), gli altri venivano tutti installati in
modo demo ( premendo sul relativo pulsante ) se il Byngo Setup non riceveva la
chiave giusta, se la chiave era giusta abilitava un pulsante ("Avvia
l'installazione")e premendo quest'ultimo veniva installato il programma da noi
scelto..come faceva sapere quale avevamo scelto dite? Bhè lo capisce dal
serial immesso, o meglio, da una parte di esso.=)
Dunque, all'inizio sembra
un bel programma tosto, che promette delle belle sfide di reversing, o almeno
così speravo, di fatto è in realtà una stronzata da reversare...vabbè ma
cominciamo col cercare di capire quale breakpoint settare,mmm...anche se metto
la chiave, che ha questa forma : XX-XXXXXX-XXXXXX , il pulsante non si
abilita, ergo nn viene fuori nessuna beggar off, su cosa puntare allora?
Bhè..tagliamo la testa al toro, bpx hmemcpy, la cosa sarà lunga ma almeno ci
porterà ad un qualke risultato. Ok, prima di piazzare il bp scriviamo il
nostro serial tralasciando ovviamente l'ultimo carattere, prima di scriverlo
infatti abilitiamo il breakpoint, usciamo da SoftIce (F5) e battiamo sulla
tastiera l'ultimo char del nostro seriale..TADAAA il SIce poppa..mmm
ovviamente non siamo ancora da nessuna parte, per cui cominciamo con F12
finchè non vediamo apparire nella riga verde del SoftIce qualkosa che ci
illumini e che sia diverso dai vari kernel32 e user32...continuiamo, eseguiamo
vari ret e all'improvviso ci casca il mondo addosso...e nooooooo...msvbvm50.dll, è in vb5, niente, il sogno di una notte di reversing dovremo posticiparlo, o dovremo rifugiarci su altri prog più interessanti ( dal punto di vista del reversing si intende ), eggià perchè questo prog non fà neanche uso di altri strani .ocx o .dll, usa solo ed esclusivamente la sopra citata .dll per il check del suo serial.
Uff..delusi da stò proggy che prometteva bene ma
ha mantenuto niente, per ripicca facciamo la cosa + scontata da fare quando ci
si trova davanti ad un prog in VB5 che usa la msvbvm50.dll come unico conforto
e che è stato codato da programmatori pigri ovvero, dopo aver tolto il bpx
hmemcpy, e sempre stando dentro la msvbvm50.dll piazzare un bpx 0F00D9EB (
già..Alor rulezz =)) o comunque un bp in questa zona, uscire da Sice e finire
di inserire la pwd, alla fine Sice popperà da solo :
:0F00D9EB 57 push edi :0F00D9EC 8B7C2410 mov edi, dword ptr [esp+10] <--- Viene messo in edi il serial esatto :0F00D9F0 8B74240C mov esi, dword ptr [esp+0C] <--- Viene messo in esi il serial da noi inserito :0F00D9F4 8B4C2414 mov ecx, dword ptr [esp+14] :0F00D9F8 33C0 xor eax, eax :0F00D9FA F3 repz <--- qui vengono comparate :0F00D9FB 66A7 cmpsw <--- le stringhe :0F00D9FD 7405 je 0F00DA04 <--- Se sono uguali si salta :0F00D9FF 1BC0 sbb eax, eax
Bhè mi sembra intuitivo quasi, in edi viene spostato il serial, ma se una
volta passati gli offest dei mov fate un "dd edi" o un "dd esi" vederete che
ad esser mosse in edi ed in esi son solo le ultime due parti del serial giusto
e di quello da noi immesso,e notate che la parte centrale del serial giusto e
di quello errato sono uguali, sempre, cambia solo la ultima parte, calcolata
in base alla parte iniziale ed a quella centrale del codice, Esatto avete
centrato in pieno, il nome non serve a niente.
Così ad esempio se io
inserisco "Pincopall" "22-324567-UICUIC" il serial esatto sarà
"22-324567-VAPSXQ" oppure se inserisco "22-876783-21232" il serial esatto sarà
"22-876783-ITXHYX", dove ovviamente la ultima parte di ogni serial esatto è
indipendente dal nome e da ogni altra cosa tranne che dalla parte iniziale e
da quella centrale del serial immesso. Già...sarebbe carino farci un keygen
studiandosi la routine di generazione del serial, e forse lo farò quando mi
sarà passato lo sconforto :P, anzi pensateci voi và =).
Avete però bisogno
di sapere una altra cosa, nessuno dei serial sopra inseriti funziona..."Oh
Pincopall e che ci tiri i bidoni!? " ..nono, abbiate un secondino di
pazienza,una volta che avrete inserito i serial che avete scovato,vedrete
abilitarsi il pulsante "Avvio Installazione", ma non accadrà niente alla
pressione di questo,se nonchè il Sice ripoppa, e vediamo questa volta, che a
essere confrontate sono le prima parti del serial.
La prima parte del
nostro serial viene confrontata con valori fissi, 01, 02, 03 ecc..bhè vediamo
che succede invertendo il flag del salto all'offset 0F00D9FD se la prima parte
è 03, ed il serial immesso da noi ha la ultima parte ricavata già usado lo 03,
mmm..installa MArinari Totocalcio, e se invece la prima parte fosse "04"?
ovvio...verrà installato Marinari Totogol, e così via..eccerto che i seriali
da noi immessi prima nn funzionavano, avevamo messo kome prima cifra 22!, e il
prog al massimo arriva fino a 06...ok, questa era l'ultima cosa da sapere sul
serial.
Vediamo ora il bug di cui vi ho accennato poco sopra: se io
voglio installare il numero 2, ovvero Super Enalotto, ovviamente, da quello
che sappiamo sul serial, la prima cifra di quest'ultimo dovrà essere "02", in
realtà non è così, se mettiamo "02" il programma installa il Lotto Light,
ovvero il programma che si installa già completo senza serial, e che dovrebbe
partire con un "01" , cosa che infatti fà=), ergo il problema è che risulta
impossibile, se non tramite la modifica a runtime che andremo a fare,
installare il Marinari SuperEnalotto.
Dunque via, mettiamo un serial
esatto che inizi con 02, e ovviamente mettiamo sempre il vecchio bpx 0F00D9EB
che questa volta ci servirà per beccare il momento in cui il programma
controlla quale sia il valore della prima parte del seriale. Così, dopo aver
premuto quattro volte F5, ci arriviamo, continuiamo a steppare con F10 ed a
fargli eseguire tutti i jmp che deve senza modificare niente, il serial
infatti è giusto=), noi dobbiamo solo andare a modificare la stringa che verrà
pushata prima di una qualche call in cui è contenuto il nome del file da far
partire ( sarà intuitivamente o setup.exe o qualkosa di simile ) ed ovviamente
dir e sottodir in cui è contenuto questo file.
Dopo poco arriveremo quì,
guardate, dopo aver in un secondo tempo disassemblato il file, cosa viene
pushato prima della call __vbastrcat:
* Reference To: MSVBVM50.__vbaFreeObjList, Ord:0000h | :0040816D FF1514D24000 Call dword ptr [0040D214] :00408173 83C40C add esp, 0000000C :00408176 0FBF850CFEFFFF movsx eax, word ptr [ebp+FFFFFE0C] :0040817D 85C0 test eax, eax :0040817F 7447 je 004081C8 <--- questo salto non salta :00408181 C745FC20000000 mov [ebp-04], 00000020 :00408188 8B4DD8 mov ecx, dword ptr [ebp-28] :0040818B 51 push ecx * Possible StringData Ref from Code Obj ->"Demo\Lotto Statistica\Setup.exe" | :0040818C 685C6B4000 push 00406B5C -- Bhè si vede cosa viene pushato no?=) * Reference To: MSVBVM50.__vbaStrCat, Ord:0000h | :00408191 FF1520D24000 Call dword ptr [0040D220] :00408197 8985B4FEFFFF mov dword ptr [ebp+FFFFFEB4], eax
Ovviamente è quella la stringa da cambiare a runtime, certo la si potrebbe
anche cambiare usando un editor esadecimale, ma dopo non riuscireste a
reinstallare Lotto Light no? , ergo la si cambia a runtime, arrivando sopra quel
push, facendo un "dd 406B5C" e cambiando i byte rappresentanti la stringa
L.o.t.t.o. .S.t.a.t.i.s.t.i.c.a. con S.u.p.e.r. .E.n.a.l.o.t.t.o. ed
ovviamente avvicinando la parte del .\.S.e.t.u.p...e.x.e. di un byte.
A
questo punto togliete il breakpoint e verrà avviata la installazione del
Marinari Super Enalotto =).
Bene, ora possiamo installare tutto, certo
però che ogni volta che vogliamo installare uno di stì prog ci tocca vedere il
serial esatto da SoftIce....vediamo come far allora per fargli accettare
qualunque serial, ovviamente mantenendo sempre la prima parte del serial alla
"vecchia maniera" =).
Naaa..mica vorrete patchare la msvbvm50.dll, troppo
alta la probabilità che i bytes che andremo a patchare vengano utilizzati in
altro modo da altri programmi, meglio andare sul sicuro e patchare
direttamente il Setup.exe..vediamo come...
Supponiamo di aver inserito un
serial sbagliato, il salto seguente il confronto dei serial non salterà ed
eax, che risulterebbe zero se il serial fosse esatto, subirà due cambiamenti:
:0F00D9FF 1BC0 sbb eax, eax :0F00DA01 83D8FF sbb eax, FFFFFFFF * Referenced by a (C)onditional Jump at Address: |:0F00D9FD(C) | :0F00DA04 5F pop edi :0F00DA05 5E pop esi :0F00DA06 C20C00 ret 000C
Istruzioni che ci porterebbero ad avere un eax=FFFFFFFF, anche il salto successivo alla call a cui ci riporta il ret 000C non salta, ma di quello poco ci importa, arriviamo ad un nuovo ret ed ecco che piombiamo nel codice di setup.exe alla fine di una chiamata __vbastrcmp, se avete letto il mio tutorial su Engenius 4.0.1 vi ricorderete che ho menzionato dei metodi ritenuti QUASI universali per trovare il luogo di comparazione dei due seriali nei programmi scritti in Visual Basic sempre che questi usassero solo, per "proteggersi", msvbvm50.dll o msvbvm60.dll, e vi ho in quella occasione accennato al trucco del bpx __vbastrcat per i prog scritti in VB6, bene, il bpx __vbastrcmp è uno dei "trucchi" per i prog scritti in VB5, certo è che si deve anche vedere quale sia la call __vbastrcmp che serve a noi, comunque, ecco dove si arriva:
* Reference To: MSVBVM50.__vbaStrCmp, Ord:0000h | :0040BD4E FF1594D24000 Call dword ptr [0040D294] :0040BD54 F7D8 neg eax --- mmm modifica ancora :0040BD56 1BC0 sbb eax, eax --- eax, se eax fosse 0 :0040BD58 F7D8 neg eax --- queste operazioni non :0040BD5A F7D8 neg eax --- avrebbero conseguenze .. :0040BD5C 668945B0 mov word ptr [ebp-50], ax :0040BD60 8D4DD4 lea ecx, dword ptr [ebp-2C] * Reference To: MSVBVM50.__vbaFreeStr, Ord:0000h | :0040BD63 FF1598D34000 Call dword ptr [0040D398] :0040BD69 0FBF55B0 movsx edx, word ptr [ebp-50] :0040BD6D 85D2 test edx, edx --- e se eax prima era 0 :0040BD6F 7412 je 0040BD83 --- questo salta, altrimenti :0040BD71 C745FC0B000000 mov [ebp-04], 0000000B --- si continua :0040BD78 66C70534C040000000 mov word ptr [0040C034], 0000 :0040BD81 EB10 jmp 0040BD93 --- e si finisce male
Dunque se si finisce bene o male dipende dal valore di eax, se è zero è
tutto ok, sennò no, bene, se il serial è sbagliato arriviamo con un eax
diverso da 0 in setup.exe, unica soluzione è quindi il cambiare il primo "neg
eax" in un "xor eax,eax" e quindi cambiamo l'opcode da F7D8 in 33C0 , è per
quello che ho lasciato in vista gli opcode =).
Bene, abbiamo finito,
trovato il seriale, trovato e rimediato a un bug grosso kome una casa e
trovato il modo di evitare di inserire ogni volta un serial diverso, che vi
devo dire se non ...alla prossimaaa ed Evitate di fare i prog in VB5 se non
volete che un Pincopall-ino qualunque ve li reversi :PPPP
Ciauzzz
|
Bhè nelle note finali non inveirò ancora di + su chi ha codato il Byngo
Setup, almeno i prog che vengono installati sono bellini, se funzionano?
Bhè...spero di si, vedremo=)) o la prossima volta reverso loro ( i
programmatori :PP). Ciauzzzzzz
Un saluto in primis al GENIO di cui ho parlato
nell'intro con un amichevole "Pirla hai visto com'era difficile? " :P.
Bhè
ovviamente un saluto a tutta la UIC ed a tutti i suoi members contando di
vederne la maggior parte all'hackmeeting 2002 a BO.
Disclaimer |
Vorrei ricordare che questo software vaà
comprato e non rubato e o crakkato capito?
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.