* Programa 32 Bytes cuya única limitación es que traduce 5 minutos si y 5 no por
no estar registrado.
* Aparece una nag-screen cada vez que se arranca el programa.
* El objetivo es suprimir la Nag-screen y la limitación de tiempo
* Función SoftIce.
Apoyo del desensamblado, comprobación de los procesos, paradas, etc...
* Función del W32dasm.
Su función es aportarnos el desensamblado en lenguaje máquina.
* Función del UltraEdit.
Editor hexadecimal para hacer los cambios que necesitemos en el ejecutable.
* Función del Hacker's View.
Busca y/o remplaza comandos de ensamblador, cadenas hexadecimales y de texto.
|
Arrancamos el programa y nos muestra la siguiente nag-screen:
Lo primero que hay que hacer es eliminar esa nag-screen, para lo cual, una vez
desensamblado con el W32dasm, guardamos el project file para no tener que
desensamblarlo mas tarde. Pulsamos el botón Seach para buscar NOTA:
y encontraremos:
* Possible StringData Ref from Data Seg O64 ->"NOTA: Esta copia de WinBabel no "
Sin embargo no nos sirve ya que es la NOTA: de los 5 minutos. Buscamos la siguiente,
pero W32dasm no encuentra más, que raro pero si lo habia comprobado con UltraEdit
y había 2 cadenas que contenian NOTA:, utilizo el Loader32 del SoftIce para cargar
el programa, una vez en la ventana del SoftIce, coloco un Bpx MessageBoxA, y pulso
F5 y aparece la Nag-Screen, pulsamos en Aceptar y nos regresa a la ventana del
SoftIce y pulsando F12, nos situaremos dentro de WINBABEL!CODE+4e3D en la linea
siguiente de la llamada del mensaje. Desplazandonos por la ventana del código
veremos:
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00414DDB(C)
|
:00414DF2 E8ABCDFFFF call 00411BA2 ;Iniciar Traductor
:00414DF7 8B4508 mov eax, dword ptr [ebp+08]
:00414DFA A310254200 mov dword ptr [00422510], eax
:00414DFF E872FAFFFF call 00414876 ;Iniciar lista controles
:00414E04 681B4C4100 push 00414C1B ;Procesa mensaje
:00414E09 8D83490A0000 lea eax, dword ptr [ebx+00000A49] ;WINBABEL
:00414E0F 50 push eax
:00414E10 FF7508 push [ebp+08]
:00414E13 E822B3FFFF call 0041013A
:00414E18 83C40C add esp, 0000000C
:00414E1B E8A1ECFFFF call 00413AC1 ;ESPAC
:00414E20 85C0 test eax, eax
:00414E22 7450 je 00414E74 ;Mostrar Nag/Crear Ventana Programa
:00414E24 6AFF push FFFFFFFF
* Reference To: USER32.MessageBeep, Ord:0000h
|
:00414E26 E829A10000 Call 0041EF54
:00414E2B 6A00 push 00000000
:00414E2D 8D83580B0000 lea eax, dword ptr [ebx+00000B58] ;WinBabel
:00414E33 50 push eax
:00414E34 8D83520A0000 lea eax, dword ptr [ebx+00000A52] ;NOTA:
:00414E3A 50 push eax
:00414E3B 6A00 push 00000000
* Reference To: USER32.MessageBoxA, Ord:0000h
|
:00414E3D E80CA10000 Call 0041EF4E ;Mustra Nag-Screen
:00414E42 6A00 push 00000000 ;Aquí paro SoftIce delpues de F12
La eliminación de la nag-screen está en el salto condicional de la línea 414e22,
por lo que sustituimos 74 por 75 en el Offset 5422 Una vez parcheado con UltraEdit
lo probamos y observamos que funciona perfectamente, no mostrando la nag-screen y
entrando directamente la siguiente ventana del programa que mantiene siempre en
primer plano:
Transcurridos 5 minutos al pinchar en una de la opciones:
Traducir Ventanas, Traducir Web, y/o Traducir Portapapeles muestra la siguiente
ventana:
Desensamblado con el W32dasm, el proyecto que guardamos. Pulsamos el botón Seach
para buscar por ejemplo NOTA:
y encontraremos sólo:
* Possible StringData Ref from Data Obj ->"NOTA: Esta copia de WinBabel no "
Desplazandonos más arriba veremos el siguiente listado:
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00414278(U)
|
:0041428E E8B4F8FFFF call 00413B47 ;Es tiempo PAC
:00414293 85C0 test eax, eax
:00414295 7449 je 004142E0 ;No mostrar Nag/Seguir
:00414297 83FB01 cmp ebx, 00000001
:0041429A 740A je 004142A6 ;Mostrar Nag/Seguir
:0041429C 83FB02 cmp ebx, 00000002
:0041429F 7405 je 004142A6 ;Mostrar Nag/Seguir
:004142A1 83FB03 cmp ebx, 00000003
:004142A4 753A jne 004142E0
* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:0041429A(C), :0041429F(C)
|
:004142A6 6A00 push 00000000
:004142A8 E874F5FFFF call 00413821 ;Poner estado traducir
:004142AD 59 pop ecx
:004142AE 6AFF push FFFFFFFF
* Reference To: USER32.MessageBeep, Ord:0000h
|
:004142B0 E89FAC0000 Call 0041EF54 ;MessageBeep
:004142B5 6A04 push 00000004
* Possible StringData Ref from Data Obj ->"WinBabel PAC"
|
:004142B7 688E0C4200 push 00420C8E ;Guarda dirección WinBabel PAC
* Possible StringData Ref from Data Obj ->"NOTA: Esta copia de WinBabel no "
->"esta registrada."
|
:004142BC 68470C4200 push 00420C47 ;Guarda dirección NOTA: ...
:004142C1 6A00 push 00000000
* Reference To: USER32.MessageBoxA, Ord:0000h
|
:004142C3 E886AC0000 Call 0041EF4E ;Mustra mensaje
:004142C8 83F806 cmp eax, 00000006
:004142CB 0F8526010000 jne 004143F7
:004142D1 6A05 push 00000005
La eliminación de la limitación de tiempo está en el salto condicional de la
línea 414295, por lo que sustituimos 74 por EB en el Offset 4895 Una vez
parcheado con Hacker's View podremos analizar el programa sin limitaciones.
Esto es todo, hasta la próxima ..... Un Saludo
|