TORN@DO presents: cRACKER's n0TES

Sistemas de Protección Comerciales: C-Dilla SafeDISC



Crackeando C-Dilla SafeDISC (ACiD BuRN)
Introducción

Hola a todos, ya sé que hay un tutor en Midtown MadNess por Black Check, pero la manera de crackearlo no es la misma que la que él ha escogido, y yo explicaré más cosas que él sobre pegar nuestras nuevas secciones "dumpeadas" en el crackeado EXE :) Yo también asumo que leíste su tut, y sabes algunas cosas sobre el archivo de formato PE...

Herramientas requeridas

- El CD Original de Midtown Madness (una copia 1:1 y el crack de Laxity deberías hacerlo también)
- SoftICE 3.23
- SoftICE Tool to patch SoftICE (usado para "dumpear" secciones)
-
ProcDump 1.5 (para PE Editor)
- HexWorkshop
-
Frogsice (para ocultar SoftICE)
- Exescope

Después de instalar tu pequeño juego, edita los archivos PE " .ICD" con ProcDump. (Arrancas ProcDump, pulsa el botón en PE Editor, Examina tus archivos" .ICE", allí está MIDTOWN.ICE). Ahora, debes ver:

- Entry Point : 00166C10 
- Image Base : 00400000 

Ok, nosotros necesitaremos el OEP (Punto de entrada original) después, así que para calcularlo simplemente añade la Image Base y el Entry Point introduciendo en ProcDump: 00400000 + 00166C10 = 566C10

Ahora, click en el Botón "sections", para ver todas las secciones del archivo,:
¡Sólo necesitarás tener los Offset Virtuales, y los valores de Raw Size y Raw Offset !

- para la sección ".text": 

Virtual Offset: 00001000 
Raw Size: 18D78F 
Raw Offset: 600 



- para la sección ".Rdata": 

Virtual Offset: 0018F000 
Raw Size: 14C99 
Raw Offset: 18DE00 



- para la sección ".data": 

Virtual Offset: 001A4000 
Raw Size: 3D8A4 
Raw Offset: 1A2C00 



- para la sección ".data1": 

Virtual Offset: 00314000 
Raw Size: 20 
Raw Offset: 1E0600 



- para la sección ".rsrc": 

Virtual Offset: 00315000 
Raw Size: CB3 
Raw Offset: 1E0800

Ahora "dumpearemos" todas las secciones del archivo" .ICD", exceptuando el" .Rdata" (sabrás después por qué....). A propósito, necesitas agregar la Image Base al virtual Offset de todas las secciones:

     .text  : 400000 + 00001000 = 00401000  
     .rdata : 400000 + 0018F000 = 0058F000  
     .data  : 400000 + 001A4000 = 005A4000  
     .data1 : 400000 + 00314000 = 00714000  
     .rsrc  : 400000 + 00315000 = 00715000  
  

Ok, ahora dumpearemos todas estas secciones (excepto el .rdata). Para esto, necesitaremos poner un breakpoint en el EOP (566C10 para nosotros). A propósito, asumo que leíste el tutor de Black Check, y que parcheaste tu FrogsICE para esconder a SoftICE (nota de TORN@DO: o usa el último FrogsICE), si no ve y lee el simpático tut antes...

Arranca tu (parcheado) FrogsICE, y corre tu juego original. Verás un pequeño vídeo, en este momento, cambia a SoftICE (Ctrl+D), y pon un BPX en el OEP. BPX 56CC10 para este juego!

Aprieta F5 para permitir al juego continuar corriendo y ciérralo después. Ahora, ejecútalo, y normalmente rompe en 56CC10. Si no lo hace, mira si pusiste el BPX en buen lugar (bl: debes conseguir algo así: #025F:56CC10). Asumo que rompió, ahora "dumpea" todas las secciones. Antes de "dumpear" sin embargo, desactiva todos tu BPX, ya que nosotros no queremos mierda en nuestras secciones "dumpeadas"...(n.del t.: traducido literalmente :-Þ)

El comando pagein trabaja así:

pagein "dirección para comenzar el dumpeado" "tamaño" "nombre de archivo"


Así que, simplemente escribe lo siguiente en SoftICE:

pagein 401000 18D78F c:\text.bin 
pagein 5A4000 3D8A4 c:\data.bin 
pagein 714000 20 c:\data1.bin 
pagein 715000 CB3 c:\rsrc.bin 

¡Ok, esto "dumpeó" las secciones a nuestro disco duro! ¡Ahora, tenemos que hacer la parte "delicada", que es "dumpear" nuestras secciones rdata por supuesto, pero no es como las otras!

En primer lugar, tienes que conseguir la dirección real de la función, así que remontaremos dentro de la LLAMADA a nuestra sección rdata.

Después de romper, aterrizamos aquí:

00566C10 PUSH EBP <-- Rompemos aquí, en el punto de entrada 
00566C11 MOV EBP,ESP 
00566C13 PUSH FF 
00566C15 PUSH 005968D0 
00566C1A PUSH 00566724 
00566C1F MOV EAX,FS:[00000000] 
00566C25 PUSH EAX 
00566C26 MOV FS:[00000000],ESP 
00566C2D ADD ESP, 5C 
00566C30 PUSH EBX 00566C31 PUSH ESI 
00566C32 PUSH EDI 
00566C33 MOV [EBP-18],ESP 
00566C36 CALL [0058F14C] <-- Esta es la llamada en nuestra sección rdata, 
tracéala (F8) 

En esta LLAMADA, aterrizamos aquí:

009A6485 pushad 
009A6486 push 00000031 
009A6488 push 00000000 ---> esto es 0 para kernels y 1 para users ... 
009A6490 call [9A64A6] ---> consigue la dirección real de la función 
(9A64A6) 
009A6496 add esp, 8 
009A6499 popad 
....... jmp [XXXXXXXX] 

Rastrea este código, y veras al jmp [XXXXXXXX] convertirse en el jmp [KERNEL32!GetVersion]...
Ok, está bien, estás en el buen camino;). ¡Estamos cerca de donde empieza a codificar el fijador de la LLAMADA!

¡Sin embargo, nosotros necesitamos saber cuántas importaciones de Kernels y users hay en este juego! Para hacer esto, hay varias maneras, puedes desensamblar el" .icd" con W32DASM y puedes contarlos, también puedes remontar en SoftICE, o usar la herramienta (como yo hice) EXESCOPE para ver cuántas importaciones tiene...

En mi midtown.icd, yo tengo:

          - 127 kernels import  
          - 042 users import  
  

Ok, pero necesitamos tener estos números en hexadecimal, porque SoftICE usa solo valores hexa =)

   
 127 = 7Fh  
  42 = 2Ah  

Mi parte favorita comienza ahora: Codificando el fijador de la LLAMADA. En primer lugar, no tenemos acceso de escritura (acceso solo lectura) para la sección Rdata, así que moveremos la sección rdata al lugar de la sección data...

Para codificar el fijador de la LLAMADA, yo empiezo a codificar en el emplazamiento de EOP, así que habilita tu BPX en él y ejecuta el juego de nuevo. Espera hasta que rompamos... ahora tenemos que mover la sección rdata al lugar de la sección data, en memoria.

Para hacer esto, simplemente escribe:

m "virtual offset de sección data + image base" l "tamaño rdata"M "data virtual offset"
NOTA: Para el data virtual offset, usa un numero grande, es mejor ...
5A4000 es nuestro normal virtual offset, Yo he usado 5B0000 (mayor, como te dije)

Así que simplemente escribe esto:

m 58F000 l 14C99 5B0000

Ok, ahora es tiempo de codificar. Estás en la línea:

566C10 PUSH EBP

Nosotros codificaremos algo parecido a esto:

	00 pushad  
          01 push ebx  
          02 push 0  
          04 call [XXXXXXXX]  
          0A add esp,8  
          0D mov edx, XXXXXX   
          12 cmp eax,[edx]   
          14 je 20  
          16 inc edx  
          17 cmp edx, XXXXXX + XXXXX  
          1D jne 12  
          1F int 03         
          20 mov [edx],ecx  
          22 popad  
          23 inc ebx  
          24 cmp ebx, XX    
          2A jne 00  
          2C int 03  
            
  
   Escribe en SoftICE: A <enter>  
   
 y codifica:  
   
  
566C10   pushad  
566C11   push ebx  
566C12   push 0  
566C14   call [009A64A6]   <--la dirección real, encontramos esto cuando 
566C1A      add esp,8    	       <--remontado en la llamada 
566C1D      mov edx, 5B0000      <--la dirección donde nosotros copiamos nuestro .rdata 
566C22       cmp eax,[edx] <--la sección en 
566C24       je 566C40 
566C26       inc edx 
566C27       cmp edx, 5B0000 + 14C99 <--la dirección donde copiamos nuestros 
566C3D      jne 566C22 <--.rdata in + tamaño rdata 
566C3F       int 03 <--seguramente, si no encontrara ninguna equivalencia, rompe aquí. 
566C40      mov [edx],ecx 
566C42      popad 
566C43      inc ebx 
566C44      cmp ebx, 7F <--el número de api para preparar
566C4A     jne 566C10 
566C4C     int 03 

Ahora pon EBX a 0 (R ebx 0) , pon tu EIP en la línea 0 (línea 0 = 566C10 aquí , así R EIP 566C10) escribe "i3here on" y presiona F5 para correrlo. Normalmente debes romper en 566C4C ... Ahora vuelve EBX a 0, cambia la línea 02 (56CC12 aquí) a "push 1" y cambia la línea 24 a 'cmp ebx, user_import_number' (2A para nosotros) y vuelve EIP a la línea 0 (R EIP 566C10). Córrelo de nuevo. Normalmente, todo está ok ahora, debería romper en 566C4C de nuevo. Ahora, podemos "dumpear" nuestra sección rdata con seguridad:

pagein 5B0000 14C99 c:\\rdata.bin


Tenemos simplemente que reconstruir un archivo ejecutable. Yo probé ProcDump para importar secciones, pero esta zorra no cambió nada (nota de TORN@DO: prueba el nuevo ProcDump... Lucifer48 hizo algo grande), así que yo he importado mis secciones a mano. Te mostraré como lo hice ;)
En primer lugar, haz una copia del archivo" .icd", para nosotros: MIDTOWN.ICD, y renómbralo con el nombre que quieras, pero con la extensión" .EXE". P.ej. damnit.exe

Ahora, arranca HexWorkshop, abre el EXE, y abre la 1ª sección que hemos "dumpeado"... era: c:\text.bin
Ahora, necesitas el Raw offset de cada sección, yo lo he apuntado en la primera parte del tut. Los recordaré aquí, para ayudarte en la comprensión de esta mierda :p,

  para la sección ".text": Raw Offset:    600      Tamaño : 18D78F  
  para la sección ".Rdata": Raw Offset: 18DE00      Tamaño:   14C99  
  para la sección ".data": Raw Offset: 1A2C00      Tamaño:   3D8A4  
  para la sección ".data1": Raw Offset: 1E0600      Tamaño:      20  
  para la sección ".rsrc": Raw Offset: 1E0800      Tamaño:     CB3  
  

¡Ok, conseguiste todas las mierdas aquí! Nosotros queremos hacer la 1ª sección" .text" así:


En HexWorkshop, aprieta Alt + F5, introduce el Raw offset de la sección que quieres pegar (aquí: 600), y click en OK.

Ahora selecciona el menú edit, y click en "Select block" introduce el tamaño de la sección (aquí: 18D78F).
Ahora mira el otro archivo abierto
(text.bin), y aprieta ' Ctrl + A' para seleccionar todos. Remóntate a la ventana ejecutable principal en HexWorkshop y simplemente pega los bytes que has copiado en el portapapeles con ' Ctrl + V'
(o menú edit, y paste).

¡Guarda tu archivo! BIEN... simplemente has actualizado la sección ' .text ' con nuestra sección "dumpeada" ;)



¡OK, hago otra importación de sección contigo, y tu harás las otras usando la misma manera!


2ª sección : Rdata!


Puedes cerrar la ventana 'text.bin', y abrir con HexWorkshop el archivo 'rdata.bin'. Click en la ventana principal exe, presiona 'Alt + F5', introduce el tamaño del Raw Offset de la sección rdata (18DE00). Click en OK, selecciona desde el menú Edit "Select block", introduce el tamaño de la sección rdata (14C99). Mira la ventana de rdata.bin, presiona 'Ctrl + A' para seleccionar todos los bytes, y vuelve a la ventana del ejecutable principal (damnit.exe) en HexWorkshop. Ahora solo copiar & pegar estos con 'Ctrl + C'.


Ok, pienso que has entendido eso ahora. Simplemente haz el mismo con todas las secciones y entonces guarda tu ejecutable. Ahora puedes descargar FrogsICE, porque los anti-SoftICE no estarán más en nuestro exe reconstruido. Quita el cd original de midtown madness, y corre 'damnit.exe' o 'cualquieraquequieras.exe'.

¡GUAU!, el juego funciona - muy rápidamente - sin esa estúpida ventana, diciéndonos que esperásemos durante la Comprobación del CD... y voila el juego funciona muy bien =)

Pero para hacer un ejecutable perfecto, tienes que reconstruir el PE del archivo como es mencionado en el tutorial de Black Checks:

Si intentas ejecutarlo en otra Versión de Windows 9x. Caerá. Sólo funcionará en Win98, porque la sección rdata incluye la dirección de todas las funciones de win98 (sólo puede estar en win95 si lo crackeaste en win95).
Las direcciones que nosotros pusimos en la tabla de importación son sólo válidas para la versión de Windows en la que nosotros lo crackeamos. Arreglemos eso:

- Arranca Procdump (un trabajo muy bueno de G-ROM :)
ve a Options y selecciona:

[v] Recompute Object Size
[v] Optmize PE Structure

[X] Use actual import infos
Entonces pulsa en el botón de OK...


Ahora nosotros tenemos que reconstruir el archivo, pulsamos el botón en Rebuild PE y examinamos a tu archivo crackeado (damnit.exe). ¡Procdump produce para nosotros una tabla de importación válida y nuestro ejecutable ahora está arreglado - y perfecto!
(Así lo espero ;p) debe correr en todas las versiones win9x...



Crackeando C-Dilla SafeDISC (Black Check)


"La tecnología de SAFEDISC está comprendida en tres características clave:

(1) una firma digital autentificada
(2) encriptrado que protege el contenido y
(3) software anti-hacking.

Durante el premastering, el contenido es encriptado y lleva con él las instrucciones de autentificación. Una única firma digital SAFEDISC es agregada al título durante el mastering como consecuencia. Cuando un usuario ejecuta un disco original, el software de autentificación lee la firma digital que permite al programa ser descifrado y actuar normalmente. SAFEDISC también incluye tecnología anti-hacking que previene el compromiso de sus características de seguridad. La tecnología anti-hacking está diseñada no sólo para detener el copiando casual, sino también para proporcionar fuerte resistencia a hackers DESTRUCTIVOS y a piratas comerciales."

Del
homepage de SafeDISC:

Hhmm ... seamos DESTRUCTIVOS.


Introducción
Como probablemente sabes Safedisc es otra protección comercial de C-Dilla. Los CDs protegidos siempre tienen los archivos CLOKSPL.EXE y DPLAYERX.DLL en el directorio raíz. Nuestro objetivo es Midtown Madness [alemán]. Hay un Crack Genérico por Pedro [Laxity], pero a mí no me gusta insertar CDs en mi unidad sólo para jugar a un juego: -)

Los ejecutables consisten en dos partes. Uno es simplemente el loader (MIDTOWN.EXE) y después siempre hay un archivo * .ICD que contiene el EXE original encriptado. Cuando el juego es ejecutado que el cargador se descifra a si mismo y al juego EXE usando una clave que esta en el CD. Lo que nosotros tenemos que "dumpear" el EXE descifrado al disco y arreglarlo.


Herramientas requeridas:
  - El CD Original de Midtown Madness  (una copia 1:1 y el crack de 
    Laxity deberías tenerlo también)  
  - SoftICE for W9x  
  - ProcDump 1.4  
  - ADump  
  - Frogsice 0.14  
  - W32Dasm  
  - Conocimiento del formato PE  
  - Algo de tiempo, nervio y un cerebro  
   

Ensayo

1. Eliminando el código Anti Softice
SafeDISC usa dos métodos bien conocidos de detección del SICE. El primero es conocido como ' MeltICE' y ha sido descargado por David Eriksson. simplemente llama a CreateFileA con los Drivers de SICE

" \\ \\. \\SICE"
" \\ \\. \\SIWVID"
" \\ \\. \\NTICE" (no importante en este caso)

Primero yo pasé esto con un Macro de SoftICE:

macro NOSICE ="d @(esp+4);e @(esp+4) 0;x;"

entonces

BPX CreateFileA if *(esp->4+4)=='SICE' || *(esp->4+4)=='SIWV' do "nosice"


Esto funciona bien, pero también es lento. ¡Esta mierda es llamada aproximadamente un centenar de veces! Otra desventaja es que no puedes poner breakpoints en CreateFileA más. Si alguien sabe algo mejor por favor mándame un e-mail.

La solución es mucho más simple. Simplemente abre MIDTOWN.EXE y busca ' ss' (ASCII) encontrarás algo así:

  
  \.ss  
  \.ss  
  \.ss  
   

Sólo cambia ' ss' a ' xx' o cualquier cosa. Tienes que hacer esto con ' DPLAYERX.DLL', también. Los controles de CreateFile están fuera ahora, pero si ejecutas el juego con SoftICE cargado simplemente choca. Parece como que haya otro chequeo. Yo jugué alrededor de BPINT 2F, 41 etc. pero nada. El usa la INT 68:

      425205:  xor eax, eax  
      425207:  mov ax, 4300  
      42520B:  int 68  
      42520D:  mov [ebp-9c], eax  
      425213:  cmp eax, 4300  
      425218:  jz blablabla...  
        

No intentes remendar esto. Hay una herramienta por ahí llamada FrogsICE. Una vez lo cargas consigues una pantalla azul cada vez que descubre INTs Anti SoftICE. FrogsICE tiene una opción para engañar al programa pero esto no funcionará porque INT 68 devuelve 0x4300 en eax cuando SoftICE no está cargado. FrogsICE devuelve 0x0000, así que nosotros tendremos que parchear FrogsICE:

- abre FROGSICE.VXD
- busca 60 80 7D 1D 43
- cambia el primer byte a C3 (ret)

FrogsICE manejará ahora correctamente todas las Llamadas a INT 68 sin hacer estallar a todo el fastidiosa. tiempo: -) Bien el juego funciona bien ahora con SoftICE cargado. Sigamos a la parte fastidiosa.



2. Reconstruyendo el Ejecutable Encriptado
El EXE encriptado contiene objetos lo siguientes:

 Obj.01: .text    RVA: 00001000 Offset: 00000400 Tamaño: 0018D800 Flags: 60000020  
 Obj.02: .rdata   RVA: 0018F000 Offset: 0018DC00 Tamaño: 00014E00 Flags: 40000040  
 Obj.03: .data    RVA: 001A4000 Offset: 001A2A00 Tamaño: 00030000 Flags: C0000040  
 Obj.04: .data1   RVA: 00314000 Offset: 001D2A00 Tamaño: 00000200 Flags: C0000040  
 Obj.05: .rsrc    RVA: 00315000 Offset: 001D2C00 Tamaño: 00000E00 Flags: 40000040  
 
 .text -> encriptado  
 .rdata -> contiene Datos de Importación. Inoperante ya que sólo apunta a las rutinas
 de SafeDISC  
 .data -> encriptado  
 .data1 -> encriptado  
 .rsrc -> no encriptado (muy honrado... )  
    

2.1 "Dumpeando" la sección .text
¡IMPORTANTE! Es seguro reemplazar esa maldición del archivo de Microsoft AVI, lo verás algunas veces... : -)

Ejecuta el juego. No te olvides de cargar FrogsICE y esperar hasta que consigas el menú principal. Ahora minimízalo y ejecuta ProcDump. "Dumpea" el proceso entero (MIDTOWN.ICD) con opciones standard. Edita en tu Hex lo que has "dumpeado" y copia la sección .text a otro archivo. Si no sabes hacer esto, deja de leer y consigue alguna información sobre el formato de Archivo PE (o piensa un poco). Puedes conseguir la Información del Objeto desensamblando MIDTOWN.ICD desde la cabecera de PE que no está encriptado.

Nota que los Raw Offsets de las secciones no son los mismos que en el "dumpeado". Ellos son movidos cerca de 0x200 bytes. ¡¡¡En nuestro dumpeado de MIDTOWN.ICD la sección .code empieza en 0x600 NO en 0x400!!!


2.2 "Dumpeando" la sección .data
Como puedes suponer las secciones .data se modifican cuando se ejecuta el juego. Así que nosotros las necesitamos en un estado 'intacto'.

Pon un BPX en el punto de Entrada del Programa MIDTOWN.ICD
(¡no MIDTOWN.EXE!)
. Puedes sacarlo de la Cabecera de PE, o con W32Dasm. Tienes que estar seguro que estás en MIDTOWN.ICD al ponerlo.

Aprieta Ctrl-D mientras se ejecuta el AVI. Asegúrate que el "process string" abajo a la derecha es MIDTOWN. Ahora pon tu BPX (566C10). Ejecuta el juego de nuevo y esperas hasta SoftICE rompa. Ahora detén el Programa ensamblando ' EB FE' para el EIP actual. Debe parecerse a:


566C10: EB FE jmp 566c10

Ahora aprieta F5 y "dumpea" el proceso entero de nuevo con opciones de standard. Copia las secciones .data y .data1 a otro archivo. Recuerda los 0x200 bytes. Ahora puedes cancelar la tarea con ProcDump.

Ahora haz una copia de MIDTOWN.ICD y llámalo CUALQUIERAQUEQUIERAS.EXE
Pega tus secciones "dumpeadas". ¿Sobre qué de la sección .rdata estás preguntando? Sigue leyendo y llora...



3. Una puta, llamada .rdata
La sección .rdata una vez contuvo las direcciones de las DLL importadas usadas por MIDTOWN.EXE. Pero cuando SafeDISC lo desarregló, lo cambió para apuntar a las rutinas de SafeDISC que LLAMAN a las funciones de DLL. Estas rutinas de SafeDISC están en DPLAYERX.DLL y dependen de la Firma del CD correcta. Puesto que esta mierda no está cargada en nuestro EXE reconstruido este simplemente choca cuando intenta llamar un DLL.

Ejecuta el EXE protegido de nuevo. Habilita tu punto de ruptura en el punto de la entrada y camina en la primera LLAMADA de API.

CALL[58F14C]  
     
   Ahora no estás en GetVersion sino en la rutina de SafeDISC:  
   
  
   .  
   .  
   pushad  
   push 00000031		  --> el número de la función importada  
                            --> si este valor es demasiado grande la llamada choca.  
   push 00000000               --> el número de dll importadas  
   call [9b6146]               --> consigue la dirección real de la función  
   add esp, 8  
   popad  
   jmp[09b6140]                --> y salta allí  
   .  
   .  
   .  
       

Este código empuja los números de la función y DLL y entonces Llama una rutina que devuelve la dirección real en ECX y la referencia errónea en la sección .rdata en EAX. "Debuggea" un poco hasta que lo entiendas. Entonces regresa.


Como deduje sólo las dos primeras DLLs se manipulan por aquí (KERNEL & USER). Los datos de importación para las otras son ok. Ahora tienes que averiguar cuántas funciones importadas hay. Puedes contarlos en W32Dasm (por favor sé astuto).

Hay 0x106 importaciones de KERNEL32.DLL. El número de importaciones de USER32.DLL no importa porque podemos permitir que el programa choque después.

Ahora la carga Adump. Con el comando 'r' consigues la dirección donde puedes empezar a "dumpear". Para mí esto es 82ABD000. Ahora arranca el EXE y detén en la función de SafeDISC. Copia la sección .rdata a Adump Start Address + 1000:

-m 58f000 l 14e00 82abe000

Pon tu EIP a 82ABD000 y ensambla en SoftICE esto:

 
   -a 82abd000  
     
   @1:   push ebx           ----> Pone manualmente EBX a 0!!!!!!  
         push 00000000      ----> el número de DLL - tienes que cambiar esto después!  
         call [9b6146]      ----> consigue valores dentro de EAX y ECX  
         mov  edx, 58f000   ----> esto es la dirección de la sección .rdata  
     
   @2:   cmp dword ptr[edx], eax  ; busca la entrada  
         je @3  
         inc edx  
         cmp edx, 5a3dfd    -----> |    14e00h       + 58f00h        - 3 |  
                                   | tamaño de .rdata  + offset rdata  - 3 |  
         je  @4  
         jmp @2  
   @3:   edx sub, 58f000    -----> la direcc. de rdata.  
         add edx, 82abe000  -----> Adump Start Address +1000h  
         mov [edx], ecx            ; pone la Dirección real en nuestro nuevo .rdata  
   @4:   inc ebx  
         cmp ebx, 106       -----> el número de exportaciones de KERNEL32  
         jnz @1  
   @5:   jmp @5             -----> para aquí  
     

Explicación
Esto LLAMARA a la rutina de SafeDISC con cada número de la función como un parámetro. La Dirección correcta es devuelta en ECX. El índice erróneo en la sección de .rdata está en EAX. Ahora él, simplemente busca el .rdata en Memoria para la referencia incorrecta y pone el valor real de ECX al bloque de .rdata que nosotros copiamos a la Memoria de Adump.

Los valores arriba expresado son correctos para mi versión de Midtown Madness. Si estás trabajando en otro juego debes calcularlos tú.


Ahora permite a nuestro pequeño prodigio correr. Espera un poco. Si lo hiciste todo correcto nada debe chocar. Retrocede en SoftICE. El cursor debe estar en @5.

Ahora pon EBX atrás a 0. Pon EIP atrás a @1. Y cambia el PUSH 00000000 a PUSH 00000001. Ejecuta de nuevo. El programa chocarán porque empujamos un valor demasiado grande en EBX. Esto es ok.
Tenemos lo que nosotros deseábamos >:)

Ahora retrocede a Adump y escribe nuestra sección .rdata al disco. Pégalo en nuestro EXE reconstruido. ¡Comiénzalo y besa tu pantalla! ¡FUNCIONA!!!!!!



4. Haciéndolo un poco más compatible
Bien nuestro EXE reconstruido corre bien. Pero todavía no es perfecto. Simplemente prueba a ejecutarlo en otra versión Windows 9x. Chocará. ¿Por qué? Las direcciones que nosotros pusimos en la tabla de importación son sólo válidas para la versión de Windoze en que nosotros lo ejecutamos. Normalmente el OS pone estos valores allí cuando el EXE es cargado. Puesto que nosotros los pusimos allí a mano otro Win9x chocarán. Arreglemos eso:


- arranca ProcDump (¡realmente lo adoro!)
- Ve a Options
- selecciona:

[v] Recompute Object Size
[v] Optmize PE Structure
[ ] Use actual import infos

- click en Rebuild PE
- elige nuestro EXE reconstruido

ProcDump ahora generará una tabla de importación válida. Nuestro reconstruido es perfecto ahora. ¡Expulsa el horrible CD original y disfruta cómo de rápido empieza el juego:))!

¡Ah!

Puedes borrar sin peligro ésta mierda de archivos ' Safe'DISC :

00000000407.0016
00000000407.256
CLOCKSPL.EXE (un icono muy lindo)
DPLAYERX.DLL
old MIDTOWN.EXE
MIDTOWN.ICD

86 MB menos de mierda en tu unidad:)



Este tutorial está dedicado a Sir Gambi (ich warte auf dich, du Arsch!)



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.