-
Постов
4 022 -
Зарегистрирован
-
Победитель дней
42
Тип контента
Профили
Форумы
Загрузки
Блоги
Сообщения, опубликованные Xipho
-
-
Не факт. Если этот ID в разные загрузки игры один и тот же, возможно, это не дескриптор уже созданного объекта, а как бы одна из характеристик (модель машины). Тут может быть два варианта, если это ID заполняется один раз при создании объекта машины - тогда да, это сложно сделать, но, опять таки, исследуя код, реализующий встроенный в игру чит спавна машины, можно выйти на конструктор этого объекта и прореверсить передаваемые ему параметры. Я склоняюсь к тому, что именно этот подход применен, ибо он наиболее логичен. Второй вариант - при каждом обращении к объекту считывается его ID и подставляется нужная модель машины. В этом случае можно ID просто подменить, но таков подход не оптимален для быстродействия, следовательно, он наименее вероятен.
-
Не могу сказать точно, надо копаться в реализации чита спавна машин
-
Машины в ГТА 3 - это объекты, которые, если ездят по улицам, принадлежат глобальному объекту игрового мира. Если на них едет игрок - машина принадлежит объекту игрока. Если же машина стоит в гараже - она принадлежит гаражу, который, в свою очередь, принадлежит миру. То есть, для того, чтобы заспавнить машину в каком-либо из гаражей, нужно сначала найти все объекты/структуры гаражей, затем найти структуру того гаража, рядом с которым ты находишься, затем только уже в этой структуре искать меняющийся ID машины, которые ты будешь туда попеременно загонять. В каком-то из старых трейнеров точно была фишка добавления машины в любой из гаражей. Следовательно, сделать это можно. Более простой способ, как описал MasterGH - изучать под отладкой, что происходит при вызове чита спавна машины.
-
Если хочешь, чтобы этот чит вызывался при ударе, находишь инструкцию, которая срабатывает при ударе, делаешь с нее прыжок на кейв, в котором восстанавливаешь оригинальную инструкцию, а затем прописываешь прыжок (или лучше вызов) на процедуру, активирующую чит. После вызова процедуры чита нужно непременно прописать прыжок на оригинальный код, иначе после выполнения процедуры ты вернешься в кейв, а из него в оригинальный код уже не вернешься. Можно попробовать сделать прыжок без кейва, но в этом случае не гарантируется правильная работа игры, ведь оригинальная инструкция будет забита прыжком (или вызовом) на процедуру активации чита. В любом случае, я не вижу никакого смысла в вызове встроенных читов игры, если тебе удается ее взломать самостоятельно.
-
СЕ решает эту проблему созданием в памяти игры собственной выделенной памяти. Она создается по команде автоассемблера alloc(newmem,2048). Но в этом случае движок трейнера (как у СЕ) должен "уметь" рассчитывать самостоятельно прыжок на выделенную память и обратно. Это несложно, но у новичков вызывает некоторые приступы головной боли.
-
Пользоваться выделенной памятью в памяти процесса. Создать выделенный кусок памяти можно с помощью функции VirtaulAllocEx. Только при таком подходе прыжки на выделенную память нужно будет рассчитывать "вручную".
-
Проверил на работе.
Системы: Windows XP х86, Windows 7 x64, Ubuntu Linux x86, Ubuntu Linux x64, Gentoo Linux x64, Ubuntu Server x86.
Браузеры: Opera, Mozilla Firefox 4, Internet Explorer 8 и 9, Google Chrome, Flock. Проблем не обнаружено. Так что пролема у тебя явно локальная.
-
Вовсе нет. Если реализовать в трейнере поиск сигнатуры, как реализовано в СЕ - трейнер будет работоспособен под любой версией игры.
-
В планах у меня переписать эту статью. MasterGH, как-то я тебе скидывал исходник с использованием структур PE для определения реального имени модуля игры. Думаю, в обновленной версии статьи использую этот прием. В этом случае и поиск уникальных сигнатур не понадобится. Впрочем, учитывая наличие aobscan в CE, актуальность поиска реального имени модуля становится под вопросом.
ЗЫ. Где ж найти время, чтобы реализовать все ближайшие планы?..
-
Во первых, восстановление кода сделано неправильно, судя по приведенному скрипту, во-вторых, как я и говорил, код кейва должен находиться до прописывания прыжка, но и в секции [DISABLE] восстанавливающий оригинальный код должен быть ДО уничтожения кейва. То есть, dealloc(newmem) должен стоять в самом низу секции [DISABLE]
-
Форум как раз для того, чтобы помочь человеку повысить скилл, направить его в нужном направлении, а не выложить ему готовые скрипты на блюдечке с голубой каемочкой. Есть тема запроса трейнеров, там, кому нужно, попросит уже готовый трейнер. Не думаю, что кому-то из наших участников понравится, если его скрипт кто-то использует в своем трейнере и не укажет источник. А нечестных людей, к сожалению, хватает повсюду. На этом оффтоп закончили.
-
Chucky, ты, похоже, сам даже не пытаешься взломать игру, а лишь выпрашиваешь скрипты у тех, кто это делает. И неясно, с какой именно целью ты это делаешь.
Всем остальным: Отныне и впредь раскрытые скрипты во избежание их "воровоства" публикуем исключительно в разделе, доступ к которому имеют только участники группы "Разработчики".
-
Никак. Если только копать в исходниках самого СЕ.
-
Если меняется адрес инструкции, это значит, что она расположена не в исполняемом файле игры, а в подгружаемом модуле. Как с этим бороться - есть статья на сайте.
-
Видимо, мы о разных байтах говорим. Если ты используешь взлом игровых инструкций - тогда они не будут менять своего местоположения, и, соответственно, байты этих инструкций будут всегда одинаковыми. К тому же, при таком взломе для трейнера достаточно эти байты один раз выдернуть. Если будет время и желание, сделаю видеоурок, но в этом сильно сомневаюсь, ибо это уж самые азы геймхакинга, без этих знаний стоящий трейнер не напишешь.
-
Если ты хорошо знаешь LUA, то на нем можешь написать функцию, которая будет брать адрес инъекции, считывать из него байты и выводить в доступном виде. Если же нет - тогда ты можешь открыть окно дизассамблера СЕ, перейти на адреса, которые используются в инъекции, и скопировать байты вручную.
-
Зачем палить из пушки по воробью? Достаточно на LUA организовать трансляцию автоассемблерного скрипта в патч-байты, как в свое время это было реализовано в TSearch.
-
блокирование не подписанных драйверов...
Отключать блокировку неподписанных драйверов можно при загрузке системы. Надо как только пройдет BIOS POST, сразу нажать F8 и выбрать соответствующий пункт меню.
-
Ребят, извиняйте, конечно, но уж если вы самостоятельно не можете скопировать цепочку байтов из дизассемблера, то что вы вообще в геймхакинге делаете? На нашем ресурсе мы помогаем осваивать геймхакинг новичкам, но для этого должна быть хоть какая-то элементарная подготовка.
Так что это для меня пустяк.Для тебя пустяк. Для меня тоже. Для многих пустяк. Но для новичка это может стать непреодолимой проблемой, когда, вроде бы, все сделал правильно, даже по статье или уроку, а вот поди ж ты, игра вылетает, хоть убей.
-
А что тут непонятного? Поочередно берешь каждую инструкцию, и в дизассмеблере СЕ проверяешь, с какими адресами работает эта инструкция. Если она работает с несколькими адресами - значит, это не та инструкция, и надо брать следующую. Если же все инструкции будут работать с несколькими адресами одновременно, тогда придется обратной отладкой искать указатель здоровья героя и ставить на него фильтр. Это все подробно описывается в статьях на сайте и на форуме. Единственный момент, тебе, как новичку, довольно сложно будет проследить в отлдаке состоянии регистров процессора, поэтому, конечно же, предпочтительнее для тебя будет найти инструкцию, работающую только с адресом здоровья твоего героя.
На скриншоте выделено, как для выбранной инструкции выяснить, с какими адресами она работает
-
Я уже неоднократно говорил, но повторюсь еще раз. В скриптах TSearch или CE инструкции кейва ВСЕГДА должны писаться ДО забивания прыжком на кейв оригинальной инструкции. В некоторых случаях это может быть не принципиально, но в большинстве других случаев, из-за того, что забивание оригинальной инструкции прыжком на кейв прописано ДО самого кейва, в память игры этот прыжок пропишется до того, как будут прописаны, собственно, инструкции кейва, что гарантированно вызовет вылет из игры. Отсюда вывод - правильная очередность записи в скрипт делается так:
caveaddress:
new instructions
original instruction(s)
jmp backtogamecode
originalgameaddress:
jmp caveaddress
nop (если нужен) -
Для этого тебе нужна среда разработки. Как минимум либо Flex Builder, либо Flash Catalyst.
-
К сожалению, заливка браузером возможна только до двух мегабайт. Ограничение хостинга. Но, есть выход - можете присылать видео мне, я буду заливать по фтп и публиковать в нужной категории.
-
А в этом высокоточном счетчике есть учет погрешности затрат тактов на работу самого счетчика?
Как на ассемблере обработать исключение
in Вопросы по созданию читов в одиночных играх
Опубликовано
Статья Джереми Гордона
Макрос для облегчения обработки исключительных ситуаций. При использовании в СЕ вряд ли пригодится, но, на всякий:
Вышеописанный макрос используется так:
Пример программы:
Чтобы откомпилировать эту программу, Вам потребуется 32 бит. Turbo Assembler
TASM32 /ml SEH
TLINK32 SEH, SEH, , IMPORT32.LIB
PS. Применение этого макроса - самый простейший способ )) Жаль, что его нельзя применить в автоассемблере СЕ ) Впрочем, если постараться, то можно попробовать что-то подобное сделать. Надо подумать.