|
|
 |
ESTUDIO
COLECTIVO DE DESPROTECCIONES
Última Actualizacion:
25/10/2001
|
 |
|
Programa |
ACDSee
3.0 |
W95 / W98 / NT |
Descripción |
Visor gráfico. |
Tipo |
Shareware Trial de 30 dias. |
Tipo de Tutorial |
[X]Original, []Adaptación,
[]Aplicación, []Traducción |
Url |
http://www.acdsystems.com |
Protección |
Time
Limit 30 Dias. Empacado. |
Dificultad |
1) Principiante, 2) Amateur,
3) Aficionado, 4) Profesional, 5) Especialista |
Herramientas |
SoftIce v3.25, W32dasm v8.9, ProcDump
y Editor hexadecimal |
Objetivo |
Eliminar
time limit. |
Cracker |
Nopper |
Fecha |
1 de Abril de 2000 |
NUESTRA
VÍCTIMA |
Hola peña, estoy orgulloso de poder
escribir mi primer tutorial para el ECD.
En este tuto vamos a crujir la versión 3.0 de ACDSee.
El impedimento que nos pone este excelente visor para no poder usarlo
de forma "cómoda" es el trial de 30 días. Así que
atakaremos el trial y además quitaremos un par de molestas nags
que nos sale al comienzo del programa.
|
EL
EMPACADO |
Para comenzar adelantemos nuestro calendario
más de 30 días para que caduque el programa. Al arrancar
nos saldrá la ventana dandonos la opción de registranos vía
on-line, desistalarlo o salir. Esa ventana será nuestro punto de
referencia a la hora de crackearlo.
Bueno lo primero que solemos hacer es acudir a nuetro W32DASM y sacar
la lista muerta, pero en este caso nuestro desensamblador preferido no
podrá hacerlo, se quedará colgado sin hacer nada.
Bueno da igual, le meteré mano a pelo con el SI. ¿ Pero
qué pasa? tampoco va el SI, no rompe inicialmente, que le ha pasado?
se habrá quemado de tanto trabajar? se habrá quedao gilipollas?
...no! lo único que pasa es que nuestro archivo está empacado.
Bien acudamos a nuestro ProcDump y editemos sus secciones para echar
un ojo. Aquí encontramos un par de cosas bastante interesantes.
Para empezar cambia el valor de característica de la sección
.text a E0000020. ¿ Que por qué hacemos esto ? este valor
indica entre otras cosas que nuestra sección ahora es editable (
no lo era antes por culpa del valor que tenía originalmente ) y
ahora nuestro SI funcionará (ufff! que alivio).
Otro detalle es esa sección final con ese nombre tan cantoso:
"aspack". Esa sección contiene el cargador que se encargará
de desempacar el archivo en tiempo de ejecución. Entonces es fácil
tan solo debemos ejecutar ProcDump y decirle que desempaque el archivo
eligiendo como tipo Aspack, pero.... resulta que no va ninguna de las versiones
que incorpora ProcDump!!! ( por lo menos en mi versión ). Bién!
así nos divertiremos más, cuanto más trabajoso es
el crack más disfruto ;-D
|
HOUSTON
TENEMOS UN PROBLEMA |
Bien, arranquemos nuestro SI para desempacar
manualmente. Una vez cargado aterrizaremos en la dirección 00555001,
cuya instrucción es PUSHAD ( empuja a la pila todos los registros
de propósito general ). La mayoría de los empacadores tienen
la siguiente estructura :
PUSHAD ( Salva registros )
CALL [....] ( Llama a la rutina que desempaca
)
POPAD ( Recupera los valores de los registros
)
JMP ... ( Finalmente salta al comienzo del programa
ya desempacado )
Este esquema es muy habitual encontarselo, de
todas formas podemos encontrar variantes donde por ejemplo la rutina desempacadora
está a su vez encriptada, pero para el caso el esquema nos viene
muy bien.
Ahora lo que vamos a hacer es buscar el primer
POPAD que veamos para colocar un break y ver si posteriormente salta al
comienzo del programa ya desempacado. Para esto debemos escribir en el
shell del SI lo siguiente :
: S 00555001 L FFFFFF
61
61 es el código en hexadecimal que corresponde
a la instrucción POPAD. Encontraremos un POPAD en la dirección
00555321, ahora coloquemos un break en ese punto y pulsemos F5 para seguir
con la ejecución. Vaya! no ha roto, eso quiere decir que
ese POPAD no era el que buscabamos. Pasemos a buscar el siguiente :
: S 00555322 L FFFFFF
61
El siguiente que encontramos está en 005554BC.
Repitamos la operación anterior. Bien! ahora si ha roto, si pulsamos
F10 cuatro veces pasaremos por un RET ( 005554CC ) que nos lleva a la dirección
004A33BF. Este salto es realmente grande, fijaos, la dirección ya
no empieza por 5 si no por 4, parece que hemos topado con la dirección
correcta. Ahora volvamos a depurar, coloquemos un
break en 005554CC, cuando haya roto introduzcamos en esta dirección
lo siguiente :
: A 005554CC
: JMP EIP
Con esto conseguimos que el flujo siempre salte
a la misma dirección, quedando el programa en un bucle infinito.
Esto se hace para poder volcar lo que nos interesa de forma limpia, evitando
que el programa siga corriendo y pueda modificar línes del código
que nos interesa. Como ya ha terminado de desempacar ahora tenemos nuestro
programa en memoria listo para ser volcado, abre ProcDump y en la ventana
donde corren las tareas actuales (task) pulsa botón derecho sobre
ACDSee y elige Dump/Full, nombralo como ACDCrack, por ejemplo, ahora elige
Kill para terminar la ejecución. Bueno solo nos falta modificar
el punto de entrada, este punto es :
( Entry Point - Image Base ) En este caso : (4A33BF
- 400000) = 0A33BF
|
BUCEANDO
POR EL CODIGO. ELIMINACION DEL TRIAL |
Ya tenemos nuestro archivo desempacado y las
manos libres para meterle caña.
Si ya tenemos un poco de práctica veremos que la ventana bad
boy da un poco de cante a DialogBoxParam, de todas formas, si no lo veias
no pasa nada, a esta rutina se llega de forma fácil.
Bueno, carguemos a la víctima en el SI y coloquemos un break
para esta API :
: BPX DialogBoxParamA
El programa romperá en en 00433FFE. Vayamos
a W32DASM y miremos a ver si hay algo interesante. Vamos a la dirección
00433FFE y miramos hacia arriba ( al techo no tío!, me refiero a
"por encima del código" ) ;-D , para ver si encontramos alguna referencia
a un salto. Efectivamente, se nos informa de que a que a esta porción
de código se accede desde un CALL en 00433ABB. Pues vamos de cabeza
a esa dirección :

Veis el salto que hay en 00433AB7 ?, es muy posible que bifurque el
camino entre la elección de la rutina bad boy o la rutina good boy.
Bien pues probemos, modifiquemos ese salto a un jmp 00433ACC. Pues resulta
que si hacemos los cambios pertinentes esto no funciona, pero lo más
curioso es que si le seguimos la pista cuando el programa aún no
ha caducado ( retrasa el calendario, este trial no mira si hemos modificado
la fecha ) vemos que este es el salto que efectivamente marca la diferencia
entre good boy y bad boy, entonces que pasa?. Si nos fijamos los valores
de los registros son diferentes cuando se llega a ese salto dependiendo
de si está caducado o no, es posible que estos valores se utilicen
luego para realizar operaciones y como hemos forzado el salto pero los
registros contienen los valores incorrectos el programa no se ejecuta de
forma correcta. Lo que vamos a hacer es fijarnos en los valores que contienen
los registros a la altura del salto en good boy y los que contienen en
bad boy, comparamos y obtenemos los valores a introducir en los registros
para que el programa corra como si estuviese siempre en goodboy. Estos
valores que cambian son los siguientes :
EAX=00000000
EDI=81608A9B
ECX=00000000
EDX=00000000
Introducimos entonces en 00433AB7 ( no machacamos
00433AB4 porque podría afectar a los flags ) lo siguiente :
MOV EAX, 00000000
MOV EDI, 81608A9B
MOV ECX, 00000000
MOV EDX, 00000000
NOP
Ya no hace falta forzar el salto a 00433ACC porque
después del NOP viene esa dirección.
Probamos y ... FUNCIONA!!! Tan solo hace falta
introducir esas líneas en el archivo con tu editor hexadecimal.
Los códigos de intrucción los puedes ver desde SI con la
opción :
CODE ON
Estos tienen que ser los siguientes:
B8 00 00 00 00 BF 9B 8A 60 81 B9 00 00 00 00 BA
00 00 00 00 90
|
NAGS,
MALDITAS NAGS. |
Ya solo queda el último obstáculo,
las molestas nags. Como lo "gordo" ya lo he explicado y estas nags no presenta
ninguna dificultad especial ( son también DialogBoxParamA ) lo dejaré
como ejercicio para aquel que todavía esté un poco verde.
La solución es :
( Saltos condicionales a cambiar por saltos incondicionales )
00407BF9 --- EB 17 ( Primera nag )
00440E5C --- EB 0E ( Segunda nag, solo aparece
de vez en cuando )
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Gracias a :
WKT! - Simplemente los mejores.
Karpoff - Por tener una página de puta madre.
A toda la gente de los foros que me han ayudado siempre que lo he necesitado.
CraMa - El grupo al que pertenezco, aunque todavía estamos comenzando
prometemos dar mucha caña.
A toda la comunidad en general.
Nopper. 2000.
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
[
Entrada
| Documentos Genéricos
| WkT!
Web Site ] |
[
Todo
el ECD | x Tipo de Protección
| x
Fecha de Publicación | x Orden Alfabético
] |
|
(c)
Whiskey Kon Tekila [WkT!] - The Original Spanish Reversers.
Si necesitas
contactar con nosotros,
leeestoantes e infórmate
de cómo puedes ayudarnos |
|
|
|
|
|