1301-Keygen Ferreteria 5.83 by Aestolent

38
Aestolent Programa Ferretería 5.83 Pagina de descarga www.gdsistemas.com.ar País origen software Argentina Compilador Borland Delphi v 6.0 – v 7.0 Protección tElock v 0.98 segun rdgPacker v 0.6.5 Objetivo Conseguir un serial valido y registrarlo Herramientas ollyDbg v 1.1, Cryptool v 1.4(www.cryptool.org ), RdgPcker v 6.5, radsam, Vb 6, ide masm32 nivel medio Cracker Aestolent(Solo hice el tutorial todos los meritos a MCKSys Argentina) justificación Me pareció un buen software bien protegido y algo nuevo en protección, como para dejar asentado el método. Procedimiento: I.-Análisis compilador del programa II.-Ejecución de programa para ver limitantes o restricciones y forma de registro III.-Ejecución con Olly y posible solución. IV.-Determinación de desemcriptación de código V.-Haciendo Brute-Force para determinar el serial I.- Análisis de compilador y posible protección, Veamos si abrimos con rdgPacker v 0.6.5, vemos.

description

kanecrox

Transcript of 1301-Keygen Ferreteria 5.83 by Aestolent

Programa

Aestolent

ProgramaFerretera 5.83

Pagina de descargawww.gdsistemas.com.ar

Pas origen softwareArgentina

CompiladorBorland Delphi v 6.0 v 7.0

ProteccintElock v 0.98 segun rdgPacker v 0.6.5

ObjetivoConseguir un serial valido y registrarlo

HerramientasollyDbg v 1.1, Cryptool v 1.4(www.cryptool.org), RdgPcker v 6.5, radsam, Vb 6, ide masm32

nivelmedio

CrackerAestolent(Solo hice el tutorial todos los meritos a MCKSys Argentina)

justificacinMe 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 registroIII.-Ejecucin con Olly y posible solucin.

IV.-Determinacin de desemcriptacin de cdigoV.-Haciendo Brute-Force para determinar el serialI.- Anlisis de compilador y posible proteccin, Veamos si abrimos con rdgPacker v 0.6.5, vemos.

Esta en Delphi y empacado, II.-Ejecucin de programa y ver limitantes o restriccionesAl 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

1592A616102Al 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,

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

Demos aceptar, y vemosParo 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,

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,

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

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 004588F6Direccin de la 2da call que sale 00CFDE5CAl 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,

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

Despus de dar f8

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

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

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

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 EbxVale 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

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,

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

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

Un clave, podra ser el resultado de esta ecuacin resultado del anlisis a detalle, por lo que probamos y sustituimos este valor en la ecuacin85-(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 gdsDespejando 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 = 64As 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:

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

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 -forceAs 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,

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

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

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

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 vemosAsi 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 007d59FACEs 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 condicionCmp Word ptr SS:[esp], 9c5b

Sete al

Y obviamente que cumpla con la ecuacion, asi pues ponder en orden el cuerpo del keygen

1ro hacemos la llamada a la dll

Antes creamos una form

De la siguiente manera

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 StringBien 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 SubLuego copio o escribo el codigo que me da la nag de registro en text1, y al dar clic en boton bGenerar

Resulta

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 ErrorDLLCodigo = 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 = ""genera licencia y hace llamado a la dll 'Ferreteriabruteforce If Not Proc0(MatSerial(0), ValorFechaBIOS) Then GoTo ErrorDLL Crearemos dentro de la dll una funcionProc0 For I = 0 To 8

b = MatSerial(I)

Serial0 = Serial0 + HexaByte(b)

Next I

Text2.Text = Serial0 pone la licencia en la text2Text1.Text = Codigo

Exit Sub

ErrorDLL:

MsgBox "Error al generar el serial", vbExclamation

End SubLuego realizamos la funcin GetByteserial( propuse valores constantes)(ecuacin)Function GetBytesSerial(PrimerosCar As String, UltimosCar As String) As Boolean

'ferreteria

PrimerosCar = HexaByte(120) 78 hexaUltimosCar = HexaByte(100) 64 hexaGetBytesSerial = 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 FunctionY en caso opcional las siguientes partesAdmita solo valores de tipo mayuscula en caso de letras.

Private Sub Text1_KeyPress(KeyAscii As Integer)

KeyAscii = Asc(UCase(Chr(KeyAscii))) admite solo mayusculasText1.SetFocus

End Sub

Otro commandButton en evento clic, para ingresar la fecha bios, automticamentePrivate 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 007D59FACtabla1_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

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 00D73484tabla2_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

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

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

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 listaciclo

No debe de brincar

Text1

Text3

Text2

bGenerar

Command1

2

1

2

3

1

Command3

Command2

Pasenlo a hexa