![]() |
eXeL@B —› Вопросы новичков —› Проблема с написанием трейнера. Часть 2 |
Посл.ответ | Сообщение |
|
Создано: 23 апреля 2009 17:45 · Поправил: Charm0nt · Личное сообщение · #1 Всем привет! При написании трейнера для Claw у меня снова возникли проблемы. В предыдущем топике мне объяснили, как сделать бесконечное количество здоровья. Кажется я понял, благодаря чему и как это происходит. Сейчас у меня новая проблема, над которой я работаю уже дня 3 без результатов. Мне никак не получается сделать бесконечное количество жизней. Кажется в игре есть некоторая защита от этого, так как даже если я нашел адреса жизней в игре и изменил их значения, - они восстанавливаются обратно. Также при внедрении кода бесконечного здоровья, который правильно работает, игра иногда "вылетает". Это происходит иногда в тот момент, когда активировать внедрение. С чем это связано? Заранее благодарю вас за помощь! ![]() |
|
Создано: 23 апреля 2009 17:54 · Личное сообщение · #2 |
|
Создано: 23 апреля 2009 17:56 · Личное сообщение · #3 |
|
Создано: 23 апреля 2009 17:59 · Личное сообщение · #4 |
|
Создано: 23 апреля 2009 18:01 · Личное сообщение · #5 |
|
Создано: 23 апреля 2009 18:23 · Личное сообщение · #6 Charm0nt пишет: Также при внедрении кода бесконечного здоровья, который правильно работает, игра иногда "вылетает". Это происходит иногда в тот момент, когда активировать внедрение. С чем это связано? Причина как правило банальна и заключается в том, что неправильно выбрано место для внедрения или же неправильно составлен код инжекта. Может быть конечно еще проверка целостности в файле, тогда ее нужно искать и отклюючать. Charm0nt пишет: Посоветуйте отладчик. Для такой защиты олька, без вариантов. ----- Программист SkyNet ![]() |
|
Создано: 23 апреля 2009 19:47 · Личное сообщение · #7 FrenFolio пишет: Причина как правило банальна и заключается в том, что неправильно выбрано место для внедрения или же неправильно составлен код инжекта. Может быть конечно еще проверка целостности в файле, тогда ее нужно искать и отклюючать. Нет, по идее нету никакой защиты. В большинстве случаев все норм, игра редко, но все же иногда аварийно закрывается. Окей, буду искать дальше. ![]() |
|
Создано: 23 апреля 2009 20:19 · Поправил: Charm0nt · Личное сообщение · #8 Я не понимаю, почему если я патчу такой код: Code:
на такой: Code:
Игра закрывается. То есть не меняю смысл самого кода, а только включаю Code Cave для дальнейшего использования. И еще. Я не очень хорошо знаю ASM, поэтому подскажите, что делают такие команды: Code:
![]() |
|
Создано: 23 апреля 2009 20:25 · Личное сообщение · #9 |
|
Создано: 23 апреля 2009 20:28 · Личное сообщение · #10 |
|
Создано: 23 апреля 2009 20:36 · Личное сообщение · #11 |
|
Создано: 23 апреля 2009 20:46 · Личное сообщение · #12 |
|
Создано: 23 апреля 2009 21:31 · Личное сообщение · #13 |
|
Создано: 24 апреля 2009 14:52 · Личное сообщение · #14 |
|
Создано: 24 апреля 2009 17:10 · Личное сообщение · #15 |
|
Создано: 24 апреля 2009 20:32 · Поправил: SER[G]ANT · Личное сообщение · #16 2 Charm0nt "никак не получается сделать бесконечное количество жизней." В самом начале (если ни разу не умерать) у героя 6 дополнительных жизней + 1 нынешняя. Значит ищем значение 7 (4 байта). Умераем, ждем оживления персонажа и сворачиваем игру. Ищем число 6 (5 дополнительных жизней жизней + 1 нынешняя), после отсева остается всего 1 адрес (по крайней мере у меня остался только 1 адрес). Ставим на него "Find out that writes to this address". Заходим в игру и снова умераем, ждем оживления персонажа и сворачиваем игру. Видим следующее Code:
dec [esi+7c] просто нопим. Все... P.S. "Проблема с написанием трейнера. Часть 3" создавайте в разделе "Вопросы новичков", где им самое место. ![]() |
|
Создано: 24 апреля 2009 21:49 · Личное сообщение · #17 Большое спасибо! Буду сейчас пробовать! SER[G]ANT пишет: Значит ищем значение 7 (4 байта) Суперская логика! Я на это и вовсе не обратил внимание!!! SER[G]ANT пишет: P.S. "Проблема с написанием трейнера. Часть 3" создавайте в разделе "Вопросы новичков", где им самое место. Я действительно немного ошибся разделом. Надо было с самого начала писать в "Вопросы новичков". Очень надеюсь, что этот топик будет последним. ![]() |
|
Создано: 25 апреля 2009 03:40 · Личное сообщение · #18 Charm0nt пишет: Я не понимаю, почему если я патчу такой код: Code: 1. 00494991: mov edx,00000000 2. 00494996: mov ecx,[eax+14] 3. 00494999: mov eax,[ecx+7c] 4. 0049499C: mov ecx,[esi+2c] 5. 0049499F: ... на такой: Code: 1. offset 00494991 2. jmp 0050B437; Code Cave 3. 4. offset 0050B437 5. mov edx,00000000 6. mov ecx,[eax+14] 7. mov eax,[ecx+7c] 8. mov ecx,[esi+2c] 9. jmp 0049499F Игра закрывается. То есть не меняю смысл самого кода, а только включай Code Cave для дальнейшего использования. Code:
Занимает 14 байт, а ваш jmp на CodeCave 5 байт, следовало поставить еще 9 NOPов. Хотя, не вижу смысла перемещать так много инструкций в другое место. ![]() |
|
Создано: 25 апреля 2009 11:46 · Личное сообщение · #19 SER[G]ANT пишет: Занимает 14 байт, а ваш jmp на CodeCave 5 байт, следовало поставить еще 9 NOPов. Зачем это делать? Я ведь патчу только 00494991: mov edx,00000000. Все последующие инструкции я восстанавливаю в CodeCave, который делает jump на 0049499F. Я это сделал только для того, чтобы убедиться, что все нормально работает. В предыдущей части ты писал адрес Code Cave. Если я подставляю его в этот код, - то все работает нормально. ![]() |
![]() |
eXeL@B —› Вопросы новичков —› Проблема с написанием трейнера. Часть 2 |