jrudiman's tutorial #08
Programa: SmackPlay 3.1 for Windows
Descripción: Reproductor de animaciones .SMK
URL: RAD
Tipo de protección: Nag-screen.
Bug: Aparece un mensaje al finalizar la reproducción.
Objetivo: Evitar que aparezca el nag-screen.
Herramientas: W32Dasm 8.93, Hiew 6.10
Fecha: Junio de 1999

Introducción
Aquí tenemos otro programa que, una vez finalizada la reproducción, te muestra un bonito NAG-screen diciendo que SmackPlay is part of the Smacker.... Utilizaremos el método de siempre, pero esta vez variaremos la forma de parchear el salto condicional.

Al ataque!
Desensamblamos el SMKPLW.EXE con el W32Dasm. Vammos a StrRef (String References) y buscamos el famoso mensaje. Hacemos doble click y veremos el siguiente código:

...bla...bla...bla...
:004064D4 TEST AL,AL
:004064D6 JE 004064ED
:004064D8 PUSH 00...
:004064DA PUSH 00...
:004064DC PUSH 00...

*Possible String Data Ref. from Data Obj. 001 -> "SmackPlay is part of the Smacker..."
:004064DE PUSH 00415F34
//estás aquí

*Possible String Data Ref. from Data Obj. -> "SmackPlay-V3.1r"
//título de la ventana
:004064E8 PUSH 0041613C
:004064EA CALL 004046F0

*Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004064D6 (C)
:004064ED POP EBP
:004064ED POP EDI
:004064ED POP ESI
...bla...bla...bla...

Observamos el hecho de que aparezca el cuádro de diálogo o no solo depende del JE. Si no salta, aparece y si salta no. Lo más fácil ahora sería cambiar el JE por un JMP. Pero no, veremos otro método igual de eficaz y más rebuscado.
Vemos que justo antes del JE hay un TEST AL,AL (84C0). Esta instrucción pone el flag de zero (ZF a 0, haciendo que el JE (o JZ) no salte. En cambio, si hubiera un OR AL,01 (0C01) forzaría el salto, al poner el ZF a 1. Miramos el Offset de TEST (64D4h) y con el HIEW cambiamos el 84C0 por 0C01.

EOF
Bien, de esta forma evitamos que aparezca el mensaje después de reproducir la animación.