--
ESTUDIO COLECTIVO DE DESPROTECCIONES | ||
WKT Tutorialz Site | ||
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 004DFD04Te 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 004B63BAVamos 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 004B63B4Por 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) |
[ Entrada | Documentoz GenΘricoz | WKT TEAM Main Site ] |
[ Todo el ECD | x Tipo de Protecci≤n | x Fecha de Publicaci≤n | x orden AlfabΘtico ] |