-
Постов
4 022 -
Зарегистрирован
-
Победитель дней
42
Тип контента
Профили
Форумы
Загрузки
Блоги
Сообщения, опубликованные Xipho
-
-
cmp byte ptr [_cmp],1
je _E99
_E99:Этот кусок в принципе вообще не нужен, ибо прыжок делается на инструкцию сразу после инструкции прыжка. Можно просто продолжать выполнение после первого прыжка.
-
В твоем скрине JMP вероятно может дать зависание программы, ибо постоянно будет выполняться этот прыжок. Впрочем, тут утверждать на сто процентов не могу, ибо не вижу весь код. Это раз. Во-вторых, тебе не надо ставить галочку "Fill with nop's" ибо количество байт JNZ и JMP всегда одинаково. Этим нопом ты "забил" часть какой-то следующей инструкции и велика вероятность вылета из игры или что это у тебя там под отладкой находится.
-
Собственно, Lua и надо учить )))
-
Если для отладки используешь OllyDebug - там можно ставить условные брейкпоинты. Если же делаешь это в СЕ - тогда можно воспользоваться Lua.
-
dealloc(newmem) - уничтожение выделенной памяти нужно делать после восстановления оригинальных инструкций, ибо есть вероятность вылета, если, как у тебя написано, делать это до восстановления оригинального кода. Далее, для ThisIsMy необязательно выделять память. Достаточно прописать эту метку в выделенной памяти newmem.
-
Это можно узнать только исследованием кода в отладчике, так как это может быть и указатель на структуру игрока, или же один из указателей на здоровье внутри структуры игрока.
-
По поводу ограничения объем заливаемых за раз файлов - это ограничение хостера, с этим поделать ничего нельзя. Даже если я в настройках форума выставлю больший лимит - заливка файлов большего объема будет завершаться ошибкой. Это тоже одна из причин, по которой я думаю сменить хостера.
-
Да, писать драйвер необходимо, но существует затыка - доступ к этому файлу непрост. Думаю, как вариант, попытаться отправить игру полностью в pagefile.sys, а потом из него страницы памяти игры сдампить. Задумка сырая настолько, что с нее капает )) Но да, вопрос интересный.
-
Имелось в виду, что записывать надо количество байт, равное количеству байт затираемой инструкции. То есть, примерно так же, как с нопами, если затирается меньше байт, чем нужно, остальное балансируется. Так и здесь, хотя достаточно поменять всего один байт, желательно таки записывать все равно два байта, ибо инструкция длиной всего два байта. В большинстве случаев это не принципиально, но я сталкивался с парой игр (The Sims, The Sims 2, The Sims 3), которые вылетали, если в инструкции прыжка менять один байт вместо двух. С чем это связано - я сам не понял. Но факт есть факт.Что имелось ввиду под понятием "баланса" я не понял -
Вообще, по большому счету, достаточно замены лишь одного байта, но иногда несоблюдение баланса опкодов (даже если нопать ничего не надо) приводит к вылету из игры...
-
db EB 14 FF 75 14 - Зачем эти три лишних байта? Достаточно просто db EB 14
-
ТУТ. Самому лень в гугле было набрать?
-
Достаточно поменять всего один байт - в 74 14 (опкоды) надо прописать EB 14.
-
Получение базового адреса процесса. Довольно сомнительный подход, ибо не всегда база экзешника процесса будет равна 0х400000.
-
Да, кстати, подавляющее большинство игр в Windows 7 весьма спокойно "прыгают" в оконный режим при нажатии Alt+Enter.
-
Хм, интересно. С помощью этого же приема можно принудительно отправить игру в оконный режим, путем перехвата функции DirectX - CreateDevice. Надо будет вечерком попробовать.
-
Так, друзья, я нашел более выгодные условия хостинга, при которых платить придется меньше, а плюшек больше, включая объем доступного места, более продвинутый доступ по SSH, больше фтп-аккаунтов (как следствие, можно будет создать для каждого из наших разработчиков отдельную фтп-папку или даже домен третьего уровня, как сейчас есть отдельный у MasterGH), поэтому, скорее всего, в конце июля я осуществлю переезд всего нашего портала (включая сайт и форум) к новому хостеру. Конечно же, постараюсь об этом предупредить заранее, но, на всякий случай, если ближе к 25-30 числам июля вы заметите, что сайт и форум пишут, что закрыты на тех.обслуживание, или же вовсе не будут открываться - знайте, это всего лишь на сутки, пока пропишутся новые НС-ы под нового хостера.
- 1
-
Да, немного оговорился ) Скажем так, в большинстве современных игр применяется DirectInput
-
1. ebx выбран автором навскидку. На самом деле, можно использовать любой регистр, лишь бы он не использовался в оригинальном коде, иначе это не будет иметь смысла. Ну и, естественно, крайне не рекомендуется использовать регистр указателя стека (ESP).
2. [ebx+350] Что это? Быть может [ebx+250]? - Нет, именно так, как указано, ибо, как видно из найденной цепочки уровней указателей, второй уровень являет собой [[core.dll+00155744h]+350h]+43Ch.
3. Почему 43C? - Потому, что по этому смещению нашелся необходимый адрес от указателя верхнего уровня.
-
Ребят, вы чего? О_____О Кто же в ИГРЕ пытается обработать подобные нажатия??? В играх, по крайней мере, в большинстве, используется DirectInput (dinput.dll), на него и надо делать хук.
-
Отрывок из статьи, ссылку на которую давал выше:
внутрипоточный обработчик исключенийЭтот тип обработчиков обычно используется для защиты некоторых локальных областей кода и устанавливается путем изменения значения, сохраненного системой в памяти по адресу FS:[0]. Каждый поток в вашей программе имеет свое уникальное значение в сегментном регистре FS, так что этот тип обработчиков исключений является поточно-зависимым. Он будет вызываться только в том случае, если исключение происходит во время выполнения кода, защищенного этим обработчиком.
Значение в FS - 16-разрядный селектор, который указывает на "Блок информации Потока" ("Thread Information Block", TIB), - структуру, которая содержит важную информацию о каждом потоке. Самое первое двойное слово (DWORD) в TIB указывает на структуру, которую мы будем называть - структурой "ERR".
Структура "ERR" состоит как минимум из двух двойных слов, как показано на следующей схеме:
1st dword +0 Указатель на следующую структуру ERR (расположенную выше по цепочке).
2nd dword +4 Указатель на имеющийся обработчик исключений.
Установка внутрипоточного обработчика исключений
Теперь мы можем увидеть, как просто можно установить этот тип обработчиков исключений:
Пример:
PUSH OFFSET HANDLER
PUSH FS:[0] ;Адрес следующей структуры ERR.
MOV FS:[0],ESP ;Помещаем в FS:[0] адрес только что созданной структуры ERR.
...
... ;Здесь находится защищенный обработчиком код.
...
POP FS:[0] ;Восстанавливаем в FS:[0] адрес предыдущей ERR, которая
;до этого была следующей в цепочке вверх после текущей ERR.
;Тем самым, мы удаляем текущий обработчик исключений.
ADD ESP, 4h ; Очищаем стек от остатков ненужной нам более структуры ERR.
RET
;***********************
HANDLER:
...
... ;Здесь находится код обработчика исключений.
...
MOV EAX,1 ;Возможные возвращаемые значения и их описание:
;eax=1 исключение не было обработано (система вызовет
;следующий по цепочке внутрипоточный обработчик);
;eax=0 перезагрузить контекст и продолжить выполнение
;программы.
RETИз этого отрывка следует, что при обработке исключений система передает управление на адрес, указанный в обработчике исключений потока.
-
Ну, в принципе, это может быть и название модели. Хотя, скорее, какой-то краткий идентификатор модели, по которому при ее создании считываются характеристики из файлов игры типа handling.cfg.
К примеру,
class Car {
int weight;
int handlingfactor;
int maxspeed;
public Car (int modelid){
this.weight = GetInfoFromFile(handling.cfg);
this.handlingfactor = GetInfoFromFile(handling.cfg);
this.maxspeed = GetInfoFromFile(handling.cfg);
}
}Ясное дело, пример сильно утрирован, ибо на практике и методов и параметров будет гораздо больше, да и класс сам, возможно, будет дочерним, скажем к классу Vehicle (транспортное средство), ведь может быть еще и велосипед, и мотоцикл. Поскольку разными читами вызывается один и тот же конструктор, но в итоге даются разные машины в зависимости от введенного чита, я думаю, такой подход вполне логичен. Впрочем, у меня нет под рукой игры, чтобы проверить свои догадки.
-
Через стек. В макросе это видно.
-
Не не не )) Я ж написал про анализ реализации встроенного в игру чита спавна машины )) Я считаю, что этот чит как раз таки вызывает конструктор машины, передавая в него параметром ID модели машины, ведь это наиболее логичный вариант, не так ли? )))
Вопрос по активир. скриптам
in Вопросы по созданию читов в одиночных играх
Опубликовано
Раз вылет происходит именно тогда, когда, по сути, активируется скрипт, следовательно, какой-то из регистров процессора в данный момент не содержит ссылки на структуру игрока и иже с ним. Поэтому запись получается по "левому" адресу, что, по идее, и вызывает вылет.