Winamp Skin Maker v 1.2

Come scovare il serial con una gran botta di culo

Data

by " Gbyte "

  

28/06/2001

UIC's Home Page

Published by Quequero


It's better to burn out than to fade away

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

  

E-mail: [email protected]
Canale IRC Cracking,nick Gbyte

   

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!


Winamp Skin Maker v 1.2
Come scovare il serial con una gran botta di culo

Written by Gbyte

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

SoftIce
Un gran culo (qui non c'è il link perchè non so se un gran culo si può trovare in rete)

URL o FTP del programma

http://members.tripod.com/ajie_g/ 

Notizie sul programma

Winamp Skin Maker,come si capisce dal nome,è un programma che ci permette di creare skins per Winamp.La versione non registrata non ha alcuna limitazione di tempo ma ci permette di salvare solo la Main che compone Winamp (il primo pezzo per intenderci).Quello che faremo è semplicemente trovare seriale e poi cercherò di spiegare la suo routine di generazione (scusate se la seconda parte si capisce poco,ma non è stato facile per me visto che sono solo alle prime armi)

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] <- all'inizio ci troviamo qui

: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 <- qui dentro viene generato il seriale e alla fine viene inserito in eax

:00406D9C        add esp, 00000004

:00406D9F        mov ebx, eax <- il seriale esatto da eax viene spostato in ebx

:00406DA1        lea eax, dword ptr [esp+38]

:00406DA5        push eax

:00406DA6        call 00407D00

:00406DAB        add esp, 00000004

:00406DAE        mov edi, eax <- in edi viene spostato il contenuto di eax = seriale inserito

:00406DB0        test edi, edi <- controlla se edi=0 (nel caso in cui non sia stato inserito nessun seriale)

:00406DB2        jne 00406DEB <- salta se edi<>0 (seriale inserito)

 

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 <- in edi il nostro seriale,in ebx il seriale esatto

:00406DED        jne 00406E24 <- salta se i due seriali sono diversi (cioè se abbiamo inserito un seriale errato)

: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 ? Giustissimo :)))

: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.