| ESTUDIO COLECTIVO DE DESPROTECCIONES Última Actualizacion: 25/10/2001 |
Programa | C-Dilla SafeDisk ( Gran Thief Auto) | W95 / W98 / NT
Descripción | Como Mandar Al Traste Este Sistema De Proteccion
Tipo | Sistema de proteccion basado en la desencryptacion del ejecutable por medio de una autentificacion
Tipo de Tutorial | [X]Original, []Adaptación, []Aplicación, []Traducción
Url |
Protección | Encryptacion del programa
Dificultad | 1) Principiante, 2) Amateur, 3) Aficionado, 4) Profesional, 5) Especialista
Herramientas | SoftIce v3.25, Proc Dump, UltraEdit v6.10a , Frog Ice , Adump
Objetivo | Ejecutar un programa protegido sin el cd original
Cracker | SkUaTeR
Fecha | 1 de Febrero de 2000
INTRODUCCION
Hola a todos bueno este articulo lo he adaptado para el ECD en el fusionado todos los ultimos "tips" para destripar a Safedisk los primeros tutoriales ke escribi sobre este tema los puedes encontrar en la pagina de KARPOFF. Si necesitas mas informacion pudes buscarla en las paginas de BlackCheck y R!SC (en ingles sorry). Bueno explicare un poco como funciona este eskema de proteccion. Safedisc de C-dilla es un sistema de encryptacion de datos basado en una autentificacion(key) grabada en el CD de forma especial en la masterizacion. Si te fijas en el cd protegido veras ke tiene unos ficheros llamados Clockspl.exe , Dplayerx.dll , clcd16.dll , clcd32.dll , un fichero .ICD estos ficheros son la proteccion el fichero .ICD es realmente el ejecutable del juego mientra ke el ejecutable ke vemos con el icono del juego solo ocupa unos 200kb y es el encargado de desencryptar los datos del fichero .ICD ke luego sera el ke realmente se ejecute. Esta proteccion tambien tiene sistemas de deteccion del debuger por lo ke tendremos ke ocultarlo. O.K comenzamos...
1.- Herramientas Necesarias.
SoftIce v3.23 o 3.22 -Frogsice -Procdump -Saca (descompone un fichero pe, esta utilidad es la traduccion de pe-splite de R!sc la puedes encontrar en su pagina o en la de Karpoff junto los respectivos tutoriales) -Heditor hexadecimal (HexWorkshop,Ultraedit...) - Adump -Un juego protegido por safedisc ( en este tutorial utilizaremos Gran Tief Auto 2)
2.-Comenzamos
A Utiliza el programa ProcDump para saber la informacion de la cabecera PE Pulsa en el boton Pe Editor y elige el fichero .ICD protegido en nuestro caso elegiremos GTA2.ICD ahora prodras ver una ventana en la ke pone Entry Point :001E74D0 ; este es el punto de entrada al programa pero falta sumarle la base size of Image:00303000 ;estos datos no sirven de nada Image base :00400000 :Esta es la base del programa habra ke sumarla luego... pulse en el boton Sections y aparecera: (solo voy a escribir los datos necesarios) Name Vir.Size Vir.Offset Raw size Raw offset Characteristics .text - 1000 1F5000 - - .rdata - 1F6000 7C00 - - .data - 1FE000 22C00 - - .rsrc - 302000 A00 - - A todos estos datos tendremos ke sumarles la base del programa 00400000 (todos menos a Raw size) con lo ke tendremos: Entry Point :001E74D0+00400000 = 5e74d0 .text :00001000+00400000 = 401000 .rdata :001F6000+00400000 = 5f6000 .data :001FE000+00400000 = 5fe000 .rsrc :00302000+00400000 = 702000 Bien apuntas estos datos y continuaremos... Ejecuta el programa FrogsIce con el cual esconderemos el debuger. (te recomiendo ke uses la ultima version de frogs ice si usas la anterior a agosto del 99 tendras ke parchearla mira el tuto de blackcheck si es tu caso). En caso de ke tu version de Frogs Ice sea la ke te digo o superior dile ke no te muestre la pantalla de alerta. (leete la documentacion del programa) Ejecuta el juego protegido , y cundo te aparezca la ventana con la imagen de juego pulsa crtl+d para ir a winice, bien ahora pon un BPX en freelibrary :BPX FreeLibrary necesitamos ver si los datos de juego se han desencryptado para ello visualizaremos la direccion al Punto de entrada ke es 005e74d0 :d 5e74d0 si los datos no se an desencryprtado veremos muchos ?? si es asi pulsa F5 asta ke aparezcan los datos desencryptados una vez aparezcan kita el BPX :bc * y pon un nuevo BPX en el punto de entrada al programa 005e74d0 :bpx 5e74d0 Pulsa F5 y el programa se dentendra en 5e74d0 Ya tenemos los datos desencryptados (ha sido facil ¿¿no??) Llegados a este punto podemos optar por 2 opciones para bolcar estos datos al disco duro Opcion 1: Uso del comando Pagein modificado: Aplica el parche Icedump.exe a winice.exe para obtener el comando pagein modificado donde su sintaxis es PAGEIN dire_memoria longitud_memoria fichero Pues nada bolkemos los datos al disco duro (recuerda ke para hacer esto es necesario ke parchees el winice.exe con el parche ICedump ) :bc * <----con esto eliminamos los brackpoints po si acaso :pagein 401000 1f5000 c:\text.bin :pagein 5fe000 22c00 c:\data.bin :pagein 702000 a00 c:\rsrc.bin Seguramente la seccion .rsrc no este aun , pero nos da igual ya que esta seccion no esta encryptada y la podemos coger directamente del fichero gta2.icd. Para esto usaremos el programa SACA.EXE elegimos el fichero gta2.icd y cogemos la seccion e.bin y se renombra a rsrc.bin (pagein A B C) si te das cuenta los valores son (A) Vir.Offset de text,data,rsrc +400000 (B) raw.sice de text,data,rsrc (C) fichero en el cual grabar Opcion 2: Uso del procdump Bueno hay otro metodo mas facil ke consta en lo siguiente: Cargas el Adump y obtienes el segmento de memoria para trabajar con el soft ice esto se hace con el comando R . eliminas los BPX (bc *) y cambias el puntero de ejecucion EIP (r eip offset de adump) a la zona de memoria ke te dijo el Adump luego en esta ensamblas lo siguiente JMP EIP ( a eip,jmp eip) con esto creamo un bucle y asi suspendemo la ejecucion del GTA. Ahora solo nos keda cargar el procdump y bolcar ese proceso.(para mas informacion consulta el tutorial de Descompresion manual con ProcDump de Mr.Orange)
3.-¿Seguimos? Recopilemos informacion ...
Ya tenemos la mitad. Nos falta reconstruir la seccion rdata la cual es modificada en tiempo de ejecucion por SafeDisc. En .rdata se guardan la llamada a las API de windows y estan todas bien meno Kernel32 y User32 Veamos como funciona Nos situamos otra vez en el punto de entrada al programa :u 006854E3 55 PUSH EBP <-- Punto de entrada 006854E4 8BEC MOV EBP,ESP 006854E6 6AFF PUSH FF 006854E8 68D87D6A00 PUSH 006A7DD8 006854ED 68084F6800 PUSH 00684F08 006854F2 64A100000000 MOV EAX,FS:[00000000] 006854F8 50 PUSH EAX 006854F9 64892500000000 MOV FS:[00000000],ESP 00685500 83EC58 SUB ESP,58 00685503 53 PUSH EBX 00685504 56 PUSH ESI 00685505 57 PUSH EDI 00685506 8965E8 MOV [EBP-18],ESP 00685509 FF1554826900 CALL [00698254] <-- Primera llamada a la api,Traceala F8 0068550F 33D2 XOR EDX,EDX 00685511 8AD4 MOV DL,AH (este fragmento de codigo es del tiberian sun pero casi no varia en otros juegos) Pulsa F8 o t para trazar paso a paso y entra en la llamada veras lo siguiente 00AD4143 60 PUSHAD 00AD4144 6867000000 PUSH 00000067 <-- api buscada 00AD4149 6800000000 PUSH 00000000 00AD414E FF156441AD00 ALL [00AD4164] <--llamada a la rutina [c-dilla] 00AD4154 83C408 ADD ESP,08 00AD4157 61 POPAD 00AD4158 FF255E41AD00 JMP [00AD415E] <--despues de hacer la llamada este jmp 00AD415E 0000 ADD [EAX],AL cambiara a jmp [KERNEL32!GetVersion] 00AD4160 0000 ADD [EAX],AL si ejecutas CALL [00AD4164] con F10, veras como cambia el jmp de abajo, a jmp [KERNEL32!GetVersion]. Todo lo explicado arriba se puede aplicar a las ultimas versiones de safedisc asta el momento(la fecha de este tutorial es de octubre del 99 seguramente no tardaran en sacar una version actualizada). En versiones muy antiguas como por ejemplo en worms armagedon esto es distinto y este turorial no seria efectivo :-( (pero trankilos siempre se puede usar el nuebo programa de Fuerza Bruta ke ha creado BlackCheck lo encontraras en su pagina www.blackcheck.cjb.net) Ya sabemos como funciona muy por encima sigamos
4.-Fijando La Seccion .Rdata
La nueva version de safedisc viene con las cadenas sciiz de la importaciones kernel32 y user32 encryptadas por lo ke el viejo fijador de la seccion .rdata ya no nos sirve.. Para comenzar habra ke copiar la seccion .rdata a una zona de memoria limpia usaremos la zona de la seccion .data Direc | Longitud ------------------------- .text 401000 | 1F5000 .rdata 5F6000 | 7C00 .data 5FE000 | 22C00 .rsrc no importa esta sin encryptar -m 5F6000 L 7C00 5FE000 Ahora necesitamos saber un par de direcciones mas: Esta direcciones son donde se llama a la primera api de windows(kernel32) y la segunda(user32) para encontrarlas deberemos examinar la seccion .rdata desencryptada y mirar desde el principio . Para ilustrarte mejor hecha un ojo a la seccion .rdata desencryptada mira en la posicion 40 y en la posicion 188 estas son las respectivas entradas. (recuerda ke estos valores son para GTA en otro juego pueden variar) fijate ke gracias a las word(0000) podras encontrarlas y diferenciarlas. (para sacar la seccion .rdata usa el comando pagein 5F6000 7C00 c:\rdatasinfix.bin ) Sabiendo los desplazamientos anteriores solo nos keda sumar .rdata+des .rdata=5F6000 .rdata=5F6000 + + des = 40 des = 188 ------------------ -- ------------------- rva1 =5F6040 va2 =5F6188 rva1 es la direccion a kernel32 rva2 es la direccion a user32 y recordando ke la seccion .rdata fue copiada a la seccion .data adaptamos los valores (acemos la suma anterior pero con .data=5FE000) con lo ke tenemos rva1=5FE040 rva2=5FE188 Bueno pos aki tenesi la rutina ke hara el trabajo sucio por nosotros debemos agradecerselo a R!sc ke como ya dije ha creado el Cudilla con el cual esta proteccion es eliminada con un slolo click www.csir.cjb.net jeje ;-) start: 400300 mov edi, 5fe040 ; es la direccion de rva1(kernel32) 400305 xor ecx,ecx ; se pone a 0 ya ke nos indicara cuando terminamos con un 2 perpare: 400307 mov eax, [edi] fixit: 400309 mov byte ptr [eax],90h ; se pone un nop donde habia un pushad en el codigo de c-dilla 40030c mov byte ptr [eax+14h],0c3h ; se pone un ret donde habia un popad en el codigo de c-dilla 400310 pushad 400311 call eax ; se ejecuta la llamada a c-dilla parcheado en la linea de arriba 400313 popad 400414 mov ebx, dword ptr [eax+1bh] ; se coge la direccion real de la api ke nos da c-dilla 400317 mov [edi], ebx ; y se pone en nuestra seccion .rdata 400319 add edi,4 40031c mov eax, [edi] ; se coge el siguiente rva 40031e test eax,eax ; se comprueba ke no sea nulo(0000) 400320 jne fixit 400322 mov edi, 5fe188 ; es la direccion de rva2(user32) 400327 inc ecx 400328 cmp ecx, 2 ; aki se comprueba si se ha terminado de fijar y sigue(0,1) o sale(2) 40032b jne prepare 40032c int 03 ; fin del codigo eta rutina tendremos ke ensamblarla en el soft ice (a 400300) luego cambiamos EIP a esa direccion (r eip 400300), ponemos in bpint 3 y ejecutamos si todo va bien pararemos 40032c y solo nos keda copiarla a un fichero (pagein 5fe000 7c00 c:\rdata.fix) y juntarlo con las otras secciones. (este procedimiento a sido probado con el juego GTA2 y ha funcionado perfectamente) Esto se puede realizar tambien con el Adump reservando una zona de memoria y ensamblandolo en ella. (en los tutoriales de la pagina de blackcheck tienes ejemplos de este metodo)
5.-Reconstruyendo El Fichero .ICD
Bueno para reconstruir el fichero lo puedes hacer de estas maneras dependiendo del tipo de volcado ke hiciste: Opcion 1:(si usaste el comando Pagein modificado) Ahora crearemos la cabecera del fichero para eso edita el gta2.icd con un edeitor hexadecimal y copia los primeros 400h bytes a un fichero ej:header.bin . -Abre una ventana MS-Dos -Entra en el directorio de trabajo y escribe esto: c:\>copy /b header.bin + text.bin + rdata.fix + data.bin + rsrc.bin CRACK.exe y alehop ya esta el fichero CRACK.exe es completamente funcional... Opcion 2:(si usaste el ProcDump) Si lo hiciste con procdump solo queda ke elimines la seccion rdata e introduzcas la seccion fijada. Y bueno problema resuelto.
6.-Recomendaciones
Para tener un final feliz te recomiendo ke leeas los tutoriales ke te he mencionado: BlackChek - www.blackcheck.cjb.net R!sc - www.csir.cjb.net SkUaTeR - no tengo pagina pero mis tutos estan en la pagina de KARPOFF Te ruego ke los leas ya ke si no puedes llevarte algunas sorpresitas ;-)
7.-Jodete Safedisk
Jodete SAfedisc C-Dilla. Jaja jaja jajaj Y Mocosoft la ha comprado por millones de dolares jajajajajajajjajaj¡ (ni decir tiene ke esta proteccion esta cambiando constantemente ya ke dice ser una de las mas fiables y este Jodete estara jodido en poco tiempo pero bueno ai estaremos nosotros para volver a joderlo juasjuasjuasjuas) skuater@hotmail.com Punk Not DeaD
[ 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 , lee esto antes e infórmate de cómo puedes ayudarnos