A
trabajar, bien como siempre lo primero es prepararnos todo para trabajar comodamente,
iniciamos windows cargando el SoftIce, hacemos una copia del ejecutable RegStudio.exe con
el nombre Studio.exe, desensamblamos el original y editamos con el editor Hex la copia
Studio.exe y por ultimo adelantamos la fecha de windows 1 mes para trabajar con el
programa expirado, ya tenemos todo a punto :-)
Ejecutamos RegStudio.exe y lo primero que
vemos es una ventanita con la opcion de registrarnos y con el siguiente aviso "Trial period has expired. Do you tal y tal"
Directamente vamos al W32dasm y buscamos esta cadena de texto en las strign data
Refernces pulsando sobre [STRN-REF], hay podemos ver
la referencia que buscamos, algo que me llamo la atencion es que hay poquisimas
referencias a cadenas de texto por ejemplo no vemos ninguna que haga referencia a cuantos
dias de evaluacion nos quedan, ni el tipico invalid code, Thank you for register etc. Y el
motivo de esto es la librerφa regStudio.dll donde se encuentran todas estas y muchas mas,
de hecho husmeando un poquito si la desensamblais podeis modificar la rutina que decide si
el reg metido es correcto o no y que os acepte cualquier numero de registro, ademas no
cuenta con la proteccion que tiene el ejecutable osea que modifiques lo que sea el
programa se inicia, pero creo que es mas interesante atacar al ejecutable y romperle el
royo anti inicio que tiene.
Bueno pulsamos sobre Trial
period has expired. Do you y vamos a:
* Possible StringData Ref from
Data Obj ->"Trial period has expired. Do
|
00401371 68D4504000 push
004050D4 – Aquφ Aparecemos
00401376 6A00
push 00000000
y justo encima de esta referencia tenemos este
codigo:
* Referenced by a (U)nconditional or (C)onditional
Jump at Address:
|:00401351(C)
0040135C 83F801 cmp eax, 00000001
0040135F 7509
jne 0040136A – Salto Interesante
00401361 5F
pop edi
00401362 5E
pop esi
00401363 81C4F4000000 add esp, 000000F4
00401369 C3
ret – Retorno Cabron
* Referenced by a (U)nconditional or
(C)onditional Jump at Address
0040135F(C)
0040136A 6A04 push 00000004
0040136C 6824564000 push 00405624
Viendo que tenemos un jne en 0040135F es logico pensar que si este no se ejecuta pillara el retorno
(ret)que hara que retorne a la llamada(call) padre, evitando asi el mensage de expiracion,
0040135F 7509 jne 0040136a por
un nop nop para que no se ejecute el salto y no llege nunca a mostrarnos
el mensage de expired, probemos localizamos el offset de este salto que es 135F
y nos vamos al editor hex cambiamos el 7509 por un 9090
con esto el salto queda eliminado ya no existe, probamos a ejecutar studio.exe y
como os comente el programa no hace nada antes de abrirse ya se ha cerrado (podeis probar
a modificar otras instrucciones, os pasara lo mismo), veamos por que puede ocurrir esto.
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00401351(C)
0040135C 83F801 cmp eax,
00000001
0040135F 7509
jne 0040136A – Salto Interesante
00401361 5F
pop edi
00401362 5E
pop esi
00401363 81C4F4000000 add esp, 000000F4
00401369 C3
ret – Retorno Cabron
Bueno pues vemos que si quitamos del medio el
jne la siguiente instrucci≤n importante es el retorno ( RET) en azul ahora tenemos que
aberiguar que llamada(call) es la responsable de que este el ret.
para localizar la llamada(call) responsable de que exista ese ret no tenemos mas opcion
que utilizar nuestro querido y amado SoftIce, ejecutamos la consola del softice cargamos
el archivo RegStudio.exe. Para saber donde se encuentra el call responsable podemos poner
un BreakPoint direcctamente a el salto que hemos parcheado antes (aseguraros de que el
ejecutable que cargais en el softice es el original y que no es el que hemos parcheado)
pulsamos el boton de los engranajes (load)Y cuando nos salga la tipica ventana del softice
aceptamos y entramos directos al soft (apuntaros en un papel la direccion de memoria del
salto para ponerle un BP)
Bpx 0040135F
Pulsamos F5 para que siga la ejecucion del
programa e inmediatamente se para en la direccion a la que le pusimos el BP, figaros como
en
0040135F 7509
jne 0040136A – que es
donde se para el soft
hay a su derecha una flecha indicando que este
salto se ejecutara a la direccion de memoria que indica, claro se salta el RET que nos
interesa estudiar, osea que parcheamos el jne como antes convirtiendolo en
un nop nop, para hacerlo desde le soft metemos el commando [a]
que es ensamblar
a 40135f [Intro] en azul lo que ponemos pulsamos Intro, y
seguimos los pasos
- 0040135f nop [Intro]
- 00401360 nop [Intro]
- 00401360 [Intro]
y ya hemos partcheado el salto suprimiendolo ahora vamos pulsando F10 hasta llegar al
ret y cuando llegamos pulsamos otro F10 y justamente nos lleva a
0040103A E8C1020000
call 00401300 – La responsable del ret
0040103F 85C0
test eax, eax
00401041 0F85BE010000
jne 00401205 – muy interesante
Tenemos localizado la llamada responsable del,
ret hechemos un ojo, Esto fue lo que ocurrio cuando parcheamos antes el primer salto, y lo
convertimos en mierda el ret nos trae a
0040103F 85C0
test eax, eax –
AQUI
aquφ se comprueban los valores de eax si
estos son iguales hara que se ejecute
00401041 0F85BE010000
jne 00401205 – SI SE EJECUTA (MAL CRACKER)
si se ejecuta nos manda a
00401205 5F
pop edi -- AQUI
00401206 5E
pop esi
00401207 5D
pop ebp
00401208 33C0
xor
eax, eax
0040120A 5B
pop ebx
0040120B 81C4F4010000 add esp, 000001F4
00401211 C21000
ret
0010 –
NOS SACA DEL PROGRAMA
bueno si no entendeis muy bien os
recomiendo que traceeis paso a paso con el softice
al ejecutarse el salto 00401041
0F85BE010000 jne 00401205 veis que nos lleva a
una serie de instrucciones que nos sacan inmediatamente del programa he aquφ
la estupida proteccion, si es que esta
puesta como tal, aunque creo que si ya que si os fijais en cualquier pedazo de codigo
encontrais un ret que si lo seguis con el soft nos trae al mismo sitio.
Ya solo nos queda hacer que no se ejecute nunca este salto, para ello lo eliminamos con
una serie de 6 nop o 90. Localizamos el offset que es 1041 y vamos a nuestro
editor hex donde cambiamos 0F85BE010000
por 909090909090 salvamos los cambios y el
ejecutable funciona perfectamente sin limitaciones de tiempo.
Recordad que tenemos que parchear los dos saltos que hemos analizado, acordaros tambien
de volver a poner la fecha actual a windows.
Pos nada mas, esperando que esto os ayude a
aprender un poco mas, hasta el proximo. XD
saludos a todos/as
karpoff/TNT
|