Winamp Skin Maker v 1.2 Come scovare il serial con una gran botta di culo | ||
Data |
by " Gbyte " |
|
28/06/2001 |
Published by Quequero | |
|
E bravo GByte il tute è di facile comprensione ed anche la botta di culo è classica agli inizi :)))) |
It's better to burn out than to fade away |
|
|
|
Difficoltà |
(x)MoltoNewBies ( )Intermedio ( )Avanzato ( )Master |
In questo tute proveremo a scovare il seriale di registrazione senza alcuna modifica fisica.E' semplicissimo,forse il programmatore era un coglione visto che anch'io sono riuscito a fregarlo!
Introduzione |
Questo è il mio primo tutorial,probabilmente avrò scritto tutte scemenze ma il seriale l'ho trovato è funziona.Ci ho messo pochi minuti grazie al programmatore di questo software che non ha provato nemmeno a nascondere il seriale.Grazie!!!
Tools usati |
URL o FTP del programma |
Notizie sul programma |
Essay |
Non appena, per la prima volta, avviamo il programma e lo utilizziamo (non per forza per creare una skin, basta anche solo premere qualche pulsante qua e là ) questo, non appena viene chiuso, crea nella cartella del programma stesso un file Hackman INIeditor ( estensione = .ini ) nel quale a registrazione avvenuta vengono inserite le informazioni relative a nome e seriale in questa forma:
Regs_nm="Nome"
Regs_cd="Seriale"
LicenseText=License to"Nome"
( Naturalmente al posto di Nome e Seriale abbiamo il nome dell’utente ed il seriale esatto )
Probabilmente il programma controlla ogni volta nel file skinner.ini quelle
informazioni, se mancano o sono errate ( nel caso in cui voi stessi abbiate
aggiunto al file .ini i dati di registrazione con un serial preso a caso ) si
setta automaticamente in modalità unregistered.
Il migliore dei modi per “sbloccare” il
programma sarebbe trovare il seriale calcolato in base al nome inserito.
Il programma sfrutta la funzione GetDlgItemTextA per leggere le informazioni inserite nella casella di testo del box di registrazione (voi direte: “Ma come fai a saperlo?” Semplice: prima ho provato con GetWindowTextA e non ha funzionato, poi con GetDlgItemTextA ed ha funzionato ). Ctrl^D, bpx getdlgitemtexta, F5 ( sapete cosa abbiamo fatto con questi comandi ? No! Allora sparatevi! ). Inserite un nome, un fuck number e premete Register, Sice apparirà magicamente. Cancelliamo il bp con bc *. Vi trovate in User32 (vedete in basso nella barra verde cosa c’è scritto? Appunto User32!), uscite dalla chiamata con F11 e vi troverete finalmente nel nostro programma a questo punto:
:00406D83
lea eax, dword ptr [esp+38]
:00406D87
push 00000029
:00406D89
push eax
:00406D8A
push 000003FD
:00406D8F
push esi
:00406D90 call edi
:00406D92
lea eax, dword ptr [esp+0C]
:00406D96
push eax
:00406D97
call 00407E30
:00406D9C
add esp, 00000004
:00406D9F
mov ebx, eax
:00406DA1
lea eax, dword ptr [esp+38]
:00406DA5
push eax
:00406DA6
call 00407D00
:00406DAB
add esp, 00000004
:00406DAE
mov edi, eax
:00406DB0
test edi, edi
:00406DB2
jne 00406DEB
Steppando passerete il pezzo in cui viene generato il seriale (la prima delle due call, ma siccome voglio solo il seriale e non capire come viene generato non ci entro, forse lo farò un’altra volta). Oltrepassato test edi, edi abbiamo un jne ( jump if not equal ) e così verremo catapultati all’indirizzo 00406DEB. Proprio lì abbiamo una bella comparazione tra edi e ebx:
:00406DEB
cmp edi, ebx
:00406DED
jne 00406E24
:00406DEF lea eax, dword ptr [esp+0C]
:ecc...
Diamo una sbirciatina a edi, ed ecco il nostro seriale.
Se il nostro seriale viene comparato direttamente ( senza alcuna crittazione
) con un altro valore allora questo sarà di certo il seriale
giusto anch’esso non crittato. Vediamo un po’ se ho ragione! Bingo!
Annotiamocelo va’! Andando avanti passo passo con i comandi che già
conosciamo fino a quando una call (call User32!MessageBoxA) ci caccerà
fuori e ci darà la finestra di Serial errato.
Apriamo di nuovo il box di registrazione e reinseriamo il nome di prima e il
valore che ci siamo annotati. Oh, che bello! Siamo registrati. E il nostro
lavoro è finito.
Per curiosità andate a vedere il file skinner.ini. Li trovate i dati che avete inserito? Cosa vi avevo detto?
Se ora provate a cancellare il file o solo le ultime tre righe ( quelle dei dati ) e aprite di nuovo il programma potete constatare di non essere più registrati. Ecco il controllo che il programma effettua al suo avvio...esattamente come vi avevo detto...almeno credo! ;)
Adesso
, anche se abbiamo trovato il seriale, vi vorrei dare le istruzioni commentate
della generazione del seriale,per fare una cosa più completa.Se no vi
interessa o vi è bastata la prima parte lasciate perdere questo che segue:
entrati
con F8 nella prima call ci troviamo di fronte questo
:00408139
mov al, byte ptr [ebp+00] <-acquisisce
il primo carattere del nome inserito (naturalmente sotto forma esadecimale,
cioè il valore che rappresente il carattere ASCII)
:0040813C
cmp al, 41 <-
da qui…
:0040813E
jl 00408178
:00408140
cmp al, 5A
:00408142
jg 00408178 <-
…a qui controlla se è compreso tra A e Z (cioè che la prima lettera sia
maiuscola), nel caso contrario ( lettera minuscola o altro tipo di carattere )
salta a 00408178
:00408144
movsx ecx, al <-
sposta al in ecx
:00408147
cmp al, 41
:00408149
mov eax, ecx <-
sposta ecx in eax
:0040814B
jne 00408165 <-
salta se eax <> 0
:0040814D
lea edx, dword ptr [ecx+4*ecx] <- da
qui…
:00408150
movsx esi, byte ptr [esp+14]
:00408155
lea ecx, dword ptr [edx+4*edx]
:00408158
add ecx, eax
:0040815A
lea eax, dword ptr [eax+8*ecx]
:0040815D
lea edx, dword ptr [eax+2*eax]
:00408160
lea ecx, dword ptr [esi+4*edx]
:00408163
jmp 0040818E
:00408165
lea ecx, dword ptr [ecx+2*ecx]
:00408168
shl ecx, 03
:0040816B
lea edx, dword ptr [eax+8*ecx]
:0040816E
movsx eax, byte ptr [esp+15]
:00408173
lea ecx, dword ptr [eax+8*edx] <-
…a qui elaborazione del carattere
:00408176 jmp 0040818E <- salta
:00408178
movsx ecx, al <-
da qui…
:0040817B
mov eax, ecx
:0040817D
shl ecx, 09
:00408180
sub ecx, eax
:00408182
sub ecx, eax
:00408184
lea ecx, dword ptr [ecx+4*ecx]
:00408187
sub ecx, eax
:00408189
movsx eax, bl
:0040818C
add ecx, eax <-
…a qui elaborazione del carattere se non è compreso tra A e Z ( vedi sopra
)
:0040818E
add edi, ecx <-
un altro calcolo
:00408190
inc ebp <-
incrementa il valore di ebp di una unità ( questo permette, nei cicli, di
acquisire lettera dopo lettera )
:00408191
cmp byte ptr [ebp+00], 00
:00408195
jne 00408139 <-
ripete il ciclo fino a quando non sono stati acquisiti tutti I caratteri
:00408197 lea eax, dword ptr [2*edi+00000013] <- già qui tra [] abbiamo il seriale esatto
:0040819E
cmp eax, 001E8482 <-
compara il seriale con un valore
:004081A3
jb 004081C7 <- salta se è inferiore
:004081A5
cmp eax, 0089543E <- aricompara il seriale con
un valore
:004081AA
jbe 004081DC <- arisalta se è inferiore o
uguale, almeno credo…non ho mai visto jbe ma credo significhi jump if below
or equal, giusto Que ?
:004081AC
shr eax, 01
:004081AF
sub eax, 00000007
:004081B2
cmp eax, 0089543E
:004081B7
ja 004081AC
:004081B9
shr eax, 01
:004081BC
pop ebp
:004081BD
sub eax, 00000007
:004081C0
pop edi
:004081C1
pop esi
:004081C2
pop ebx
:004081C3
add esp, 00000020
:004081C6
ret <-
ritorna
:004081C7
lea eax, dword ptr [2*eax+00000007]
:004081CE
cmp eax, 001E8482
:004081D3
jb 004081C7
:004081D5
lea eax, dword ptr [2*eax+00000007]
:004081DC
pop ebp
:004081DD
pop edi
:004081DE
pop esi
:004081DF
pop ebx
:004081E0
add esp, 00000020
:004081E3 ret <- ritorna alla parte principale
by Gbyte
Note finali |
Spero di aver scritto un tute accettabile.Sicuramente non sarà all'altezza di quelli scritti dai più esperti (come te Quequero) dato che io solo da poco ho cominciato a lavorare sul serio.Grazie al prof. Quequero per i mille tute che ha scritto...mi sono stati davvero utili!
Disclaime |
Vorrei ricordare che il software va comprato e non rubato, dovete registrare il vostro prodotto dopo il periodo di valutazione. 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.
Tutto quello che avete letto in questo tute è solo a scopo puramente informativo,se poi la Finanza vi viene a fare una visitina a casa sono cazzi vostri
Noi reversiamo al solo scopo informativo e di miglioramento del linguaggio Assembly.