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