home *** CD-ROM | disk | FTP | other *** search
- 888 ,e,
- e88'888 888,8, ,"Y88b e88'888 888 ee " 888 8e e88 888
- d888 '8 888 " "8" 888 d888 '8 888 P 888 888 88b d888 888
- Y888 , 888 ,ee 888 Y888 , 888 b 888 888 888 Y888 888
- "88,e8' 888 "88 888 "88,e8' 888 8b 888 888 888 "88 888
- , 88P
- "8",P"
-
- ───────────────────────────────────────────────────────────────────────────
- Programme : Age Of Empires VF Protection: CD Check
- Ecrit par : LuCiFuGe RoFoCaLe [STYX] Type de Crack: Patch
- Date : 01/1998 Niveau: Novice
- ───────────────────────────────────────────────────────────────────────────
-
- Introduction:
- ─────────────
-
- Cette fois, nous allons parler des protections dites "CD Check" qui se
- trouvent le plus souvent sur les cd originaux ;)
- Les verifications les plus repandues sont les suivantes:
-
- - Verification de la presence d'un cd dans le lecteur
-
- - Verification du nom du cd
-
-
- Quelques Bpx interessants:
- ──────────────────────────
-
- a) bpx GetDriveTypeA ou GetDriveType
- b) bpx GetVolumeInformationA
- c) bpx GetFileSize
- d) bpx GetFileAttributesA
- e) bpx GetLogicalDrives
- f) bpx GetLogicalDriveStrings
- g) bpx GetLastError
- h) bpx ReadFile
-
- a) GetDriveTypeA
- si eax = 00000005 alors cd present
-
- b) GetVolumeInformationA
- edi contient un pointeur sur le cd path
-
- d) GetFileAttributesA
- eax = FFFFFFFF alors erreur !
-
-
- Phase d'approche pour le crack de AOE:
- ──────────────────────────────────────
-
- Installer votre soft normalement, puis enlever votre cd.
-
- Installer le bpx GetDriveTypeA , et attendre que softice fasse son job.
- Apres un instant, on se retrouve dans "empire.exe" :)
-
- :004D65F5 push edi -> CD Path
- :004D65F6 call Kernel32.GetDriveTypeA
- :004D65FC cmp eax,00000005 -> C'est Un CD ??
- :004D65FF je 004D6605 -> Oui :)
- :004D6601 xor eax,eax -> Non :(
- :004D6603 jmp 004D6658
-
- Deux remarques:
- - On note que 4D6658 n'est pas un bon saut avec eax=0.
- - CD Path contient la lettre du lecteur d'ou vous avez installe AOE;
- qui est contenue dans la base de registre:
- HKEY_LOCAL_MACHINE\Software\Microsoft\Games\Age of Empires\1.00
- CDPath = "x:\"
- Donc modifions la lettre du CDPath par "c:\" afin que le test echoue sans patch
- Ressayons et nous obtenons le super message "Inserez le CD ROM..."
-
-
- Phase d'attaque 1:
- ──────────────────
-
- Modifions le cmp eax,00000005 par cmp eax,00000003 car le resultat 3 correspond
- a celui obtenu avec un disque dur :)
- :004D65FC 83F805 cmp eax,00000005
- par :004D65FC 83F803 cmp eax,00000003
-
- FF 15 54 26 70 00 83 F8 05 74 04
- par 03
-
- On fait la modif sur le fichier grace a notre super editeur, et on relance le tout
- Merde le message apparait encore :(
-
- Phase d'attaque 2:
- ──────────────────
-
- On trace et on se retrouve sur :
-
- :004D6605 8D84241C010000 lea eax, dword ptr [esp+0000011C]
- :004D660C 6800010000 push 00000100
- :004D6611 8D4C241C lea ecx, dword ptr [esp+1C]
- :004D6615 50 push eax
- :004D6616 8D54241C lea edx, dword ptr [esp+1C]
- :004D661A 51 push ecx
- :004D661B 8D44241C lea eax, dword ptr [esp+1C]
- :004D661F 52 push edx
- :004D6620 8D4C242C lea ecx, dword ptr [esp+2C]
- :004D6624 50 push eax
- :004D6625 6800010000 push 00000100
- :004D662A 51 push ecx
- :004D662B 57 push edi
- :004D662C FF1558267000 Call KERNEL32.GetVolumeInformationA
- :004D6632 85C0 test eax, eax -> eax = 1 si c'est bon
- :004D6634 B800000000 mov eax, 00000000
- :004D6639 741D je 004D6658
- :004D663B 8B460C mov eax, dword ptr [esi+0C]
- :004D663E 8D4C241C lea ecx, dword ptr [esp+1C]
- :004D6642 05FD020000 add eax, 000002FD
- :004D6647 50 push eax -> contient le nom du cd "AOE"
- :004D6648 51 push ecx
- :004D6649 E802D60500 call 00533C50
- :004D664E 83C408 add esp, 00000008
- :004D6651 83F801 cmp eax, 00000001 -> eax = 0 si c'est bon
- :004D6654 1BC0 sbb eax, eax
- :004D6656 F7D8 neg eax
-
- Donc on peut en conclure que la routine doit se terminer avec eax=1 , on peut donc
- soit modifier le code dans cette routine soit essayer de la choper au debut:
- Pour faire cela, je ne me fais pas chier a chercher; je prends W32Dasm et je
- regarde la reference sur 4D6573, qui est le debut de ma routine de test.
-
- * Referenced by a CALL at Addresses:
- |:0041A113 , :0041A18C , :0041ABE5 , :0041AC0A , :0041B650
- |:0041BB4F , :004C6FFA , :004C70D3 , :004D38C7
- |
- :004D6550 81EC0C020000 sub esp, 0000020C
- :004D6556 53 push ebx
- :004D6557 56 push esi
- :004D6558 8B410C mov eax, dword ptr [ecx+0C]
- :004D655B 57 push edi
- :004D655C 55 push ebp
- :004D655D 8BF1 mov esi, ecx
- :004D655F 8B8808040000 mov ecx, dword ptr [eax+00000408]
- :004D6565 85C9 test ecx, ecx
- :004D6567 750A jne 004D6573 -> tombe sur le debut de la routine
- :004D6569 B801000000 mov eax, 00000001
- :004D656E E9E5000000 jmp 004D6658 -> tombe sur la fin de la routine
-
- donc il suffit de remplacer jne 4D6573 par des NOP ou plus proprement par la
- combinaison INC ECX , DEC ECX
- ce qui nous donne -> 85 C9 75 0A B8 01 00 00 00 E9 E5 00 00 00
- par 41 49
-
- l'avantage de ce patch c'est que l'on intercepte les deux tests:
- - Test si le lecteur est un cd
- - Test si le nom du lecteur est bien "AOE"
-
- ───────────────────────────────────────────────────────────────────────────
-
- Voila c'est enfin fini !!!
-
-
- LuCiFuGe RoFoCaLe [STYX] 1998
- email:lucifuge_styx@hotmail.com
-