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

 eXeL@B —› Вопросы новичков —› Проблема с написанием трейнера. Часть 2
Посл.ответ Сообщение

Ранг: 9.9 (гость)
Активность: 0.010
Статус: Участник

Создано: 23 апреля 2009 17:45 · Поправил: Charm0nt
· Личное сообщение · #1

Всем привет!

При написании трейнера для Claw у меня снова возникли проблемы.
В предыдущем топике мне объяснили, как сделать бесконечное количество здоровья. Кажется я понял, благодаря чему и как это происходит.
Сейчас у меня новая проблема, над которой я работаю уже дня 3 без результатов. Мне никак не получается сделать бесконечное количество жизней. Кажется в игре есть некоторая защита от этого, так как даже если я нашел адреса жизней в игре и изменил их значения, - они восстанавливаются обратно.

Также при внедрении кода бесконечного здоровья, который правильно работает, игра иногда "вылетает". Это происходит иногда в тот момент, когда активировать внедрение. С чем это связано?

Заранее благодарю вас за помощь!




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 23 апреля 2009 17:54
· Личное сообщение · #2

Возьми да посмотри в отладчике, где падает-может, узришь истинную причину. Если восстанавливается после патча-либо не то место патчишь, либо есть ещё проверка, типа число жизней+число смертей должно быть константа или ещё что-то.



Ранг: 9.9 (гость)
Активность: 0.010
Статус: Участник

Создано: 23 апреля 2009 17:56
· Личное сообщение · #3

Archer пишет:
Возьми да посмотри в отладчике, где падает-может, узришь истинную причину

Посоветуйте отладчик. Кроме SoftIce. Он не подходит мне.



Ранг: 284.8 (наставник), 6thx
Активность: 0.150
Статус: Участник

Создано: 23 апреля 2009 17:59
· Личное сообщение · #4

Charm0nt
вам сюда: http://exelab.ru/download.php?action=list&n=MTA=



Ранг: 28.7 (посетитель)
Активность: 0.020
Статус: Участник

Создано: 23 апреля 2009 18:01
· Личное сообщение · #5

Charm0nt
OllyDebugger,Syser.




Ранг: 340.0 (мудрец), 22thx
Активность: 0.120
Статус: Участник
THETA

Создано: 23 апреля 2009 18:23
· Личное сообщение · #6

Charm0nt пишет:
Также при внедрении кода бесконечного здоровья, который правильно работает, игра иногда "вылетает". Это происходит иногда в тот момент, когда активировать внедрение. С чем это связано?

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

Для такой защиты олька, без вариантов.

-----
Программист SkyNet




Ранг: 9.9 (гость)
Активность: 0.010
Статус: Участник

Создано: 23 апреля 2009 19:47
· Личное сообщение · #7

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

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

Окей, буду искать дальше.



Ранг: 9.9 (гость)
Активность: 0.010
Статус: Участник

Создано: 23 апреля 2009 20:19 · Поправил: Charm0nt
· Личное сообщение · #8

Я не понимаю, почему если я патчу такой код:
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 для дальнейшего использования.

И еще. Я не очень хорошо знаю ASM, поэтому подскажите, что делают такие команды:
Code:
  1.  sets dl
  2.  and eax,edx
  3.  test eax,eax




Ранг: 39.6 (посетитель), 3thx
Активность: 0.030
Статус: Участник

Создано: 23 апреля 2009 20:25
· Личное сообщение · #9

Charm0nt
посмотри в отладчике ,если сможешь ,какие изменения в коде игры делает код бесонечного здоровья.



Ранг: 9.9 (гость)
Активность: 0.010
Статус: Участник

Создано: 23 апреля 2009 20:28
· Личное сообщение · #10

Да с кодом, который дает бесконечное здоровье все понятно. С жизнями немного посложней.




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 23 апреля 2009 20:36
· Личное сообщение · #11

Закрываться может потому, что проверяет целостность. Смотреть надо, короче. Бряки тыкай ХВ на чтение. А не знаешь команды-читай ман интела/амд или справка в масме есть.



Ранг: 9.9 (гость)
Активность: 0.010
Статус: Участник

Создано: 23 апреля 2009 20:46
· Личное сообщение · #12

Только что попробовал использовать Code Cave, который написан в коде бесконечного здоровья. Все норм срабатывает. Значит какая то ошибка у моего Code Cave. Но почему же Cheat Engine показывает и мой Code Cave, и тот другой, рабочий?




Ранг: 138.1 (ветеран)
Активность: 0.090
Статус: Участник
Одепт ЭкзэЛаба

Создано: 23 апреля 2009 21:31
· Личное сообщение · #13

Charm0nt
Вариантов 2 либо у тебя косяк в коде инжекта, либо ты где-то не востанавливаешь стертые прыжком инструкции. Либо как вариант при записи кода из трейнера необходимо выставлять коду read-write атрибут. Но могу ошибаться.



Ранг: 107.5 (ветеран)
Активность: 0.150
Статус: Участник

Создано: 24 апреля 2009 14:52
· Личное сообщение · #14

Вообще лучше приостанавливать игру, SuspendThread вроде, в момент внедрения (потом ессенно отпустить) - может вылеты пропадут.

-----
Md5 fcbb6c9c9a5029b24d70f2d67c7cca74




Ранг: 9.9 (гость)
Активность: 0.010
Статус: Участник

Создано: 24 апреля 2009 17:10
· Личное сообщение · #15

Stack пишет:
Вообще лучше приостанавливать игру, SuspendThread вроде, в момент внедрения (потом ессенно отпустить) - может вылеты пропадут.

Окей, попробую.

Приведите, пожалуйста, код для получение бесконечной жизни. У меня самого не получиться




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

Создано: 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:
  1. code :00494999 - 8b 41 7c  - mov eax,[ecx+7c]
  2. code :0041d7a5 - ff 4e 7c  - dec [esi+7c]
  3. code :0041d7ba - 8b 46 7c  - mov eax,[esi+7c]


dec [esi+7c] просто нопим. Все...

P.S. "Проблема с написанием трейнера. Часть 3" создавайте в разделе "Вопросы новичков", где им самое место.



Ранг: 9.9 (гость)
Активность: 0.010
Статус: Участник

Создано: 24 апреля 2009 21:49
· Личное сообщение · #17

Большое спасибо! Буду сейчас пробовать!
SER[G]ANT пишет:
Значит ищем значение 7 (4 байта)

Суперская логика! Я на это и вовсе не обратил внимание!!!
SER[G]ANT пишет:
P.S. "Проблема с написанием трейнера. Часть 3" создавайте в разделе "Вопросы новичков", где им самое место.

Я действительно немного ошибся разделом. Надо было с самого начала писать в "Вопросы новичков". Очень надеюсь, что этот топик будет последним.




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

Создано: 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:
  1. mov edx,00000000
  2. mov ecx,[eax+14]
  3. mov eax,[ecx+7c]
  4. mov ecx,[esi+2c]


Занимает 14 байт, а ваш jmp на CodeCave 5 байт, следовало поставить еще 9 NOPов. Хотя, не вижу смысла перемещать так много инструкций в другое место.



Ранг: 9.9 (гость)
Активность: 0.010
Статус: Участник

Создано: 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
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


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