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