-
Постов
2 999 -
Зарегистрирован
-
Победитель дней
129
Тип контента
Профили
Форумы
Загрузки
Блоги
Весь контент MasterGH
-
Еле нашел файлы и залил в аттач. Надеюсь, за 26 мегайбайт Xipho не будет ругаться. Продолжение статьи, скорее всего, не будет, т.к. я не нашел способ выключить коллизию через Cheat Engine и отложил эту затею. Пока нет желания ей заниматься.
-
Остается только повторить и немного добавить. fstp действительно нежелательно нопить. Скорее всего, придется делать новую инъекцию кода и дописывать после fstp интструкцию mov[адрес], значение. Ну и добавлю из того, что не было написано. Не нужно ставить цель делать инъекцию кода только по адресу, которую показал отладчик в окне срабатывания брейкпоинтов. Посмотрите инструкции выше и даже ниже. Возможно какие-то из них можно занопить или заменить. Может так получиться, что даже прыгать на новую память не нужно будет.
-
>> MasterGH, по-моему единственный гемор - активация "глав-скрипта", а потом активация нужных опций. Все варианты которые я видел ранее до сегодняшнего дня имели "главный скрипт" (я его называл еще активирующим), который действительно приходилось активировать хотя бы один раз в начале игры. Его содержимое как и в примерах этой темы состояло из кучи прыгов, сравнений. Затем приходилось писать еще два скрипта, которые связывались с хоткеями. Они ставили бессмертие или убийство с одного раза в некоторый адрес, который использовал "главный скрипт". Пользователю приходилось сообщать, чтобы он нажал в трейнере комбинацию хоткеев в начале игры чтобы активировать главный скрипт один раз... ------ Так вот. Я предложил постом выше совершенно другой вариант без главного (активирующего) скрипта. Нужно два скрипта и выбрать два адреса рядом друг с другом для двух инъекций. 1. Скрипт, инъекция которого значительно увеличивает урон только врагам. При повтором срабатывании возвращает как было. 2. Скрипт, инъекция которого делает только своего героя бессмертным. При повтором срабатывании возвращает как было. Активирующего скрипта уже не нужно. Если брать за пример в пером посте, то: 1) первый скрипт в eax врага должен записать его здоровье - это же будет максимальный урон для него. 2) второй скрипт должен пропустить sub [edi+505],eax для героя за которогоиграем. Инъекции кода по идее должны быть на расстоянии не ближе 6 байт друг от друга, одна над другой.
-
Мне кажется вот наиболее простой вариант. Во время игры делать инъекции двумя независимыми скриптами 1. Бессмертие (как было так и остается в АА скриптах). Можно включать и выключать. 2. "Убийство с одного удара" может записывать очень сильный урон врагам (в адрес урона) на инструкции где-то повыше инструкции инъекции бессмертия. Можно включать и выключать. Тогда получаем привычное [enable] и [disable] поведения для АА скриптов без гемора со сравнениями.
-
В той статье я не делал инъекцию в одну инструкцию, а делал в две. Одна работала только с игроком, а другая работала с игроком и ботами. -------- Если делать инъекцию в одну инструкцию, то нужно выполнить множество сравнений. Вот логика в стиле C++/C#, которую можно переписать на ассемблерную инъекцию. if(isGodMode && !isOneHitKill){ if(pPlayer == myPlayer){ // своему игру записывать максимальное здоровье }else{ // чужому игроку отнимать очки здоровья как в оригинальном коде } }else if(!isGodMode && isOneHitKill){ if(pPlayer == myPlayer){ // своему игру отнимать очки здоровья как в оригинальном коде }else{ // чужого игрока убивать сразу } }else if(isGodMode && isOneHitKill){ if(pPlayer == myPlayer){ // своему игру записывать максимальное здоровье }else{ // чужого игрока убивать сразу } }else{ // без разницы своему или чужому игру отнимать очки здоровья как в оригинальном коде } Возможно эту логику можно упростить. Где-то Xipho на АА-скриптах для CE показывал пример. Вот не помню где, да и искать лень. Поищи в сообщениях Xipho на форуме.
-
Тему закрываю из-за флуда Хотите обсудить оформление трейнеров или на чем их лучше писать, то создавайте отдельную тему. Если есть ответ Dison-у, то напишите ему лично.
-
Контроль игры сервеной стороной обязательное условие для проведения соревнований между людьми. В период начала и завершения уровня игры результат прохождения уровня должен контроллировать мастер сервер, который следит за игрой и сам сохраняет в таблице даннных только правильный результат прохождения. Пусть даже это не будет мультиплеер, а игра одного клиента с удалённым сервером. Зато результат с бОльшой вероятностью не будет подделан читерами. Читер для разрабов мультиплееров это самая приоритетная проблема. Если об этом не думать, то ты можешь увидеть вскоре в таблице результатов Васю, который всегда сидит и выигрывает отправляя на сервер подельные данные о прохождении уровня. Загрузка трассы аналогично должна быть под конроллем сервера, иначе результат может быть отправлен игроком на сервер для другой трассы. Php для сетевых игр не всегда подходит, т.к. это медленно. Часто вижу на форумах, что пишут java игровой сервер с каким-нибудь рестартом например раз в сутки + мускул бд. Пхп можно оставить для работы с сайтами и для бразуреных игр. Я думаю лучше потратить время не на это (я так понял это добавление сетевых функций к какой-то чужой игре), а на создание аналогичной игры на Unity3d и подключить например сервис PlayerIO (готовый игровой сервер). Встроить какой-нибудь внутренний данат через смс Робокассу, развивать и поддерживать игру. Если пойдет постоянная прибыль выше прожиточного минимума, то оформлять ИП.
-
Если голову не морочить с регулярками, то так abc = "AaBbCc" a = string.sub(abc, 0, 2) b = string.sub(abc, 3, 4) c = string.sub(abc, 5, 6) cba = c..b..a print(cba) -- выведет CcBbAa
-
Довольно интересная тема на сегодняшний день по доставке товаров используя беспилотные устройства
-
Основная сложность в том чтобы сделать 4 возможных варианта в трейнере генерируемом CE 1. Только чит на год мод 2. Только чит на убийство с одного раза 3. Два чита включены 4. Два чита выключены Обычно на АА скриптах делают 1 активирующий скрипт и два отдельных для каждого чита. Первый цепляется на хоткей для активации пользователем один раз после подключения трейнера к процессу игры. И автор трейнера просит пользователя один раз нажать какие-то кнопки для активации трейнера. Второй и третий могут включать и выключаться пользователем во время игры. Первый скрипт учитывает 4 варанта сравнивания с переменной. Второй и третий скрипт изменяют состояние переменной. Есть и вариант через Lua Engine во время аттача к процессу автоматически делать инъекцию. Тогда пользователю не придется это делать самому через хоткей. И не будет риска, что он сделает это повторно. function onOpenProcess(processid) // процесс подключен и можно сделать разовую инъекцию кода end Есть и более мудреный способ полностью сделать весь трейнер через CE Lua Engine. Начиная от создания формы трейнера и заканчивая назначением горячих клавиш. Поищи примеры на главном сайте по созданию заготовки трейнера. Может быть сложным. Но я настолько привык, что никаких сложностей кроме отладки и проверки не вижу. Но мне лень. И может быть пригодится самая главная функция инъекции асма кода на CE Lua Engine autoAssemble(text, targetself OPTIONAL) : runs the auto assembler with the given text. Returns true on success (if targetself is set it will assemble into Cheat Engine itself) Для неё множество примеров на официальном форуме Cheat Engine
-
А почему ты решил закрыть тему, если ответ на вопрос еще не получил? Вопрос немного запутанно описан, но я понял проблему. Сначала мой пример для данного случая (по идее должен работать). Фишка с использованием call и возвращение по ret. Прыги очевидно работают быстрее, но ты же не программу драйвера инжектишь
-
Хорошая статья Grom-Skynet с примерами о том как делать фильтры. С картинками, пошаговыми объяснениями... Ещё есть вариант (правда я плохо помню насколько он удачный на практике) посмотреть данные в стеке от esp на бряке инструкции. Возможно в стеке будут данные на которые можно опереться именно для данной версии игры. Т.е. если в стеке по смещению такие-то данные, то адрес на инструкции проскакивает тот который нам нужен и значит можно писать в него постоянное значение В стеке могут быть данные следующие 1) значения 2) адреса на структуры 3) адреса возврата по ret-ам (работают с call-ами) Чтобы найти что-то в стеке нужно написать скриптец на CE Lua который эти данные найдет (удачно или не удачно надо экспериментировать). Или перебирать данные стека вручную делая несколько бряков из которых несколько будет на правильном адресе и несколько на неправильных адресах при пошаговой отладке.
-
Трейнеры могут запускаться и без CE (зависит от настроек) Это говорит о том, что в CE не ковырялся. Наверно, все сводится к тому, что тебе нравится программировать на С++. Использовать свое время на реализацию идей на С++, видеть результат и как это работает. Обычное хобби. Моя же точка зрения это побыстрее сделать. Чтобы это работало без ошибок. Хотя я уже давно по читам ничего не делал, мне просто лень. Для меня реализация на С++ как и на другом языке это скучная рутина. На CE сделать гораздо интереснее. Необходимые готовые функции под рукой, Автоассемблер удобно инжектит, Lua Engine прекрасно выполняет сценарии. Формат .cetrainer хранит все мои наработки, которые я могу поправить и исправить. Мне не нужно лазить между CE и средой разработки C++ и копипистить сигны или байт код новой инъекции. CE сам все генерит. __asm вставки на C++ мне не понравилось использовать, это не Автоассемблер.... Как ни странно даже большие трейнеры сделанные на CE скачивают и продолжают скачивать. Для игрока главное чтобы работало, а потом он просто удалит трейнер в корзину. Стараться сделать все идеально... не стоит оно того. В общем это было мое, может быть, унылое мнение. Если кому оно было противно, не интересно... не принимайте близко к сердцу
-
Посмотри примеры трейнеров на форуме или в Интернете. Собственно, можно использовать стандартное оформление для трейнера. Слева картинка, справа список читов. Вполне серьёзно, если не для каких-то корыстных целей (например на продажу т.к. будет не совсем честно по отношению к Дарк Байту). На CE можно особо не парясь наделать кучу опций в трейнере за минимальное время и опубликовать раньше тех, кто пытается наделать плюшек в своих (без иронии) серьёзных трейнерах. Вполне очевидно, что тот человек, который сделает больше опций или особенных опций в своем трейнере, то у того с большим шансом и будут скачивать трейнер даже несмотря на то, что у трейнера 3МБ размер. Если более менее знаешь как работать на CE, то скорее всего тебе этого хватит с головой. Если я не ошибаюсь Дельфи нужно покупать - это раз. Шкурки оформления скорее всего платные - два. Писать движок для трейнеров - три. Не думаю, что это нужно автору темы. Кодер, объясни мне чем C++ лучше CE. Что за сладости ты увидел и почему такое понимание к с генерированному "не тобой" трейнеру в CE Ты когда трейнер в студии VS C++ (кстати скорее всего не купленной) собираешь, не ты же компилятор C++ писал. С чего же ты считаешь что программы на С++ это твоё, а не чужое. Вот когда ты в HEX редакторе трейнер напишешь, тогда можешь считать это своим. Но я думаю, это глупость полная. Hex редактор ты кстати тоже должен будешь написать как программу в бинарном коде. То, что ты делаешь на CE это твоя работа с использованием компилятора CE. То, что ты делаешь на C++ это так же твоя работа с использованием компилятора C++. Так что не парься На CE быстрее сделать. Да, размер трейнеров большой. Но зато быстро, есть готовый автоассемблер. Поддержка 32-64 битных ассемблерных инструкций и много-много других фишек из Lua. Просто у тебя не лежит душа к Lua Engine. Только вот Dll-ки не скомпилишь, да оно и не надо. Десяток читов на CE, можно без dll-ок сделать довольно быстро, если это игра позволит.
-
В данный момент: Один PC - Win7 Pro x64 (лицуху купил на ~8К рублей, для работы и дома) Galaxy Tab 10.1, Galaxy Note 10.1- Андроид 4.хх Ну и ещё наверно Симбиан - вымирающий зверь на Нокии (пока ещё пользуюсь девайсом)
-
К статье, тоже самое Lua + AA (пустое окно формы, связка с хоткеями) : Надеюсь работает, т.к. не проверял Tomb Rider 2013 - VK_K - сохранить позицию - VK_M - сохранить позицию пересечения луча из камеры с поверхностью коллизии - VK_L - загрузить позицию
-
function GetRandomValue1992xxxx() return string.format("%s%04d", "1992", math.random (1, 9999)) end local value1992xxxx = GetRandomValue1992xxxx() print(value1992xxxx) +W-X-C - означает искать в памяти с правами защиты: запись (+W), НЕ выполнение кода (-X), НЕ копирование при записи (-C). Такое условие позволит искать в памяти только с атрибутом на запись. Нужно для более быстрого поиска.
-
У CE есть функция Dissect Data/structure. На 7-ом шаге посмотри структуру по esi. Можешь поставить бряк на счетчик ячейки инвентаря. Если повезет,то выскочат инструкции, когда курсором выделяешь ячейку или наводишь на неё. Все структуры которые увидел можно проанализировать на связь между собой по значениям, близлежащим адресам, близлежащим указателям и вложенным указателям. Если увязнешь, тогда трессишь ветку кода с бряка1 до бряка2, ищешь связи. Где бряк1 - это обращение к id ячейки, а бряк2 - обращение id вещи. Всю ветку исследуешь на вложенные коллы поглядывая стек, регистры, значения похожие на начала структур. Трейс можно делать в CE, OllyDbg. Если опять увязнешь бери IDA + Hex-Rays или любой дизас с декомпилятором на плюсы. В последнем случае С++ разумеется знать надо
-
elvis66666, заметь, что ты привел два способа поиска. В одном вещь выбрасывал/подбирал, в другом - ты выделял и снимал выделение с пиктограммы вещи в инвентаре. Наводя курсор на пиктограмму в инвентаре возможно не так-то просто получить id этой вещи не только через сканер памяти, но и через отладчик даже не получишь малой кровью. Там скорее всего будет счетчик выделенной ячейки, а не самой вещи. Так, что может быть искать неизвестное, +/- единица. Найдешь счетчик в инвентаре. Поставишь бряк на чтение и выкинешь вещь. Посмотришь в отладке как по id пиктограммы инвентаря определить id вещи выкинутой вещи (через указатели, через выполнение функции или иначе)
-
Для лучшего понимания можно проверить сколько здоровья у врага до удара по нему и сможешь определить либо удар слишком сильный, либо здоровье врага слишком мало изначально Теоритически на бряке инструкции можно найти зацепку в какой момент выполнять оригинальный код, а не новый. Если не нашёл, то искать другие зацепки используя анализ структур, трейссер CE + пошаговую отладку.
-
Наверно, это самая лучшая статья о том как решить эту проблему.
-
На почту можно отправить любые сообщения из программы через сервер-посредник обрабатывающий входящие запросы и отправляющий на почтовый адрес данные. Автообновление можно сделать разными способами и не обязательно её делать через CE Lua. Поищи в Интернете примеры как на CE так и на других языках программирования. Если нужно только на CE + Lua, то задай вопрос на официальный форуме CE.