jrudiman's tutorial #06
Programa: Easy CD-DA Extractor 3
Descripción: Rippeador de CDs de Audio a MP3s
URL: Poikosoft
Tipo de protección: Time-limit.
Bug: A los 15 días expira.
Objetivo: Hacer que no expire nunca.
Herramientas: "http://members.cox.net/w32dasm/">W32Dasm 8.93, Hiew 6.10
Fecha: Junio de 1999

Introducción
Aquí tenemos otro programa que a los 15 días expira. Pero en vez de utilizar el texto que aparece en el cuadro de diálogo para encontrar el código de la protección, vamos a usar la función KERNEL32.GetSystemTime.

Al ataque!
Desensamblamos el fichero CDDAEX.EXE con el W32Dasm. Nos vamos a ImpFn (Imported Functions) y hacemos doble click en KERNEL32.GetSystemTime. Nos aparece el siguiente código:

...bla...bla...bla...
*Reference to: KERNEL32.GetSystemTime //estás aquí
...bla...bla...bla...
CMP EDX,EAX
JA 0040716E
//salta si expired, bad-boy
SUB EDX,EAX
CMP EDX,00000015
//compara contador con 15 días
JBE 0040718D //salta si no expired, good-boy
...bla...bla...bla...
*Possible String Data Ref from Data Obj. -> "Has expired."
...bla...bla...bla...

Bueno, esta parte del código está más clara que el agua. Seguro que ya te imaginas lo que hay que hacer. Bien! Parchear los saltos condicionales. Miramos primero los Offsets (6765h y 676Ch respectivamente). El segundo tiene que ser incondicional (saltar siempre), por tanto, hay que cambiar el 761F por EB1F (JBE por JMP). Para el primer salto, tendríamos que NOPearlo, pero como dicen los grandes senseis, el NOP es el último recurso. Por tanto, podemos cambiar el JA por INC EAX, DEC EAX, que al fin y al cabo tampoco hace nada. Lo dicho, en 6765h modificamos el 7707 por 4048.

EOF
Ale, ya podeis evaluarlo en toda regla.