TORN@DO presents: cRACKER's n0TES

Sistemas de Protección comerciales: Armadillo



Armadillo 1.73 - El archivo .TMP adicionado al esquema de protección (alpine)
Ensayo Parte 1 (Quitando rutinas anti-debug)

En primer lugar, Armadillo proporciona 3 rutinas anti-debug que no son en absoluto excepcionales. La primera es nuestro bien conocido truco MeltICE (CreateFileA \ \. \SICE, NTICE y SIWDEBUG), inmediatamente seguido por un juego SEH y llamadas a INT 3. La ultima prueba de detección sólo trabaja en NT (API llama a IsDebuggerPresent).


Truco de MeltICE
Carga el prog dentro de Symbol Loader; bpx en CreateFileA; aprieta F5 3 veces; debes estar ahora en el primer archivo .tmp creado al azar; Inmediatamente sigue un cmp y un salto cond. ; cambia ese salto con. a un salto incond.; Después es llamado GetLastError; con tal de que el valor de retorno de ese API sea 00000002 todo estará bien. Camina más adelante y verás que la cosa entera es puesta en un loop (una vez para SICE,NTICE,SIWDEBUG); para el último (SIWDEBUG) el valor de retorno de GetLastError será 00000032 = ERROR_SHARING_VIOLATION, cambia ese valor a 00000002 y todo estará bien.


IsDebuggerPresent
Después del truco de MeltICE, verás que allí está una llamada de API a GetProcAddress. Esta LLAMADA de API devuelve la dirección de IsDebuggerPresent que si estás trabajando bajo WinNT entonces será 0.
Para usuarios de WinNT:
simplemente cambia el salto cond. que sigue a la LLAMADA de API.
Todos los otros:
No te preocupes por eso, y continua.


INT 3
Ahora puedes apretar F12 dos veces. Conseguirás algunos Messageboxes que te cuentan material aburrido... finalmente aterrizarás en una línea bajo una llamada [ebp-140].

A propósito esta LLAMADA era la LLAMADA al primer archivo TMP. Camina adelante y verás aparecer un INT 3. Una línea antes de la int3 (mov eax,00000004) teclea ' a' y ensambla la línea a ' jmp 0 '. Esto activará una excepción y el programa pensará que allí no hay instalado ningún Debugger el cuál manipule la excepción.




Ensayo Parte II (Removiendo Armadillo)
Si aprietas F5 ahora, verás el prog real, pero no lo hagas que porque quiero explicar cómo Armadillo prepara el prog real. En primer lugar, él crea un archivo, un archivo .tmp0, donde escribe dentro el código real del prog. Algunos de vosotros pueden pensar ahora por qué no esperar hasta que escribe el archivo, pone a Armadillo en un loop infinito y simplemente hacer una copia del archivo .tmp y ya está. Heh yo pienso que es la única parte del código donde los programadores de Armadillo pensaron lo que hacen. El hecho es, que ellos escriben el prog real entero en un archivo tmp, pero el tramo inicial sólo contiene XXXXXX. Así que es inútil hacerlo así.

Lo qué Armadillo hace, es que crea ese proceso (API CreateProcess) con el flag suspendido activado, eso significa simplemente que carga el prog en la memoria y la ejecución es detenida antes de la primera línea del código. Ahora Armadillo hace una LLAMADA a WriteProcessMemory donde el XXXX es borrado con el código real del tramo inicial. Ahora nosotros tenemos un prog completos en memoria, pero no podemos descargarlo cómodamente porque esta suspendido, debe haber una LLAMADA a ResumeThread para permitir correrlo.

Esto es llamado en una vuelta (WaitForDebugEvent, ContinueDebugEvent). Eso significa que depura el proceso creado. Yo pensé ¿por qué debe depurar Armadillo el archivo .tmp? Respuesta: porque quiere saber cuando el usuario cierra, abandona el prog real, así que Armadillo puede hacer alguna la cosa y también puede dejarla. Así ¿cómo conseguimos nosotros un archivo trabajando sin Armadillo?

Heh que es bastante fácil. Pon un bpx en ResumeThread antes del jmp 0. Entonces aprieta F5. SoftICE romperá; F12 para volver a Armadillo y teclear ' a'; ' jmp eip'
F5 entonces; abre ProcDump, selecciona el archivo .tmp fuera de la lista de tareas y haz una descarga completo. No hay nada más que hacer. Incluso no cambiando el punto de entrada.

¿No es eso extraño? Heh sí, claro diría yo.

 

The cRACKER's n0tES esta dividido dentro de 12 partes principales:
 TX. Notas del Traductor
 00. INDICE
 01. Ensamblador para Cracker (CoRN2)
 02. SoftICE (Menú de arranque , Configuración, Comandos)
       
 1 Menú de arranque
       
 2 Configuración
       
 3 Comandos
 03. Breakpoints & Detalles de API de Windows
       
 1 Programas restringidos
       
 2 Cajas de diálogo
       
 3 Verificando el Tipo de unidad
       
 4 Acceso a archivos
       
 5 Acceso al Registro
       
 6 Cogiendo números de serie
       
 7 Accediendo a Tiempo & Fecha
       
 8 Generando ventanas
 04. Instrucciones de salto
 05. Instrucciones SET
 06. Tips & Trucos para Crackear
       
 1 Programas restringidos
       
 2 Dongles
       
 3 General
       
 4 Configuración de InstallSHIELD
       
 5 Protecciones con Archivo llave
       
 6 Pantallas molestas
       
 7 Límites de Runtime
       
 8 Serials
       
 9 Limites de Tiempo
       
10 Programas Visual BASIC
 07. Ventanas de Mensajes Para los Cracker
 08. Identificando funciones, Argumentos, y Variables (Rhayader)
 09. Los Sistemas de Protecciones de comerciales
       
 1 Armadillo
       
 2 C-Dilla SafeDISC
       
 3 SalesAgent
       
 4 SecuROM
       
 5 softSENTRY
       
 6 TimeLOCK
       
 7 VBox
 10. Bitmanipulation (Cruehead)
 11. Teoría general de Cracking
 12. FAQ

 +A. Cómo contactar conmigo
 +B. ¿Que es lo Nuevo?


 



The cRACKER's n0TES are Copyright 1998-2000 by TORN@DO of ID.
Todo los Derechos Reservados.
Traducido por
Revisado por X-Grimator.