Está en la página 1de 30

Aestolent

Programa
Pagina de descarga
Pas origen software
Compilador
Proteccin
Objetivo
Herramientas
nivel
Cracker
justificacin

Ferretera 5.83
www.gdsistemas.com.ar
Argentina
Borland Delphi v 6.0 v 7.0
tElock v 0.98 segun rdgPacker v 0.6.5
Conseguir un serial valido y registrarlo
ollyDbg v 1.1, Cryptool v 1.4(www.cryptool.org), RdgPcker v
6.5, radsam, Vb 6, ide masm32
medio
Aestolent(Solo hice el tutorial todos los meritos a MCKSys
Argentina)
Me pareci un buen software bien protegido y algo nuevo en
proteccin, como para dejar asentado el mtodo.

Procedimiento:
I.-Anlisis compilador del programa
II.-Ejecucin de programa para ver limitantes o restricciones y forma de registro
III.-Ejecucin con Olly y posible solucin.
IV.-Determinacin de desemcriptacin de cdigo
V.-Haciendo Brute-Force para determinar el serial

I.- Anlisis de compilador y posible proteccin ,


Veamos si abrimos con rdgPacker v 0.6.5, vemos.

Esta en Delphi y empacado,

Aestolent
II.-Ejecucin de programa y ver limitantes o
restricciones
Al correrlo nos manda una Nag de que nos quedan 99 usos del programa, adems tiene
la opcin de registrarlo, en el botn comprar.

Al parecer la limitante que tiene es el nmero de usos y que cada vez que cierro y abro
sin importar si entro o no al programa, me descuenta un uso, ahora nuestra intencin es
de registrarlo sin importar nada, as, que miremos que nos manda al dar click en
Registrarse y vemos

1592A616102

Al parecer genera un cdigo a partir de caractersticas de mi pc, puede se de la versin


del hardware, nombre del disco duro, en fin, miramos un cdigo, que por lo general es
generado particularmente para cada maquina, en este caso es 1592A616102, es de
esperarse que use este cdigo para un serial valido, Ahora si damos click en Ingresar
Licencia, e ingresamos un serial cualquiera,

Aestolent
Y al dar click en OK, nos sale,

No es mensaje Box, en este caso detecto que la licencia o serial es invalido y trata de
enviar nuestros datos a la Web, y as obtener una licencia valida, por lo que si es seguro
que use este cdigo, y que dependiendo de la versin se usara un mtodo distinto para
generar la licencia a travs de este cdigo generado en mi maquina.

III.-Ejecucin con Olly y posible solucin.


Abrimos el olly v 1.1. y configurando las excepciones as,

Puesto que al estar empacado lo mas seguro es que no corra, pero tratemos, carguemos
el programa ferreteria.exe y al momento de dar abrir nos dice esto

Aestolent

Demos aceptar, y vemos

Paro en un salto, ahora, Demos run y veamos si corre y nos manda

A ocurrido una excepcin, demos aceptar y despus Shift+f9, ojala y corra, y vemos,

Aestolent
Ahora por experiencia en los programas hechos en delphi es que he observado que los
delphi, cuando generan una box esta en un ciclo repetitivo, que hasta el momento de que
no se clickee un botn (aceptar o cancelar ) este ciclo seguir de manea infinita, ahora
para determinar este ciclo, procedemos de la siguiente manera: ya corriendo el
programa en la nag siguiente con el ollyDbg, damos F12(pausa) y despus traceamos
con varios F8, y pasar varios ret, hasta observar el ciclo, en este caso observaremos el
ciclo de la box de ingresar licencia.

Damos f12 (pausa), despus varios f8, y vemos que el ciclo en mi maquina esta aqu,

ciclo

Es de esperase que al dar click saldr de este ciclo, as que demos F9 (ejecutar) y
pongamos un Bp justo abajo del ciclo, as

Aestolent
Despus en la box damos aceptar, y para en este Bp, ahora la tcnica es de anotar la
direccin de las call de la cual va saliendo, y despus reiniciar el programa e ir a esas
direcciones y poner Bp o simplemente colocar Hbp, peo recuerden que es probable que
el packer detecte los Bp o Hbp, y cerrar el programa, pero bien hagmoslo:
Dando Ctrl +f9, y mas rpido llegar al ret
Direccin de la 1ra call que sale 004588F6
Direccin de la 2da call que sale 00CFDE5C
Al tratar de buscar una 3ra call el programa ya lanza la venta de navegador, vista
anteriormente, puesto que ya determino que la licencia (serial) no es valida.,
Bien reiniciemos el programa y sin ningn Bp puesto corremos el programa
nuevamente, llegamos hasta esta caja

Antes de dar click de ingresar licencia, colocamos los Bp y esperemos que pare en
alguno,
Ahora damos ingresar Licencia y vemos en olly, que paro justo ah en la direccin
00CFDE5C,

Por lo que se deduce que la call en si aparecer en 004588F6, probemos,

Aestolent
Entramos con f7 en esta call y veamos que realiza antes de llegar a esta direccin, al
parecer realiza una serie de operaciones lo mas seguro es que esta determinando el serial
que me va a mostrar en la box (1592A616502), y ya en si aparece la box como se
predijo en esa direccin (004588f6), por lo que nos queda solo seguir el proceso de
aparicin de la ventana Web, poniendo Bp justo a bajo de la direccin en la cual
apareci la box,

Ahora ingresar un serial cualquiera y dar OK, al dar click en OK vemos que
para en este ltimo Bp puesto, y no nos queda ms que tracear y observar que hace con
este serial falso,
Al tracear hasta el ret de esta rutina no se observa nada interesante, por lo que pasamos
el ret con f7, y ya salimos justo debajo de donde paro por primera vez (00cfde5c)

Por lo que se deduce que en esta call aparece la box y tambin checa si se dio OK o
cancelar, ya que el valor de Eax muestra 1, por lo tanto no brincara puesto que se dio
OK y en consecuencia el proceso de registro esta justo debajo de esta salto hacia abajo.
(Comprobado al dar cancelar a la box si salta despus hacer el Test).

Aestolent
Ahora que ya estamos en la zona caliente, del registro no nos queda ms que tracear y
observar en donde aparece la ventana de navegador y en si observar en donde empieza
el chequeo de registro.
Empecemos pues con el traceo, y observamos que en esta call de direccin 00CFE079
algo cambio en el cdigo de olly al pasarlo con f8,
Si vemos Antes de dar f8 se ve as

Aestolent
Despus de dar f8

Vemos que aparecieron unas call nuevas, pero porque?, bien sigamos, dando f8, y al
llegar aqu y dar f8

Aestolent
Nos manda directo a

Una excepcin y seguramente va a correr ya la ventana de navegador, bien


damos f9 y si ya apareci, tomando en cuenta esto, no nos queda mas que observar a
detalle que hace antes de llegar a esta call misteriosa, puesto que hizo aparecer unas call
a partir de esta ultima.

IV.-Determinacin de desemcriptacin de rutinas


comprobacin de serial.
Bien ahora reiniciamos el Programa y ponemos los Bp antes descritos y miremos a
detalle que realiza antes de llegar a esta call misteriosa, si somos muy observadores es
que la ultima call desemcripta una parte del programa pero aun as, no puedo ver donde
checa que mi serial es invalido, pero, me doy cuenta mas aun que en esta zona

Aestolent
Empieza a realizar una serie de operaciones y que utiliza mucho la zona de (EBP-3C),
sigmoslo en el dump vemos, (EBP=0012FBA8), entonces Ebp-3c=0012FB6C

Si damos f8, pasara el valor de Ebx a esta zona como podemos ver en los registros
Ebx=000012A,

Y si seguimos esta secuencia de operaciones, miraremos que en

Agregara la cantidad de 5A a esta zona en el dump, si damos f8 vemos que

Aestolent

Esta cantidad ahora vale 00 00 00 85, bien seguimos, traceando,

Hasta llegar a esta direccin vemos que aisl la parte inicial y final de mi serial falso, y
ahora les va a aplicar la operacin Xor, si se dan cuenta Eax=11 y Ebx=88, como
recuerdan mi serial introducido es 1122334455667788, as que demos F8, y vemos que
el valor resultado lo pone en Ebx
Vale 99

Bien sigamos, y vemos que

Al dump que se encuentra en EBP-3C (aun vale 85), le va a restar Ebx=99, y que al dar
f8 esta cantidad en el dump ahora vale

Aestolent

EC FF FF FF, y siguiendo el traceo vemos ahora que

Le va a sumar la cantidad de 64, al dar F8 vemos que en el dump ahora

Vale 00 00 00 50, bien sigamos, al seguir traceando nos damos cuenta que

En esta direccin 00CFE02F, mueve la cantidad del dump al valor de registro de Edx y
que vale 50, luego al seguir traceando nos damos cuenta que en esta ltima call, algo
ocurre,

Aestolent

Y desbloquee esta zona, pero al parecer esta desbloqueada de manera incorrecta, de lo


que si estamos seguros es que usa este valor resultado de las operaciones que realizo y
fuimos traceando y viendo que realiza, por lo que pondr un resumen a continuacin:
1ro a la zona de EBP-3C pas la cantidad de 12Ah,
2do realizo una comparacin y descont la cantidad de 0FF a esta zona (EBP-3C)
3ro sumo a esta zona la cantidad de 5Ah,
4to aisl la parte inicial y final de mi serial (11..88) y aplico Xor entre ambos
5to el resultado este Xor lo descont a la zona del dump (EBP-3C)
6to despus sumo 64 al resultado anterior,
7 finalmente uso esta cantidad resultante para de alguna manera desbloquear la zona que
esta ms abajo. De esta call misteriosa.
De manera breve hizo esto:
((12A-0FF)+5A) - (resultado de xor de valores del serial) + 64 = 50
(85)-(99)+64=50,
Ahora ya vimos que desbloqueo esta zona pero que lo hizo de manera incorrecta,
probablemente por que el serial debe cumplir ciertas reglas matemticas, a mi se me
ocurri que el valor correcto resultante seria cero, pero al intentar desbloquear esta
zona, simplemente no se desbloqueo, as que optamos por otra alternativa, que es de
usar un programa de desemcriptacion como lo es Cryptool
y hacer un anlisis de la parte encriptada del programa de la siguiente manera:

Aestolent
Una vez llegando a la direccin de la call misteriosa que se encuentra en 00CFE079 y
antes de dar F8, copiamos la parte encriptada, as:

Y se abre el programa que se llama Cyptoll y creamos un archivo nuevo,


damos como sigue:

Aestolent
Una vez hecho esto, damos Pegar, como sigue,

Y realizamos un anlisis,

Al dar Click nos manda una caja,

Cambiamos a 1 la longitud de la clave y damos Continuar, y vemos

Aestolent

Un clave, podra ser el resultado de esta ecuacin resultado del anlisis a detalle, por lo
que probamos y sustituimos este valor en la ecuacin
85-(Num 1 Xor Num 2)+64=CD,
Recodemos que esta herramienta es usada para encriptar y a la inversa tambin y que
adems, realiza anlisis de cdigo encriptados y posibles claves, que en este caso es la
que se uso, con la opcin Xor, ya que es la que usa para determinar si es igual o no
ciertos valores en este programa gds
Despejando la ecuacin para determinar el inicio y fin del serial:
As:
ecuacin
-(Num 1 Xor Num 2)=CD-85-64
(multiplicamos por -1)
(Num 1 Xor Num 2)= -CD+85+64
= - CD + E9
= 1C
As suponiendo que fuera cierta, esta ecuacin, damos valores a un serial y que inicio y
fin del mismo al aplicarle la operacin xor, el resultado sea igual a 1C,
78 xor 1C = 64
As el inicio es 78 y termino es 64, ya que aplicamos la operacin xor entre ambos el
valor ser 1C,
Nuestro serial queda como sigue:
781122334455667764 (ponemos un largo cualquiera es de 18 dgitos)
Ahora reiniciamos con olly y llegamos hasta la zona caliente, e ingresamos nuestro
serial, y traceemos hasta llegar a la call que al parecer es la encargada de desenciptar
parte del programa que checar si es valido el serial:
Al llegar a la call y dar F8, vemos que si efectivamente, resulto cierto nuestro anlisis:

Aestolent
Y ha desemcriptado esta parte del programa y listo para empezar con el anlisis del
serial, y registrarlo, en consecuencia al tracear nos damos cuenta que

No debe de brincar

Tenemos un salto y de quien depende si es valido o no el serial introducido, por lo que


se deduce que la call anterior al salto es la encargada directa de verificar si es correcto o
no.
V.- Haciendo Brute -force
As que reiniciamos el programa y entremos a esta call que al parecer es la encargada de
registrar el programa, llegando a esta call entrando vemos,

Otra call despus una comparacin y despus hay una comprobacin de cierto o
falso, vemos, y que si nos damos cuenta que comprobara que si el valor del dump de
[ESP], es igual a 9C5B, as que entremos, haber que hay ah,

Aestolent

Y aqu estamos al parecer es algo largo la rutina de comparacin, por lo que


leyendo algunos tutes para hacer keygen, no queda otra opcin mas que hacer un brute
force, en esta parte del cdigo del programa, as que, procedemos de la siguiente
manera:
1.- compilamos un programa , en este caso hecho en Vb6
Un textboox1 donde se pegara el cdigo ingresado, y otra texbox2 donde saldr
la licencia que resulte.
2.- Realizamos el copy-paste de este cdigo y usaremos el programa de radsam
para generar una dll, en el cual se puede hacer uso de este cdigo del programa, as se
usara esta dll como parte importante del programa generado en Vb, puesto que usara
para hacer el brute force.( archivo asm, y def)
Teniendo en cuenta que el serial resultante siempre deber de ser en los 2
extremos coincidente con la ecuacin..
Primero antes de empezar con la construccin del programa (KeyGen) para
generar esta licencia. Tenemos que observar que valores usa y se lleva a esta parte del
programa, como 1er valor vemos que mueve aqu:
1.- solo mueve el serial en si en dos grupos de 4 bytes, y ya en la zona de

Aestolent
Vemoslo arrancamos el programa e introducimos una licencia cualquiera yo
tomare 781592A61618976564 y vemos que solo mueve hasta el munero 65 es decir
solo toma 16 caracteres, mueve tambin el valor resultado del xor de los dos extremos
de mi licencia(1C)

Mas adelante ya dentro de la call que vemos que mueve este valor y vemos en el dump
que es, pues seguro que lo a usar para almacenar informacin o tomar valores para con
ellos hacer la rutina de chequeo de licencia, tomamos direccin del datos anteriores

Pues bien al parecer es todo lo que hay que tomar datos de los que hace uso, pero
seguramente hay un call antes de arrancar el programa que checa esta parte del
programa y determinar si esta registrado, por lo que hagamos search alls calls, e
introducimos la call 007D6CFC y vemos

Aestolent
As que reiniciamos y llegamos al oep mediante el uso del mtodo de las excepciones,
ponemos Bp en estas direcciones de estas call, y para primero en 007D6F67,

Entramos y vemos que va mover lo siguiente

Y que usa para chequear la licencia puesto que lo mueve a de EAX a [ESP], y [ESP]
Es usado aqui

Aestolent
pasamos esta call y llegamos al ret , salimos y vemos arriba, algo que dice registro
exitoso, pero nos damos cuenta que la comparacin al salir de la call no es la
comparacin con el num 9C5B, sigamos damos F9, y llegamos hasta la call de
07D6EBF, la pasamos y vemos arriba, un valor que al parecer es una fecha que toma
como referencia,

En fin que al salir de la call miro en el sstack y veo que ha aparecido un valor que es
15200605
1592A616
En consecuencia checo que antes de esta call esta una llamada al registro y toma el
valor de la bios en mi maquina que vale 05/15/06
Pero como lo pide en
formato ddyyyymm, resulta 15200605, en fin que multiplicado este valor por el num 25
y pasamos el resultado a valor hexagesimal resulta 16A69215 valor que esta invertido
en la stack, y resulta que este valor me muestra en la box de registro y que usara
seguramente para el registro de cada maquina en si, y que para hacer el keyGen ser
necesario hacer una llamada a este registro y tomar este valor y transformarlo y as
obtener una licencia valida para cada maquina.(yo tomare el de mi maquina)
Analizando ms el cdigo antes de esta 2da call vemos que mueve estos valores

Aestolent

Que en este caso tambin usara para checar si esta registrado o no el programa, as pues
llegamos hasta el pop esi y vemos en el dump que ya paso estos valores a esta direccin

Bien entramos a la call para verificar si estamos o no registrados, y vemos que mueve
valores cero puesto que no hay ningn valor dentro en fin si corremos el programa y
llegamos a la nag vemos

Asi que como datos necesitamos la fecha de la bios, necesitamos los valores que estan
en el dump los de 00D73484, los valores del offset que esta en el dump 007d59FAC
Es todo lo que hay que hacer, y nada mas se creara una dll importante en la cual se hara
el llamado para hacer el brute force, y obtener la licencia valida y que cumpla con la
condicion
Cmp Word ptr SS:[esp], 9c5b
Sete al
Y obviamente que cumpla con la ecuacion, asi pues ponder en orden el cuerpo del
keygen

Aestolent
1ro hacemos la llamada a la dll
Antes creamos una form
De la siguiente manera

Text1

Text3

Command3
Text2
Command1
bGenerar
Command2

Asi que se compilara un programa en Vb que haga el llamado a esta dll


Option Explicit
Private Declare Function Proc0 Lib "Ferreteria.dll" (matriz As Byte, ByVal Fecha As Long) As Boolean
Dim ValorFechaBIOS As Long
Dim MatSerial() As Byte
Dim Codigo As String
Bien ahora , lo que hice yo es pegar la fecha de mi bios copy paste en la text3, y al oprimir cargar, me diera el resultado dim. X 25

Private Sub Command1_Click()


Dim fec
Dim a
Dim b
Dim c
Dim number As Integer
If Text3.Text = "" Then
MsgBox "INGRESE FECHA BIOS"
End If
If Not Text3.Text = Format(Text3.Text, number) Then
fec = Format(Text3.Text, "ddyyyymm")
a = Format(Text3.Text, "dd")
b = Format(Text3.Text, "mm")
c = Format(Text3.Text, "yyyy")
If b < 13 Then
If a < 13 Then
fec = Format(Text3.Text, "mmyyyydd")
End If
End If
Text3.Text = fec * 25
Text3.Enabled = False
End IfEnd Sub

Luego copio o escribo el codigo que me da la nag de registro en text1, y al dar clic en boton bGenerar
Resulta

Aestolent
Private Sub bGenerar_Click()
Dim Serial0 As String
Dim SerialN As String
Dim b As Byte
Dim I As Long
Err.Clear
On Error GoTo ErrorDLL
Codigo = Trim(Text1.Text)
ValorFechaBIOS = Text3.Text 'mueve a mi fecha bios 15200605 por 25
If Text1.Text = "" Then
MsgBox "falta introduzca codigo", vbCritical + vbOKOnly, "Lo siento"
End If

If Not GetBytesSerial(Serial0, SerialN) Then


MsgBox "falta introduzca codigo", vbCritical + vbOKOnly, "Lo siento"
Exit Sub
End If
ReDim MatSerial(0 To 8)
MatSerial(8) = CByte("&H" + SerialN)
MatSerial(0) = CByte("&H" + Serial0)
Serial0 = ""
'Ferreteria
If Not Proc0(MatSerial(0), ValorFechaBIOS) Then GoTo ErrorDLL
For I = 0 To 8
b = MatSerial(I)
Serial0 = Serial0 + HexaByte(b)
Next I
Text2.Text = Serial0
pone la licencia en la text2
Text1.Text = Codigo
Exit Sub
ErrorDLL:
MsgBox "Error al generar el serial", vbExclamation
End Sub

genera licencia y hace llamado a la dll


bruteforce
Crearemos dentro de la dll una funcionProc0

Luego realizamos la funcin GetByteserial( propuse valores constantes)(ecuacin)


Function GetBytesSerial(PrimerosCar As String, UltimosCar As String) As Boolean
'ferreteria
PrimerosCar = HexaByte(120) 78 hexa
UltimosCar = HexaByte(100)
64 hexa
GetBytesSerial = True
End Function

La funcin HexaByte

Function HexaByte(N As Byte) As String


Dim s As String
If N < 16 Then
HexaByte = "0" + Hex(N)
Else
HexaByte = Hex(N)
End If
End Function
Y en caso opcional las siguientes partes
Admita solo valores de tipo mayuscula en caso de letras.
Private Sub Text1_KeyPress(KeyAscii As Integer)
KeyAscii = Asc(UCase(Chr(KeyAscii))) admite solo mayusculas
Text1.SetFocus
End Sub

Aestolent
Otro commandButton en evento clic, para ingresar la fecha bios, automticamente
Private Sub Command3_Click()
Dim MiObjeto As Object
'Creamos el objeto
Set MiObjeto = CreateObject("Wscript.Shell")
'Lo usamos, en este caso leemos una clave y mostramos el valor
MsgBox MiObjeto.regRead("HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\SYSTEMBiosDate")
Text3.Text = MiObjeto.regRead("HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\SYSTEMBiosDate")
'Eliminamos la variable
Set MiObjeto = Nothing
End Sub

Copiar la licencia resultante al clipboard


Private Sub Command2_Click()
' copiar la seleccin en el Clipboard
If Text2.SelLength > 0 Then
Clipboard.SetText Text2.SelText
Else
' copiar todo el texto
Clipboard.SetText Text2.Text
End If
End Sub

Bien la parte importante del KeyGen esta en el botn bGenerar, que hace llamadas a las
distintas funciones.
Asi pues compilamos y guardamos el exe.
Ahora haciendo uso de Radasm, crearemos una dll en la cual meteremos los valores que
se lleva el programa de gds para la determinacin de la licencia valida
1.- la FechaBios
2.- valor que se encuntra en el dump de 00D73484
3.- Los valores en el dump de 007D59FAC
As pues quedan el archivo asm y def, como sigue, no lo explicare como funciona.
Fererteria.Asm
.386
.MODEL flat,stdcall
OPTION CASEMAP:NONE
Include windows.inc
Include user32.inc
Include kernel32.inc
IncludeLib user32.lib
IncludeLib kernel32.lib
.DATA
; Ferreteria direccion 007D59FAC
tabla1_0
db 00h, 00h, 00h, 00h, 03h, 00h, 00h, 00h, 01h, 00h, 00h, 00h, 02h, 00h, 00h, 00h, 01h, 00h, 00h, 00h, 03h, 00h, 00h, 00h, 01h, 00h, 00h,
00h, 00h, 00h, 00h, 00h
db 02h, 00h, 00h, 00h, 03h, 00h, 00h, 00h, 02h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 03h, 00h, 00h, 00h, 02h, 00h, 00h, 00h, 00h, 00h, 00h,
00h, 01h, 00h, 00h, 00h

Aestolent
db 00h, 00h, 00h, 00h, 02h, 00h, 00h, 00h, 02h, 00h, 00h, 00h, 01h, 00h, 00h, 00h, 03h, 00h, 00h, 00h, 00h, 00h, 00h, 00h, 03h, 00h, 00h,
00h, 01h, 00h, 00h, 00h

;ferretera direccion 00D73484


tabla2_0

db 096h, 079h, 069h, 039h, 051h, 003h, 062h, 0F5h, 088h, 083h, 0A5h, 002h, 02Bh, 048h, 06Fh, 0DCh

.code
DllEntry proc hInstance:HINSTANCE, reason:DWORD, reserved1:DWORD
mov eax,TRUE
ret
DllEntry Endp
Proc0 proc matcodigo:DWORD, fechaBIOS:DWORD
add esp, -8
mov eax, offset tabla2_0
mov dword ptr [eax], 039697996h
mov ecx, fechaBIOS
xor dword ptr [eax], ecx
inicio0:
mov edx, matcodigo
mov ecx,dword ptr ds:[edx]
mov dword ptr ss:[esp],ecx
mov ecx,dword ptr ds:[edx+4]
mov dword ptr ss:[esp+4],ecx
mov edx,esp
xor ecx,ecx
call Proc0_calcula
;llama a rutina de comparacion de serial
cmp word ptr ss:[esp],09c5bh
jne seguir0
mov eax, dword ptr [esp+4]
and eax, 02h
jz seguir0
mov eax, dword ptr [esp+4]
and eax, 04h
jz seguir0
mov eax, dword ptr [esp+4]
and eax, 020h
jz seguir0
mov eax, dword ptr [esp+4]
and eax, 040h
jz seguir0
mov eax, dword ptr [esp+4]
and eax, 080h
jz seguir0
mov eax, dword ptr [esp+4]
and eax, 0100h
jz seguir0
mov eax, dword ptr [esp+4]
and eax, 0200h
jz seguir0
mov eax, dword ptr [esp+4]
and eax, 0400h
jnz fin0
seguir0:
mov eax, matcodigo
inc byte ptr[eax+7]
cmp byte ptr[eax+7], 0FFh
jne vuelta0
mov byte ptr[eax+7], 0h
inc byte ptr[eax+6]
cmp byte ptr[eax+6], 0FFh
jne vuelta0
mov byte ptr[eax+6], 0h
inc byte ptr[eax+5]
cmp byte ptr[eax+5], 0FFh
jne vuelta0
mov byte ptr[eax+5], 0h
inc byte ptr[eax+4]
cmp byte ptr[eax+4], 0FFh
jne vuelta0
mov byte ptr[eax+4], 0h
inc byte ptr[eax+3]
cmp byte ptr[eax+3], 0FFh
jne vuelta0
mov byte ptr[eax+3], 0h
inc byte ptr[eax+2]
cmp byte ptr[eax+2], 0FFh
jne vuelta0
mov byte ptr[eax+2], 0h
inc byte ptr[eax+1]
cmp byte ptr[eax+1], 0FFh
jne vuelta0
mov byte ptr[eax+1], 0h

Aestolent
inc byte ptr[eax]
cmp byte ptr[eax], 0FFh
jne vuelta0
jmp fin20
vuelta0:
mov eax, offset tabla2_0
jmp inicio0
fin20:
xor eax, eax
jmp salida0
fin0:
mov al, 1
salida0:
add esp, 8
ret
Proc0 endp
Proc0_calcula proc
push ebx
push esi
push edi
add esp,-018h
mov byte ptr ss:[esp+8],cl
mov dword ptr ss:[esp+4],edx
mov dword ptr ss:[esp],eax
mov eax,dword ptr ss:[esp+4]
mov eax,dword ptr ds:[eax]
mov dword ptr ss:[esp+0ch],eax
mov eax,dword ptr ss:[esp+4]
mov eax,dword ptr ds:[eax+4]
mov dword ptr ss:[esp+010h],eax
mov dword ptr ss:[esp+014h],4
mov esi,offset tabla1_0 ;0d82fach
@Ferreter_008035f70:
mov edx,dword ptr ss:[esp+0ch]
xor eax,eax
mov al,byte ptr ss:[esp+8]
mov ebx,eax
add ebx,ebx
lea ebx,dword ptr ds:[ebx+ebx*2]
mov eax,dword ptr ds:[esi+ebx*8]
mov ecx,dword ptr ss:[esp]
mov ecx,dword ptr ds:[ecx+eax*4]
mov eax,dword ptr ds:[esi+ebx*8+4]
mov edi,dword ptr ss:[esp]
mov eax,dword ptr ds:[edi+eax*4]
mov ebx,dword ptr ds:[esi+ebx*8+8]
mov edi,dword ptr ss:[esp]
mov ebx,dword ptr ds:[edi+ebx*4]
add edx,ebx
add ebx,edx
mov edi,edx
shr edi,7
xor edx,edi
add ecx,edx
add edx,ecx
mov edi,ecx
shl edi,0dh
xor ecx,edi
add eax,ecx
add ecx,eax
mov edi,eax
shr edi,011h
xor eax,edi
add ebx,eax
add eax,ebx
mov edi,ebx
shl edi,9
xor ebx,edi
add edx,ebx
add ebx,edx
mov edi,edx
shr edi,3
xor edx,edi
add ecx,edx
mov edx,ecx
shl edx,7
xor ecx,edx
add eax,ecx
mov edx,ebx
shr edx,0fh
xor eax,edx
add ebx,eax
mov eax,ebx
shl eax,0bh
xor ebx,eax

Aestolent
mov eax,dword ptr ss:[esp+010h]
xor eax,ebx
mov edx,dword ptr ss:[esp+0ch]
mov dword ptr ss:[esp+010h],edx
mov dword ptr ss:[esp+0ch],eax
add esi,0ch
dec dword ptr ss:[esp+014h]
jnz @Ferreter_008035f70
mov eax,dword ptr ss:[esp+4]
mov edx,dword ptr ss:[esp+010h]
mov dword ptr ds:[eax],edx
mov eax,dword ptr ss:[esp+4]
mov edx,dword ptr ss:[esp+0ch]
mov dword ptr ds:[eax+4],edx
add esp,018h
pop edi
pop esi
pop ebx
Ret
Proc0_calcula endp
End DllEntry

Y el archivo Ferretera.def
Library skeleton
EXPORTS
Proc0

Damos assemble y rebuild , y ya esta en una carpeta copiamos el exe y la dll, corremos
y vemos , tipeemos la fecha bios: "C:MI
PC\HK_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\SYSTEMBiosDate",

Damos cargar y el valor de la fecha cambio a 380015125(1592A616), que equivale al


valor en hexa de parte del cdigo que nos da la nag de registro, bien ahora ingresamos el
codigo 1592A616102, damos dame Licencia
Pasenlo a hexa
Y queda

Bien ahora corremos el programa Ferretera.exe e ingresamos esa licencia, y no pasa


nada no me mando la ventana de navegador, ahora, suponemos que se ha registrado bien
cerramos y reiniciamos el programa y al abrirlo, Vemos:

Aestolent

Conclusin:
En este caso se hizo con ayuda de de herramientas como lo es cryptool, radsam y visual
Basic. En fin un poco largo lo del cdigo para realizar el programa, pero en fin realizado
por McksysArgentina, y yo me tome el tiempo para realizar este tute, pues me pareci
interesante este mtodo para registrar este programa.
Hay que leerse algunos tutes de creacin de Keygen en Vb y Compilar programas en
Radasm, etc. Para entender bien lo que hace la Dll
Como comentario adicional es que las textbox de fecha bios se puede evitar y los
commandbuton de cargar y fecha bios tambin se pueden evitar, se hizo con la finalidad
de observar que valores toma y los transforma, y como es que si usa el cdigo de
registro que manda la nag,, tambin de tomar valores aleatorios en los dos extremos de
la licencia aqu, en fin es todo.
Saludos a la lista

También podría gustarte