home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Reverse Code Engineering RCE CD +sandman 2000
/
ReverseCodeEngineeringRceCdsandman2000.iso
/
RCE
/
Aptteam
/
cours
/
aoevf.txt
< prev
next >
Wrap
Text File
|
2000-05-25
|
6KB
|
159 lines
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