Post on 29-Sep-2015
description
transcript
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