Сейчас на форуме: Magister Yoda, vasilevradislav (+5 невидимых)

 eXeL@B —› Крэки, обсуждения —› Проверка CD-диска на основе GetDriveType
Посл.ответ Сообщение

Ранг: 1.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 27 января 2014 21:44
· Личное сообщение · #1

Как нужно пропатчить код,чтобы убрать проверку диска?
Code:
  1. 0057A557  |> 8D45 E0        |/LEA EAX,DWORD PTR SS:[EBP-20]
  2. 0057A55A  |. 50             ||PUSH EAX                               ; /RootPathName
  3. 0057A55B  |. 2E:FF15 640239>||CALL DWORD PTR CS:[<&KERNEL32.GetDrive>; \GetDriveTypeA
  4. 0057A562  |. 83F8 05        ||CMP EAX,5
  5. 0057A565  |. 0F85 78000000  ||JNZ THOTD.0057A5E3
  6. 0057A56B  |. 8D55 E0        ||LEA EDX,DWORD PTR SS:[EBP-20]
  7. 0057A56E  |. 8D85 DCFEFFFF  ||LEA EAX,DWORD PTR SS:[EBP-124]
  8. 0057A574  |. E8 57140000    ||CALL THOTD.0057B9D0
  9. 0057A579  |. 68 04010000    ||PUSH 104                               ; /Count = 104 (260.)
  10. 0057A57E  |. 8DBD DCFEFFFF  ||LEA EDI,DWORD PTR SS:[EBP-124]         ; |
  11. 0057A584  |. 29C9           ||SUB ECX,ECX                            ; |
  12. 0057A586  |. 49             ||DEC ECX                                ; |
  13. 0057A587  |. 31C0           ||XOR EAX,EAX                            ; |
  14. 0057A589  |. F2:AE          ||REPNE SCAS BYTE PTR ES:[EDI]           ; |
  15. 0057A58B  |. F7D1           ||NOT ECX                                ; |
  16. 0057A58D  |. 49             ||DEC ECX                                ; |
  17. 0057A58E  |. 8D85 DCFEFFFF  ||LEA EAX,DWORD PTR SS:[EBP-124]         ; |
  18. 0057A594  |. 01C8           ||ADD EAX,ECX                            ; |
  19. 0057A596  |. 50             ||PUSH EAX                               ; |Buffer
  20. 0057A597  |. 68 A40F0000    ||PUSH 0FA4                              ; |RsrcID = FA4 (4004.)
  21. 0057A59C  |. 8B3D 204BC600  ||MOV EDI,DWORD PTR DS:[C64B20]          ; |THOTD.00400000
  22. 0057A5A2  |. 57             ||PUSH EDI                               ; |hInst => 00400000
  23. 0057A5A3  |. 2E:FF15 A40439>||CALL DWORD PTR CS:[<&USER32.LoadString>; \LoadStringA
  24. 0057A5AA  |. 85C0           ||TEST EAX,EAX
  25. 0057A5AC  |. 74 26          ||JE SHORT THOTD.0057A5D4
  26. 0057A5AE  |. 8D85 DCFEFFFF  ||LEA EAX,DWORD PTR SS:[EBP-124]
  27. 0057A5B4  |. 89F2           ||MOV EDX,ESI
  28. 0057A5B6  |. E8 25C50000    ||CALL THOTD.00586AE0
  29. 0057A5BB  |. 83F8 FF        ||CMP EAX,-1
  30. 0057A5BE  |. 74 23          ||JE SHORT THOTD.0057A5E3
  31. 0057A5C0  |. 8D55 E0        ||LEA EDX,DWORD PTR SS:[EBP-20]
  32. 0057A5C3  |. B8 88913201    ||MOV EAX,THOTD.01329188
  33. 0057A5C8  |. BB 01000000    ||MOV EBX,1
  34. 0057A5CD  |. E8 FE130000    ||CALL THOTD.0057B9D0
  35. 0057A5D2  |. EB 20          ||JMP SHORT THOTD.0057A5F4
  36. 0057A5D4  |> 8D55 E0        ||LEA EDX,DWORD PTR SS:[EBP-20]
  37. 0057A5D7  |. B8 88913201    ||MOV EAX,THOTD.01329188
  38. 0057A5DC  |. E8 EF130000    ||CALL THOTD.0057B9D0
  39. 0057A5E1  |. EB 11          ||JMP SHORT THOTD.0057A5F4
  40. 0057A5E3  |> 8A55 E0        ||MOV DL,BYTE PTR SS:[EBP-20]
  41. 0057A5E6  |. FEC2           ||INC DL
  42. 0057A5E8  |. 8855 E0        ||MOV BYTE PTR SS:[EBP-20],DL
  43. 0057A5EB  |. 80FA 5A        ||CMP DL,5A
  44. 0057A5EE  |.^0F8E 63FFFFFF  |\JLE THOTD.0057A557
  45. 0057A5F4  |> BA 54B25C00    |MOV EDX,THOTD.005CB254                  ; ASCII "cd_nocheck"
  46. 0057A5F9  |. A1 3C4BC600    |MOV EAX,DWORD PTR DS:[C64B3C]
  47. 0057A5FE  |. E8 1D94FFFF    |CALL THOTD.00573A20
  48. 0057A603  |. 85C0           |TEST EAX,EAX
  49. 0057A605  |. 75 22          |JNZ SHORT THOTD.0057A629
  50. 0057A607  |. 85DB           |TEST EBX,EBX
  51. 0057A609  |. 75 23          |JNZ SHORT THOTD.0057A62E
  52. 0057A60B  |. 68 60B25C00    |PUSH THOTD.005CB260                     ; /Arg2 = 005CB260 ASCII "The House Of The Dead CD Must be in to run.
  53.  
  54. Please insert CD into drive and try again?"
  55. 0057A610  |. A1 244BC600    |MOV EAX,DWORD PTR DS:[C64B24]           ; |
  56. 0057A615  |. 50             |PUSH EAX                                ; |Arg1 => 002F027C
  57. 0057A616  |. E8 4591FEFF    |CALL THOTD.00563760                     ; \THOTD.00563760
  58. 0057A61B  |. 83C4 08        |ADD ESP,8
  59. 0057A61E  |. 85C0           |TEST EAX,EAX
  60. 0057A620  |. 75 0C          |JNZ SHORT THOTD.0057A62E
  61. 0057A622  |. E8 7989FEFF    |CALL THOTD.00562FA0
  62. 0057A627  |. EB 05          |JMP SHORT THOTD.0057A62E
  63. 0057A629  |> BB 01000000    |MOV EBX,1
  64. 0057A62E  |> 85DB           |TEST EBX,EBX
  65. 0057A630  |.^0F84 0AFFFFFF  \JE THOTD.0057A540
  66. 0057A636  |. 8D65 EC        LEA ESP,DWORD PTR SS:[EBP-14]
  67. 0057A639  |. 5F             POP EDI
  68. 0057A63A  |. 5E             POP ESI
  69. 0057A63B  |. 5A             POP EDX
  70. 0057A63C  |. 59             POP ECX
  71. 0057A63D  |. 5B             POP EBX
  72. 0057A63E  |. 5D             POP EBP
  73. 0057A63F  \. C3             RETN
  74.  




Ранг: 617.3 (!), 677thx
Активность: 0.540
Статус: Участник

Создано: 27 января 2014 21:47
· Личное сообщение · #2

наверно тута джамп
Code:
  1. 0057A5FE  |. E8 1D94FFFF    |CALL THOTD.00573A20
  2. 0057A603  |. 85C0           |TEST EAX,EAX
  3. 0057A605  |. 75 22          |JNZ SHORT THOTD.0057A629




Ранг: 1.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 27 января 2014 21:54 · Поправил: StratoBryks
· Личное сообщение · #3

Оба джампа проверял :
0057A603 |. 85C0 |TEST EAX,EAX
0057A605 |. 75 22 |JNZ SHORT THOTD.0057A629
0057A607 |. 85DB |TEST EBX,EBX
0057A609 |. 75 23 |JNZ SHORT THOTD.0057A62E
не запускается, первый вылетает,второй виснет.





Ранг: 617.3 (!), 677thx
Активность: 0.540
Статус: Участник

Создано: 27 января 2014 22:24 · Поправил: Vovan666
· Личное сообщение · #4

Там еще как минимум одна проверка (адреса немного различаются)

Code:
  1. 00418666    . /74 15                               JE SHORT 0041867D                                                      ; THOTD.0041867D
  2. 00418668    . |8B1D 344BC600                       MOV EBX,DWORD PTR DS:[C64B34]
  3. 0041866E    . |53                                  PUSH EBX                                                               ; /hWnd => NULL
  4. 0041866F    . |2E:FF15 2C043901                    CALL DWORD PTR CS:[139042C]                                            ; \DestroyWindow
  5. 00418676    . |31C0                                XOR EAX,EAX
  6. 00418678    . |E9 D2030000                         JMP 00418A4F                                                           ; THOTD.00418A4F
  7. 0041867D    > \B8 00040000                         MOV EAX,400
  8. 00418682    .  E8 19A91400                         CALL 00562FA0                                                          ; THOTD.00562FA0
  9. 00418687    .  31DB                                XOR EBX,EBX
  10. 00418689    >  B8 3C0D5A00                         MOV EAX,5A0D3C                                                         ; ASCII "thotd.exe"
  11. 0041868E    .  E8 AD92FFFF                         CALL 00411940                                                          ; THOTD.00411940
  12. 00418693    .  85C0                                TEST EAX,EAX
  13. 00418695    .  75 3A                               JNZ SHORT 004186D1                                                     ; THOTD.004186D1
  14.  
  15.  
  16.  




Ранг: 1.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 27 января 2014 22:41
· Личное сообщение · #5

Вторая часть Дома Ужасов отломалась патчем одного байта, там алгоритм такой:
1. перебираются все логические диски
2. из них выбираются CD-ROM
3. на этих CD-ROM проверяется наличие файла (hod2.ico кажется)
И всё. А тут непонятно чего намутили



Ранг: 419.0 (мудрец), 647thx
Активность: 0.460.51
Статус: Участник
"Тибериумный реверсинг"

Создано: 28 января 2014 07:45
· Личное сообщение · #6

В начале функции, где GetDriveType ставишь, вместо пролога(PUSH EBP, MOV EBP,ESP) в самом верху:
Code:
  1. MOV EAX, 1
  2. RETN X //ну понятно, что в зависимости от типа функции(_stdcall и тд) и кол-ва аргументов(обычно 1)

по своему опыту, в подавляющем большинстве случаев - игрушка оригинального диска больше не увидит



Ранг: 22.4 (новичок), 23thx
Активность: 0.020
Статус: Участник

Создано: 28 января 2014 08:08 · Поправил: Dazz
· Личное сообщение · #7

Когда-то я читал, что если вместо
Code:
  1. CALL DWORD PTR CS:[<&KERNEL32.GetDrive>
  2. CMP EAX,5


поставить
Code:
  1. CALL DWORD PTR CS:[<&KERNEL32.GetDrive>
  2. CMP EAX,3   //кажется тройку ставить нужно.


То игрушка будет проверять, жесткий диск это или нет. По-умолчанию проверяет "CD-Rom ли это". Не помню на какой игрушке, но это сработало.

Путей видимо много, для решения проблемы.




Ранг: 275.9 (наставник), 340thx
Активность: 0.22=0.22
Статус: Участник
RBC

Создано: 28 января 2014 10:39 · Поправил: Kindly
· Личное сообщение · #8

Перенести одну только проверку на жесткий диск вместо привода тоже не совсем кошерно, ибо некоторые игры читают данные не из своей папки, а из диска. Этот метод проканает, если эти данные скопировать в корень жесткого диска, а это не есть красиво. Насколько помню, патчили получаемые пути к этим данным, на путь из папки с игрой. Ну а если просто иконка проверяется, то нет вообще проблем, имхо.

-----
Array[Login..Logout] of Life




Ранг: 617.3 (!), 677thx
Активность: 0.540
Статус: Участник

Создано: 28 января 2014 12:05
· Личное сообщение · #9

Проверка лечится всего 3-мя джампами, 2 над мессаджами, 1 над destroywindow и все.


 eXeL@B —› Крэки, обсуждения —› Проверка CD-диска на основе GetDriveType
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати