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
=)
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...
|