--

ESTUDIO COLECTIVO DE DESPROTECCIONES
WKT Tutorialz Site
WKT
ProgrAmA NEED FOR SPEED 3 W95 / W98
DEsCripCión EXCELENTE Juego de Coches.
Sobre todo si dispones de aceleradora 3D.
Si te encantan este tipo de juegos, te recomiendo que te lo compres.
No te arrepentiras.
Tipo Programa Comercial
Url http://www.nfs3.com
ProtECCión Cd-Check. Obliga a poner el Cd para jugar.
DiFiCultAD 1) Principiante, 2) Amateur, 3) Aficionado, 4) Profesional, 5) Especialista
HerrAmiEntAs WDasm32 v8.9, Ultraedit o similar
oBjEtivo Jugar sin CD.
CrACkEr Mr.WhiTe [WkT!]
FEChA 7 de Junio de 1999

Introducción
Hace tiempo que tengo este EXCELENTE juego y hoy me ha dado por jugar con él pero de otra manera. ;o) El programa obliga a tener que poner el CdRom para jugar.
Así que vamos a eliminar el Cd-Check.

Al Atake
Una vez instalado el juego en su version completa, lo primero es ver cómo reacciona cuando intentamos jugar sin el CD.

Ummm, una bonita nag que nos informa "Para jugar al NEED FOR SPEED 3 Necesita tener el CD del juego en la unidad de CD-ROM ". Vaya, esto promete :o)
Utilizaremos nuestro queridisimo "death listing" o listado muerto y bucearemos en el código una vez desensamblado con el Wdasm 8.9. :o)

Bien... vamos al boton de string references y buscamos la dichosa frasecita. :o( sniff, no sale!! era demasiado facil ¿no? (en realidad lo es, ya lo veras)
¿y ahora que hacemos? no podemos localizar la asquerosa nag !!
¿Que tal si buscamos en las "Imported Functions"? :o) Enseguida localizamos la tipica funcion que se utiliza en estos casos: "GetDriveTypeA". Estupendo, hacemos doble click en GetDriveTypeA y el W32Dasm nos lleva al siguiente trozo de codigo:
* Referenced by a CALL at Addresses:
|:004B635B   , :004B63BC   
|
:004F9410 51                      push ecx
:004F9411 52                      push edx
:004F9412 56                      push esi
:004F9413 57                      push edi
:004F9414 83EC04                  sub esp, 00000004
:004F9417 89C2                    mov edx, eax

* Possible StringData Ref from Data Obj ->"A:\"
                                  |
:004F9419 BE30D95400              mov esi, 0054D930
:004F941E 89E7                    mov edi, esp
:004F9420 57                      push edi

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004F9437(C)
|
:004F9421 8A06                    mov al, byte ptr [esi]
:004F9423 8807                    mov byte ptr [edi], al
:004F9425 3C00                    cmp al, 00
:004F9427 7410                    je 004F9439
:004F9429 8A4601                  mov al, byte ptr [esi+01]
:004F942C 83C602                  add esi, 00000002
:004F942F 884701                  mov byte ptr [edi+01], al
:004F9432 83C702                  add edi, 00000002
:004F9435 3C00                    cmp al, 00
:004F9437 75E8                    jne 004F9421

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004F9427(C)
|
:004F9439 5F                      pop edi
:004F943A 001424                  add byte ptr [esp], dl
:004F943D 89E0                    mov eax, esp
:004F943F 50                      push eax

* Reference To: KERNEL32.GetDriveTypeA, Ord:0025h
                                  |
:004F9440 2EFF1518455300          Call dword ptr cs:[00534518] <-- Aparecemos aqui
:004F9447 83F805                  cmp eax, 00000005
:004F944A 7515                    jne 004F9461
:004F944C B801000000              mov eax, 00000001
:004F9451 83C404                  add esp, 00000004
:004F9454 5F                      pop edi
:004F9455 5E                      pop esi
:004F9456 5A                      pop edx
:004F9457 59                      pop ecx
:004F9458 8D8000000000            lea eax, dword ptr [eax+00000000]
:004F945E 8BD2                    mov edx, edx
:004F9460 C3        


Si miramos un poco mas arriba veremos que ese trozo de codigo es llamado desde
* Referenced by a CALL at Addresses:
|:004B635B , :004B63BC
Vamos a ver que hay en :004B635B
* Possible StringData Ref from Data Obj ->"install.win" <-- ¿Que coño tendra este archivo?
                                  |
:004B633B BA30FE5300              mov edx, 0053FE30
:004B6340 8D85C4FEFFFF            lea eax, dword ptr [ebp+FFFFFEC4]
:004B6346 A5                      movsd
:004B6347 A5                      movsd
:004B6348 66A5                    movsw
:004B634A A4                      movsb
:004B634B E840300400              call 004F9390
:004B6350 8D85C4FEFFFF            lea eax, dword ptr [ebp+FFFFFEC4]
:004B6356 E895300400              call 004F93F0
:004B635B E8B0300400              call 004F9410 <-- Llamada al Codigo Anterior
:004B6360 85C0                    test eax, eax
:004B6362 7430                    je 004B6394   <-- Ummm, Salto condicional ? :o)
:004B6364 B906000000              mov ecx, 00000006
:004B6369 8D7DDC                  lea edi, dword ptr [ebp-24]
:004B636C BE94564B00              mov esi, 004B5694
:004B6371 6A30                    push 00000030
:004B6373 A1503A7A00              mov eax, dword ptr [007A3A50]
:004B6378 F3                      repz
:004B6379 A5                      movsd

* Possible StringData Ref from Data Obj ->"Need For Speed 3"
                                  |
:004B637A 683CFE5300              push 0053FE3C
:004B637F 8B5485DC                mov edx, dword ptr [ebp+4*eax-24]
:004B6383 52                      push edx
:004B6384 6A00                    push 00000000

* Reference To: USER32.MessageBoxA, Ord:001Fh <-- Mal rollito SEGURO :o(
                                  |
:004B6386 2EFF1564475300          Call dword ptr cs:[00534764]
:004B638D 31C0                    xor eax, eax
:004B638F E870990200              call 004DFD04
Te has fijado en ese salto condicional en :004B6362 ?? Mosqueante ¿no? :o) y mas abajo una asquerosa MessageBox !! saltemos a ver donde nos lleva. Bye bye MessageBox ;o)

Aparecemos aqui:

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004B6362(C)
|
:004B6394 E807FFFFFF              call 004B62A0 
:004B6399 85C0                    test eax, eax
:004B639B 755A                    jne 004B63F7 <-- Otro saltito
:004B639D 31D2                    xor edx, edx <-- Esto ya no huele muy bien
:004B639F EB19                    jmp 004B63BA 
Vamos a seguir el salto de :004B639B jne 004B63F7
Vaya, justo encima hay un MessageBoxA !!! esto tiene buena pinta.
Y que pasa con el otro salto? :004B639F jmp 004B63BA
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004B639F(U)
|
:004B63BA 89D0                    mov eax, edx
:004B63BC E84F300400              call 004F9410 <-- Otra vez?
:004B63C1 85C0                    test eax, eax
:004B63C3 75DC                    jne 004B63A1
:004B63C5 EBED                    jmp 004B63B4

Por aqui mal rollo, volvemos al principio y el esquema es similar al anterior. Si siguiesemos por aqui tendriamos que parchear :004B63C3 jne 004B63A1 para evitar ese sospechoso MessageBoxA que aparece un poco mas abajo, y con eso tampoco nos aseguramos que sea el buen camino. Pero por algo hay que apostar ¿no?

Vamos a optar por el primer salto :o)
Cambiaremos:
:004B639B 755A jne 004B63F7
Por :004B639B EB5A jmp 004B63F7

Y el otro cambio que teniamos que hacer:
:004B6362 7430 je 004B6394
Por :004B6362 EB30 jmp 004B6394

Para parchearlo necesitamos saber el offset, asi que en el W32Dasm nos situamos en la linea en cuestion y lo miramos en la parte de abajo de la pantalla.
Solo necesitamos un editor hexadecimal para probar nuestros cambios. Sacamos el cd del NEED FOR SPEED 3 y probamos el juego. Perfecto, parece que funciona .
AAAAAARGG !!! nag!! nag!! ¿ein? "Openhandlea - OPEN FAILED ON .\GameData\Audio\Pc\show5.map" o algo asin :o[

Pensemos, nos indica la ruta de un archivo. Miramos en nuestro HD y vemos QUE NO EXISTE ESA CARPETA. ummmmm, que mosqueooooo. La copiamos? si pero espera..... recuerdas esa referencia al archivo :
* Possible StringData Ref from Data Obj ->"install.win"
Es hora de ver que rayos tiene. Lo abrimos, sorpresa sorpresa!!!! (tranquilo que no te aparece la foca esa de antena3) veras algo asi:
spanish
local
.\GameData\
.\GameData\Tracks\
.\GameData\Tracks\Tutor\
.\GameData\CarModel\
.\GameData\Render\pc\
.\GameData\DashHud\
I:\GameData\Audio\pc\ <--- La letra de mi CDROM
.\GameData\Audio\SFX\
.\GameData\Audio\Speech\English\
.\GameData\Audio\Speech\German\
.\GameData\Audio\Speech\French\
.\GameData\Audio\Speech\Spanish\
.\GameData\Audio\Speech\Italian\
.\FeData\art\
.\FeData\text\
.\FeData\text\
.\FeData\save\
.\FeData\stats\
.\FeData\config\
I:\FeData\audio\ <--- umm FeData, este no lo copie al HD
.\FeData\Art\Slides\
.\FeData\Art\Track\
.\FeData\Art\Showcase\
I:\FeData\movies\
.\FeData\stats\prh\

Esta claro, si cambiamos el contenido de el archivo "install.win" quitando la letra del cdrom "I:" y ponemos "." nos buscara los archivos necesarios en nuestro HD. :o)
Pues caña. Probamos..... ummmmm ¡¡ PERFECTO!!! Ya puestos vamos a jugar una partidilla jejeje. Seleccionamos persecucion con "El Niño" (Tecleas ELNINO en la pantalla inicial y te sale) y A QUEMAR RUEDAS !!!!

Realmente me esperaba una proteccion mas currada en este EXCELENTE juego.
(Repito por si no ha quedado claro que me encanta)
Los chicos de Electronic Arts deberian leerse algunos textos de Ingenieria Inversa y aplicarse el cuento.

Por cierto, ¿te he dicho ya que este juego se sale y que es una buena opcion de compra? :o)