Copy Link
Add to Bookmark
Report

Patchare un Serial Number usando Wdasm32

DrWatson's profile picture
Published in 
guide hacker
 · 28 Apr 2018

Premessa
LE INFORMAZIONI CHE TROVATE ALL'INTERNO DI QUESTO FILE SONO PER PURO SCOPO
DIDATTICO. L'AUTORE NON INCORAGGIA CHI VOLESSE UTILIZZARLO PER SCOPI ILLEGALI.


Tools Usati
* Wdasm32 (URSoftware)
* HIEW 6.01
* Cervello in buone condizioni :)


Introduzione
Best viewed with old m$-do$ EditoR...

Ciao ragazzi !! Molti di voi riterranno probabilmente il cracking un'arte molto difficile che solo i piu' esperti piratoni sanno padroneggiare :) Con questo tutorial cerchero' di dimostrarvi che in realta' e' tutto molto semplice (lo dimostra gia' il fatto che un lamer come me sia capace di crakkare ;)... Deh io oh uh ! (schersooo ingenierrr :)

Come (spero :) avrete notato questa e' una versione leggermente sistemata del mio vecchio tutorial, ho usato un impaginatura TM of +Kill3xx (ehi killo non vorrai mica i diritti d'autore ih ih :) che pero' ho adattato alle 80 colonne delle vostre stampanti in modo tale da non farvi buttar via un sakko di carta.
Inoltre ho tagliato parti poco interessanti e altre abbastanza imbecilli...
Ok... basta cazzate ! iniziamo :)


Let's Go :p
Quale sara' la nostra vittima ??? Elementare... il L0phtCrack x win 95 degli amici delle "L0pht Heavy Industries" (scaricatelo da www.l0pht.com)
La versione di cui parlo e' la 2.1 (mi pare... boh... non la trovo piu' :) comunque nella nuova 2.5x non e' cambiato assolutamente nulla ( a parte gli offset delle istruzioni deh :)

Ok.. unzippate il programma in una cartellina sul disco e fatelo partire... vi saltera' fuori una finestra che vi rompe le palle perche' mancano 15 giorni alla scadenza del periodo di prova...

Bene Bene... premete il pulsante "Register" in basso... apparira' una finestra di dialogo che vi chiede il Serial Number (d'ora in avanti SN...)

Mettetene uno a caso... tipo 80980 e clikkate su "Ok"... il programma vi dira' "You have entered an invalid code. Please try again."
Ok... chiudete tutto... segnatevi questo messaggio e aprite il Wdasm... disassemblate il file l0phtcrack95.exe e quindi salvate il codice asm...
Azz... sul mio rottame di PC ci vuole una vita.. :(

Clikkate in alto a destra sul bottoncino delle String References... Fate scorrere la lista cercando il messaggio "You have enter....." Appena lo trovate clikkateci sopra due volte... piomberete cosi' all'interno del codice sorgente dove e' utilizzata questa stringa... Perfetto.. ora come dicono i +hcukers serve un po' di "Zen"... cercheremo di applicare il Dead Listing approach....

 
:004*1A26 50 push eax ;Passaggio parametri
:004*1A27 51 push ecx
:004*1A28 E863940100 call 004*AE90 ;Funzione di controllo
:004*1A2D 83C408 add esp, 00000008 ;del serial
:004*1A30 85C0 test eax, eax ;Test correttezza...
:004*1A32 742C je 004*1A60 ;Jmp se e' giusto...
:004*1A34 57 push edi
:004*1A35 57 push edi

* Possible StringData Ref from Data Obj ->"You have entered an invalid code. "
->"Please try again."
|
:004*1A36 6820A24400 push 0044A220
:004*1A3B E874DD0200 call 004*F7B4
:004*1A40 56 push esi
:004*1A41 8D8C24CC000000 lea ecx, dword ptr [esp+000000CC]
:004*1A48 E874420200 call 004*5CC1
:004*1A4D 8D4C246C lea ecx, dword ptr [esp+6C]
:004*1A51 E8392B0200 call 004*458F
:004*1A56 83F801 cmp eax, 00000001
:004*1A59 74A0 je 004*19FB
:004*1A5B E9A7000000 jmp 004*1B07

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004*1A32(C)
| ;Se e' giusto registra il code
;nel Registo...
:004*1A60 89BDC0000000 mov dword ptr [ebp+000000C0], edi

* Possible StringData Ref from Data Obj ->"Software\LHI\L0phtCrack"
|
:004*1A66 BF08A24400 mov edi, 0044A208
:004*1A6B 83C9FF or ecx, FFFFFFFF
:004*1A6E 33C0 xor eax, eax
.....
.....
.....
.....

* Possible StringData Ref from Data Obj ->"You have successfully registered "
->"L0phtCrack 2.0."
|
:004*1AFB 68C4A14400 push 0044A1C4
:004*1B00 E8AFDC0200 call 004*F7B4
:004*1B05 33FF xor edi, edi

Beh... avete capito ??? e' tutto molto semplice... il programma fa controllare ad una funzione se il SN e' corretto... e se lo e' lo scrive nel registro di configurazione... altrimenti non esegue il jmp e visualizza il messaggio di errore... :)

Bene... e ora ??? potrebbe sembrare logico cambiare il "je 00401A60" in un "jne" o addirittura in un "jmp"... ma poi noterete che appena si riavvia il
programma esso e' ancora unregistered... Quindi ??? Allora... bisogna entrare all'interno della call:

:004*1A28 E863940100 call 004*AE90

Vediamo un po'... (attenzione ricordatevi che 'sta funzione ritorna '0' se il SN e' corretto e ritorna '1' se il SN e' sbagliato !!! :)


 
* Referenced by a CALL at Addresses:
|:004*1938 , :004*1A28 , :004*2C34 , :004*4207 , :004*429E
|:004*44A3 , :004*44BC , :004*44D5 , :004*44EE , :004*876E
|:004*8B87 ;Uh..uh... molte call a questa
| ;funzione.... OTTIMO ;)
| ;vuol dire che essa e' richiamata
| ;anche in altri punti del programma :)
:004*AE90 55 push ebp
:004*AE91 8BEC mov ebp, esp
:004*AE93 57 push edi
:004*AE94 56 push esi
:004*AE95 53 push ebx
:004*AE96 8B750C mov esi, dword ptr [ebp+0C] -- SN corretto
:004*AE99 8B7D08 mov edi, dword ptr [ebp+08] -- SN inserito..
:004*AE9C 8D0540F74400 lea eax, dword ptr [0044F740]
:004*AEA2 83780800 cmp dword ptr [eax+08], 00000000
:004*AEA6 753B jne 004*AEE3
:004*AEA8 B0FF mov al, FF
:004*AEAA 8BC0 mov eax, eax

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:004*AEB8(C), :004*AED8(C)
|
:004*AEAC 0AC0 -----> or al, al -- Controlla se si e' arrivati
:004*AEAE 742E | je 004*AEDE alla fine della stringa...
:004*AEB0 8A06 | mov al, byte ptr [esi] -- 1ø char in "al"
:004*AEB2 46 | inc esi -- fa scorrere il SN corretto...
:004*AEB3 8A27 | mov ah, byte ptr [edi] -- 2ø char in "ah"
:004*AEB5 47 | inc edi -- fa scorrere il SN inserito...
:004*AEB6 38C4 | cmp ah, al -- se sono uguali passa al char
:004*AEB8 74F2 ------ je 004*AEAC successivo
:004*AEBA 2C41 sub al, 41
:004*AEBC 3C1A cmp al, 1A
:004*AEBE 1AC9 sbb cl, cl
:004*AEC0 80E120 and cl, 20
:004*AEC3 02C1 add al, cl
:004*AEC5 0441 add al, 41
:004*AEC7 86E0 xchg al, ah
:004*AEC9 2C41 sub al, 41
:004*AECB 3C1A cmp al, 1A
:004*AECD 1AC9 sbb cl, cl
:004*AECF 80E120 and cl, 20
:004*AED2 02C1 add al, cl
:004*AED4 0441 add al, 41
:004*AED6 38E0 cmp al, ah
:004*AED8 74D2 je 004*AEAC -- idem....
:004*AEDA 1AC0 sbb al, al
:004*AEDC 1CFF sbb al, FF

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004*AEAE(C)
| -- mette in "al" l'ultimo char
:004*AEDE 0FBEC0 movsx eax, al (se il SN e' giusto al=00)
dato che siamo arrivati in
fondo alla stringa...
:004*AEE1 EB78 jmp 004*AF5B -- salta alla fine della
funzione ;)
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004*AEA6(C)
|
:004*AEE3 F0 lock

..................
...............
............

ecc... ecc.....


* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004*AEE1(U)
|
:004*AF5B 5B pop ebx
:004*AF5C 5E pop esi
:004*AF5D 5F pop edi
:004*AF5E C9 leave
:004*AF5F C3 ret

Beh... allora ??? secondo me e' tutto molto semplice... il problema sta nel far ritornare alla funzione il valore 00... come ??? basta far scorrere la stringa fino alla fine (come spero sappiate di gia' le stringhe sono Null Terminated cioe' la loro fine e' segnata dal char 00h)... quindi bastera' modificare il jump condizionale:

 
:004*AEB8 74F2 je 004*AEAC
in un bel "JMP" cioe':
:004*AEB8 EBF2 jmp 004*AEAC

Fatto ! ora prendete il file offset... cioe' 1*2*8... segnatevelo... Aprite il vostro hexeditor di fiducia eeee.... fate un Goto a 1*2*8... e modificate il byte "74" in "EB"...
Uscite e SALVATE !!!

Riavviate il l0pht che vi chiedera' ancora di registrarvi... bene... inserite un Sn a caso e vedrete che il programma vi ringraziera' tutto contento ;)
Ok... ora per concludere e per controllare il nostro crack riavviate il prog che dovrebbe apparire correttamente registrato :)

Ah... finalmente sono arrivato alla fine... ;)

Ricordatevi che se volete distribuire un crack dovete crearvi un patcher in qualunque linguaggio di programmazione ( consiglio Pascal o C ) o se siete capaci addirittura in Assembler >:)

Comunque vi ricordo che possedere programmi non registrati e' illegale e inoltre immorale quindi... comprateveli !!!

Note Finali

Allora in 'sta nuova versione mi son rifatto la sezione dei saluti finali anche perche' ora con la nascita di Ringzer0 ho conosciuto un sakko di nuovi amici :p

ok.... allora ringrazio:

Kill3xx: perche' mi ha sopportato tutta l'estate scorsa, quando non sapevo
crakkare neanche una sega (beh... per dir la verita non e' che son
migliorato + di tanto :)
+Malattia: perche' non mi ha ancora mandato a cagare e perche' e' troppo pazzo
(mala va' che scherzo... ih ih o:)
xOANINO: beh, ho imparato a crakkare leggendo i suoi tutes, quindi mi sembra
corretto essergli riconoscente :)

E infine saluto (in rigoroso ordine alfabetico :)

Alor (salutami anche kasko e gigi :)
D4emon
+Fravia
Furbet
Genius (sai che non t'ho mai incontrato ?)
Insanity (grazie per l'upload :)
MetalHead (vedi Genius)
-Neural_Noise (cazzo... ma sei troppo fuori !! :)
Pusillus
Samp3i (Eh mantengo le promesse :)
Suby
T3x
YanOrel

(e tutti quelli i cui sono nomi sono andati persi tra i miei neuroni -:)

Ciauz a tutti :P

p.s. se volete sfogarvi, insultarmi, picchiarmi o semplicemente chiedere informazioni scrivete a along3x@geocities.com


"...chi dice che le fiabe si raccontano ai poppanti non ha tenuto conto di milioni di votanti..."

Tratto da: "Tutti in Pista" --- PUNKREAS

← previous
next →
loading
sending ...
New to Neperos ? Sign Up for free
download Neperos App from Google Play
install Neperos as PWA

Let's discover also

Recent Articles

Recent Comments

Neperos cookies
This website uses cookies to store your preferences and improve the service. Cookies authorization will allow me and / or my partners to process personal data such as browsing behaviour.

By pressing OK you agree to the Terms of Service and acknowledge the Privacy Policy

By pressing REJECT you will be able to continue to use Neperos (like read articles or write comments) but some important cookies will not be set. This may affect certain features and functions of the platform.
OK
REJECT