Сейчас на форуме: asfa, Rio, _MBK_, Adler (+6 невидимых)

 eXeL@B —› Вопросы новичков —› Помогите сломать cd-check
Посл.ответ Сообщение

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

Создано: 14 апреля 2013 12:22
· Личное сообщение · #1

Добрый день.
Пытаюсь отучить игру RollerCoaster Tycoon от диска, но пока не выходит.
Нашел где игра проверяет файлы в папке Data, вот в этом
Code:
  1. 00418E41  |>  E8 08000000   CALL rct_rus.00418E4E

вызове находится процедура проверки. Т.е. игра ищет файлы в этой папке, затем читает отсутствующие файлы с образа и если не находит (образ не смонтирован) выводит месседжбокс.
Пропатчил вот здесь (поставил retn в начало процедуры).
Code:
  1. 00418E3E  /$  60            PUSHAD
  2. 00418E3F  |.  33DB          XOR EBX,EBX
  3. 00418E41  |>  E8 08000000   CALL rct_rus.00418E4E
  4. 00418E46  |>  43            INC EBX
  5. 00418E47  |.  83FB 39       CMP EBX,39
  6. 00418E4A  |.72 F5         JB SHORT rct_rus.00418E41
  7. 00418E4C  |.  61            POPAD
  8. 00418E4D  \.  C3            RETN

После этого игра запустилась, но при попытке начать новую игру, или пройти обучение нас просто выкидывает обратно в главное меню.
Так же можно занопать все это
Code:
  1. 0058423D  |.  C745 FC 04010>MOV DWORD PTR SS:[EBP-4],104
  2. 00584244  |.  8D45 FC       LEA EAX,DWORD PTR SS:[EBP-4]
  3. 00584247  |.  50            PUSH EAX                                 ; /pBufSize
  4. 00584248  |.  8B45 08       MOV EAX,DWORD PTR SS:[EBP+8]             ; |
  5. 0058424B  |.  05 0C020000   ADD EAX,20C                              ; |
  6. 00584250  |.  50            PUSH EAX                                 ; |Buffer
  7. 00584251  |.  8D45 F8       LEA EAX,DWORD PTR SS:[EBP-8]             ; |
  8. 00584254  |.  50            PUSH EAX                                 ; |pValueType
  9. 00584255  |.  6A 00         PUSH 0                                   ; |Reserved = NULL
  10. 00584257  |.  68 54FA8B00   PUSH rct_rus.008BFA54                    ; |ValueName = "SetupPath"
  11. 0058425C  |.  8B45 F4       MOV EAX,DWORD PTR SS:[EBP-C]             ; |
  12. 0058425F  |.  50            PUSH EAX                                 ; |hKey
  13. 00584260  |.  FF15 10B07800 CALL DWORD PTR DS:[<&ADVAPI32.RegQueryVa>; \RegQueryValueExA

или изменить
Code:
  1. 00584257  |.  68 54FA8B00   PUSH rct_rus.008BFA54                    ; |ValueName = "SetupPath"

на push 008BFA4C
Но результат будет аналогичный предыдущему, стартует, но поиграть нельзя.
Так же заметил, что если распаковать установочные файлы с образа на диск и установить игру, она запуститься, но опять же, дальше меню не пустит. Т.е. игра проверяет откуда она была установлена, если с жесткого диска, то поиграть нельзя.
Пробовал ставить бряки на GetDriveType, GetLogicalDrives, GetLogicalDriveStrings но они не срабатывают.
Прошу помощи.
Собственно вот ехе файлы, а тут раздача самой игры.




Ранг: 307.9 (мудрец), 196thx
Активность: 0.180
Статус: Участник

Создано: 16 апреля 2013 18:42
· Личное сообщение · #2

Игру не качал - так как влом ее ставить (а ставить ее нужно).
GetLogicalDriveStringsA есть дальше, правда до него не доходит - ругается раньше что диска нет:
005870FA |. FF15 D0B07800 CALL DWORD PTR DS:[<&KERNEL32.GetLogicalDriveStringsA>]

00418E41 - не убивай, а обойди (там чекаются нужные для игры файлы - "\Data\CSG1.DAT"). Посмотри как запускается с диском как без него.
Code:
  1. 00418F32   . E8 BEDF1600    CALL rct_rus.00586EF5
  2. 00418F37   . 83C4 04        ADD ESP,4
  3. 00418F3A   . C705 7CE8C300 >MOV DWORD PTR DS:[C3E87C],0
  4. 00418F44   . 5B             POP EBX                                                   ; rct_rus.00418E46
  5. 00418F45   . 83F8 FF        CMP EAX,-1
  6. 00418F48     0F85 9E000000  JNZ rct_rus.00418FEC  <- Если файл не нашли EAX=-1 - не прыгаем и далее говорим что диска нет.


Игру все-равно прийдется ставить - так как она пишет в реестр нужную. инфу для запуска (вроде это CDKey и путь (от)куда она поставлена. Догадка: Скорее всего откуда так как возможно что указанный выше файл должен быть на диске - иначе зачем чекать файл и место откуда поставлена игра ;).

-----
Don_t hate the cracker - hate the code.




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

Создано: 17 апреля 2013 10:43
· Личное сообщение · #3

mysterio пишет:
00418E41 - не убивай, а обойди

Да без толку. Патчил я jnz на jmp по адресу 00418F48. Запустится то она запускается, но при попытке начать новую игру выкидывает обратно в главное меню.
mysterio пишет:
она пишет в реестр нужную. инфу для запуска

Угу.
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Fish Technology Group\RollerCoaster Tycoon Setup
Значение "SetupPath" там имя диска с которого она была установлена.
Только я об этом уже писал в первом сообщении.



Ранг: 160.9 (ветеран), 1thx
Активность: 0.050
Статус: Участник

Создано: 17 апреля 2013 13:27
· Личное сообщение · #4

Что проще, пропиши в SetupPath путь к установленной игре и скопируй туда в папки не достающие файлы. Ну а дальше если не пойдет проверяй АПИ которые отвечают за проверку диска. То есть, есть место на диске или нет и все в этом вроде дело 5-ти минут.




Ранг: 568.2 (!), 464thx
Активность: 0.550.57
Статус: Участник
оптимист

Создано: 17 апреля 2013 16:14
· Личное сообщение · #5

bytec0de пишет:
Т.е. игра ищет файлы в этой папке, затем читает отсутствующие файлы с образа и если не находит (образ не смонтирован) выводит месседжбокс.

В те далёкии времена жёсткий диск объёмом 4 Gb были роскашью поэтому часть данных игры хранилось на компакт диске,скопируйте все данные с папки Data\ на компакт диске в папку \Program Files\Fish Technology Group\RollerCoaster Tycoon\Data\ и будем вам счасть и удовольствие )))

-----
Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли.




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

Создано: 17 апреля 2013 17:20 · Поправил: ELF_7719116
· Личное сообщение · #6

ClockMan пишет:
данные с папки Data\ на компакт диске в папку \Program Files\Fish Technology Group\RollerCoaster Tycoon\Data\ и будем вам счасть и удовольствие )))

Помню, такая хрень еще была в Heroes. Но там диск проверялся. Еще в DarkColony было! Помню, удивлялся тогда, почему все раздачи шли одним образом для эмулятора - пришлось самому исправлять баг http://rutracker.org/forum/viewtopic.php?t=3683906




Ранг: 469.0 (мудрец), 100thx
Активность: 0.250
Статус: Участник
[www.AHTeam.org]

Создано: 17 апреля 2013 17:48 · Поправил: KingSise
· Личное сообщение · #7

Я тоже со своей программулинкой вклинюсь, может защита похожа.

скачать тут: http://rghost.ru/45347869

до чего дошел:
с помощью CreateFileA открываем каждый диск ("\.\D:")

Code:
  1. 00502B1C    FF55 14         CALL NEAR DWORD PTR SS:[EBP+0x14]        ; CreateFile


в EAX будет 64, как я понимаю это дескриптор, который будет использован функцией DeviceIOControl ниже, что бы получить доступ к таблице разделов диска.

Code:
  1. 00502B42    FF75 F8         PUSH DWORD PTR SS:[EBP-0x8]
  2. 00502B45    FF55 18         CALL NEAR DWORD PTR SS:[EBP+0x18] ; call DeviceIOControl



если что, тут поправьте: Участок кода выше заполняет читает первые 0x800 байт диска.
Code:
  1. 00502B79    BE 00080000     MOV ESI,0x800
  2. 00502B7E    6A 01           PUSH 0x1
  3. 00502B80    6A 10           PUSH 0x10
  4. 00502B82    56              PUSH ESI
  5. 00502B83    53              PUSH EBX                                 ; lpInBuffer = 00BE0000
  6. 00502B84    8D45 C4         LEA EAX,DWORD PTR SS:[EBP-0x3C]
  7. 00502B87    50              PUSH EAX
  8. 00502B88    FF75 F8         PUSH DWORD PTR SS:[EBP-0x8]              ; hDevice
  9. 00502B8B    FF55 24         CALL NEAR DWORD PTR SS:[EBP+0x24]





тут мне немного непонятно, еще раз читаем 800h данных с диска в тот же буфер? Откуда именно??:

Code:
  1. 00502BBD    8945 E0         MOV DWORD PTR SS:[EBP-0x20],EAX          
  2. 00502BC0    53              PUSH EBX
  3. 00502BC1    8D45 C4         LEA EAX,DWORD PTR SS:[EBP-0x3C]
  4. 00502BC4    50              PUSH EAX                                          ;[EBX+0x590]
  5. 00502BC5    FF75 F8         PUSH DWORD PTR SS:[EBP-0x8]
  6. 00502BC8    897D D8         MOV DWORD PTR SS:[EBP-0x28],EDI
  7. 00502BCB    FF55 24         CALL NEAR DWORD PTR SS:[EBP+0x24]        ; discTest.00502D66
  8. 00502BCE    85C0            TEST EAX,EAX
  9. 00502BD0    0F84 85000000   JE discTest.00502C5B
  10.  



дальше цикл сравнения двух строк: с диска и того что зашит в программу
81 D9 3B 1D 68 42 0B 41 AE B4 DC D7 BB 21 6C FA


00502BE1 F3:A7 REPE CMPS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI]

Ну а дальше мне уже не понятно, ибо оригинального диска у меня нет...

-----
-=истина где-то рядом=-




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

Создано: 17 апреля 2013 17:57 · Поправил: ELF_7719116
· Личное сообщение · #8

KingSise
Нечто похожее на топик с TrusCont TSFD Protection Toolkit(Флешка с байтами-ключами): https://ssl.exelab.ru/f/action=vthread&forum=13&topic=21208
Да это и есть TrusCont TSFD Protection Toolkit!



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

Создано: 17 апреля 2013 21:18 · Поправил: bytec0de
· Личное сообщение · #9

Cigan пишет:
Что проще, пропиши в SetupPath путь к установленной игре и скопируй туда в папки не достающие файлы.

bytec0de пишет:
Так же заметил, что если распаковать установочные файлы с образа на диск и установить игру, она запуститься, но опять же, дальше меню не пустит. Т.е.игра проверяет откуда она была установлена, если с жесткого диска, то поиграть нельзя.

Cigan пишет:
Ну а дальше если не пойдет проверяй АПИ которые отвечают за проверку диска.

bytec0de пишет:
Пробовал ставить бряки на GetDriveType, GetLogicalDrives, GetLogicalDriveStrings но они не срабатывают.

Подскажи еще АПИ которые можно попробовать.
ClockMan пишет:
скопируйте все данные с папки Data\ на компакт диске в папку \Program Files\Fish Technology Group\RollerCoaster Tycoon\Data\ и будем вам счасть и удовольствие )))

Спасибо, эту процедуру тоже проделывал, результат все тот же, игра запускается но поиграть нельзя.




Ранг: 568.2 (!), 464thx
Активность: 0.550.57
Статус: Участник
оптимист

Создано: 18 апреля 2013 11:14 · Поправил: ClockMan
· Личное сообщение · #10

bytec0de пишет:
Спасибо, эту процедуру тоже проделывал, результат все тот же, игра запускается но поиграть нельзя.

Процедура проверки на наличее файлов
Code:
  1. /*418E3E*/  PUSHAD
  2. /*418E3F*/  XOR EBX,EBX
  3. /*418E41*/  CALL 00418E4E
  4. /*418E46*/  INC EBX
  5. /*418E47*/  CMP EBX,39=====>кол-во проверяемых файлов
  6. /*418E4A*/  JB SHORT 00418E41
  7. /*418E4C*/  POPAD
  8. /*418E4D*/  RET

далее заходим в CALL 00418E4E
Code:
  1. /*418EEC*/  CMP EBX,29==========>когда кол-во файло привысет 41 то поиск будет идти с усаново-го места.
  2. /*418EEF*/  JB SHORT 00418EF6
  3. /*418EF1*/  CMP EBX,2F
  4. /*418EF4*/  JBE SHORT 00418EFF========>заменить на jmp 00418EF6
  5. /*418EF6*/  CMP EAX,-1
  6. /*418EF9*/  JNZ 00418FEC

далее
Code:
  1. /*4190D6*/  PUSH 88E759
  2. /*4190DB*/  PUSH 8C2B64==============>путь к папке "Saved Games" из места установки
  3. /*4190E0*/  CALL 00586F8B; \FindFirstFileA
  4. /*4190E5*/  ADD ESP,8
  5. /*4190E8*/  MOV DWORD PTR [C3E87C],0
  6. /*4190F2*/  CMP EAX,-1======>нету такой папки? на выход
  7. /*4190F5*/  JE SHORT 0041912C===>меняем на jmp 00419121
  8. /*4190F7*/  MOV DL,[88E88E]======>получение атрибута папки.
  9. /*4190FD*/  PUSH EDX===========>записываем в стек.
  10. /*4190FE*/  MOV DWORD PTR [C3E87C],3
  11. /*419108*/  PUSH EAX
  12. /*419109*/  CALL 00586FD0
  13. /*41910E*/  ADD ESP,4
  14. /*419111*/  MOV DWORD PTR [C3E87C],0
  15. /*41911B*/  POP EDX
  16. /*41911C*/  CMP DL,7E===========>сверка атрибута папки.
  17. /*41911F*/  JNZ SHORT 0041912C====>не прошли проверку на выход.
  18. /*419121*/  MOV EDI,88D901
  19. /*419126*/  DEC BYTE PTR [EDI+53D]==>интерестнейшая манипуляция
  20. /*41912C*/  POPAD
  21. /*41912D*/  RETN
  22.  


-----
Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли.


| Сообщение посчитали полезным: Hellspawn, bytec0de

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

Создано: 18 апреля 2013 11:33
· Личное сообщение · #11

Спасибо, все работает.
4190D6 вот сюда то я внимания и не обращал.


 eXeL@B —› Вопросы новичков —› Помогите сломать cd-check
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати