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

  1.                                        888    ,e,                  
  2.        e88'888 888,8,  ,"Y88b  e88'888 888 ee  "  888 8e   e88 888 
  3.       d888  '8 888 "  "8" 888 d888  '8 888 P  888 888 88b d888 888 
  4.       Y888   , 888    ,ee 888 Y888   , 888 b  888 888 888 Y888 888 
  5.        "88,e8' 888    "88 888  "88,e8' 888 8b 888 888 888  "88 888 
  6.                                                             ,  88P 
  7.                                                             "8",P"
  8.  
  9. ───────────────────────────────────────────────────────────────────────────
  10.   Programme : Age Of Empires VF         Protection:    CD Check
  11.   Ecrit par : LuCiFuGe RoFoCaLe [STYX]  Type de Crack: Patch
  12.   Date      : 01/1998                   Niveau:        Novice
  13. ───────────────────────────────────────────────────────────────────────────
  14.  
  15. Introduction:
  16. ─────────────
  17.  
  18. Cette fois, nous allons parler des protections dites "CD Check" qui se
  19. trouvent le plus souvent sur les cd originaux ;)
  20. Les verifications les plus repandues sont les suivantes:
  21.  
  22.         - Verification de la presence d'un cd dans le lecteur
  23.  
  24.         - Verification du nom du cd
  25.  
  26.  
  27. Quelques Bpx interessants:
  28. ──────────────────────────
  29.  
  30.         a) bpx GetDriveTypeA ou GetDriveType
  31.         b) bpx GetVolumeInformationA
  32.         c) bpx GetFileSize
  33.         d) bpx GetFileAttributesA
  34.         e) bpx GetLogicalDrives
  35.         f) bpx GetLogicalDriveStrings
  36.         g) bpx GetLastError
  37.         h) bpx ReadFile
  38.  
  39. a) GetDriveTypeA
  40.         si eax = 00000005 alors cd present
  41.  
  42. b) GetVolumeInformationA
  43.         edi contient un pointeur sur le cd path
  44.         
  45. d) GetFileAttributesA
  46.         eax = FFFFFFFF alors erreur !
  47.  
  48.  
  49. Phase d'approche pour le crack de AOE:
  50. ──────────────────────────────────────
  51.  
  52. Installer votre soft normalement, puis enlever votre cd.
  53.  
  54. Installer le bpx GetDriveTypeA , et attendre que softice fasse son job.
  55. Apres un instant, on se retrouve dans "empire.exe" :)
  56.  
  57. :004D65F5       push edi                -> CD Path
  58. :004D65F6       call Kernel32.GetDriveTypeA
  59. :004D65FC       cmp  eax,00000005       -> C'est Un CD ??
  60. :004D65FF       je   004D6605           -> Oui :)
  61. :004D6601       xor  eax,eax            -> Non :(
  62. :004D6603       jmp  004D6658
  63.  
  64. Deux remarques:
  65.         - On note que 4D6658 n'est pas un bon saut avec eax=0.
  66.         - CD Path contient la lettre du lecteur d'ou vous avez installe AOE;
  67.           qui est contenue dans la base de registre:  
  68.           HKEY_LOCAL_MACHINE\Software\Microsoft\Games\Age of Empires\1.00
  69.                 CDPath = "x:\"
  70. Donc modifions la lettre du CDPath par "c:\" afin que le test echoue sans patch
  71. Ressayons et nous obtenons le super message "Inserez le CD ROM..."
  72.  
  73.  
  74. Phase d'attaque 1:
  75. ──────────────────
  76.  
  77. Modifions le cmp eax,00000005 par cmp eax,00000003 car le resultat 3 correspond
  78. a celui obtenu avec un disque dur :)
  79.                 :004D65FC  83F805 cmp eax,00000005
  80.           par   :004D65FC  83F803 cmp eax,00000003
  81.         
  82.              FF 15 54 26 70 00 83 F8 05 74 04
  83.       par                      03
  84.         
  85. On fait la modif sur le fichier grace a notre super editeur, et on relance le tout
  86. Merde le message apparait encore :(
  87.  
  88. Phase d'attaque 2:
  89. ──────────────────
  90.  
  91. On trace et on se retrouve sur :
  92.  
  93. :004D6605 8D84241C010000          lea eax, dword ptr [esp+0000011C]
  94. :004D660C 6800010000              push 00000100
  95. :004D6611 8D4C241C                lea ecx, dword ptr [esp+1C]
  96. :004D6615 50                      push eax
  97. :004D6616 8D54241C                lea edx, dword ptr [esp+1C]
  98. :004D661A 51                      push ecx
  99. :004D661B 8D44241C                lea eax, dword ptr [esp+1C]
  100. :004D661F 52                      push edx
  101. :004D6620 8D4C242C                lea ecx, dword ptr [esp+2C]
  102. :004D6624 50                      push eax
  103. :004D6625 6800010000              push 00000100
  104. :004D662A 51                      push ecx
  105. :004D662B 57                      push edi
  106. :004D662C FF1558267000            Call KERNEL32.GetVolumeInformationA
  107. :004D6632 85C0                    test eax, eax  -> eax = 1 si c'est bon
  108. :004D6634 B800000000              mov eax, 00000000
  109. :004D6639 741D                    je 004D6658
  110. :004D663B 8B460C                  mov eax, dword ptr [esi+0C]
  111. :004D663E 8D4C241C                lea ecx, dword ptr [esp+1C]
  112. :004D6642 05FD020000              add eax, 000002FD
  113. :004D6647 50                      push eax  -> contient le nom du cd "AOE"
  114. :004D6648 51                      push ecx
  115. :004D6649 E802D60500              call 00533C50
  116. :004D664E 83C408                  add esp, 00000008
  117. :004D6651 83F801                  cmp eax, 00000001 -> eax = 0 si c'est bon
  118. :004D6654 1BC0                    sbb eax, eax
  119. :004D6656 F7D8                    neg eax
  120.  
  121. Donc on peut en conclure que la routine doit se terminer avec eax=1 , on peut donc
  122. soit modifier le code dans cette routine soit essayer de la choper au debut:
  123. Pour faire cela, je ne me fais pas chier a chercher; je prends W32Dasm et je 
  124. regarde la reference sur 4D6573, qui est le debut de ma routine de test.
  125.  
  126. * Referenced by a CALL at Addresses:
  127. |:0041A113   , :0041A18C   , :0041ABE5   , :0041AC0A   , :0041B650   
  128. |:0041BB4F   , :004C6FFA   , :004C70D3   , :004D38C7   
  129. |
  130. :004D6550 81EC0C020000            sub esp, 0000020C
  131. :004D6556 53                      push ebx
  132. :004D6557 56                      push esi
  133. :004D6558 8B410C                  mov eax, dword ptr [ecx+0C]
  134. :004D655B 57                      push edi
  135. :004D655C 55                      push ebp
  136. :004D655D 8BF1                    mov esi, ecx
  137. :004D655F 8B8808040000            mov ecx, dword ptr [eax+00000408]
  138. :004D6565 85C9                    test ecx, ecx
  139. :004D6567 750A                    jne 004D6573    -> tombe sur le debut de la routine
  140. :004D6569 B801000000              mov eax, 00000001
  141. :004D656E E9E5000000              jmp 004D6658  -> tombe sur la fin de la routine
  142.  
  143. donc il suffit de remplacer jne 4D6573 par des NOP ou plus proprement par la
  144. combinaison INC ECX ,  DEC ECX
  145. ce qui nous donne -> 85 C9 75 0A B8 01 00 00 00 E9 E5 00 00 00
  146.     par             41 49
  147.  
  148. l'avantage de ce patch c'est que l'on intercepte les deux tests:
  149.     - Test si le lecteur est un cd
  150.     - Test si le nom du lecteur est bien "AOE"
  151.  
  152. ─────────────────────────────────────────────────────────────────────────── 
  153.  
  154. Voila c'est enfin fini !!!
  155.  
  156.  
  157.                                 LuCiFuGe RoFoCaLe [STYX] 1998
  158. email:lucifuge_styx@hotmail.com
  159.