Подкатегории

  • 16 Темы
    16 Сообщения
    PromisingP
    Синтаксис и команды скриптов в Cheat Engine.

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

    Окно скриптинга может быть открыто через окно отладчика, или сочетанием клавиш Ctrl+A в этом окне:

    aa3d2169-17ba-46a0-8283-610eeac9bb0d-изображение.png

    После открытия вы увидите следующее окно:

    dc90933e-a171-435d-8681-fc97e5aa4bde-изображение.png

    В нём можно написать скрипт и нажать кнопку Execute что позволит выполнить скрипт. Что бы добавить скрипт в таблицу и сохранить его, вам сначала нужно добавить в него определённые команды, а именно две команды обозначающие разделы, которые будут выполняться при включении и выключении скрипта [ENABLE] [DISABLE]:

    18a14491-4909-4895-b017-9a3a8e5b33e0-изображение.png

    Эти команды обозначают правила для включения и выключения скрипта. После их добавления можно добавить скрипт в таблицу с помощью контекстного меню:

    e2ab9f5a-ac29-458f-9db2-7d45305ec53b-изображение.png

    Если всё сделано верно, скрипт появится в таблице и окно редактора можно закрыть:

    3549713b-31a9-4a37-a1e6-9651812135a0-изображение.png

    Теперь вы можете снова открыть редактор, но уже для конкретно этого скрипта в таблице. Для этого дважды кликните по нему в графе Value, или откройте редактор через контекстное меню:

    8dfbfc3d-4265-41c7-b5c8-6f3a7e013269-изображение.png

    Откроется редактор для конкретно этого скрипта, вы можете сохранить изменённый скрипт нажав кнопочку OK:

    7ab76f83-bde0-4213-b5b1-28cbcca1d222-изображение.png

    Основные команды которые могут пригодиться:

    Запись данных по адресу, необходимо указывать размерность:

    //db - byte //dw - word //dd - dword //dq - qword (Адрес): db/dw/dd/dq(размерность) (число) //Пример, записать по адресу 0087745A подряд 12 байт, сначала 0, дальше 5, потом 7. 0087745A: dd 0 5 7 //Пример, записать по адресу метки label подряд 4 байта 1, 7, 10, 2 label: db 1 7 A 2

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

    //По адресу 0087745A располагается метка label, метка label нигде не определена, //значит она определяется и обозначается как место в скрипте после добавления. //Таким образом в данном примере label идёт в зоне 0087745A, сразу после него и указывает на тоже самое место, //то есть далее использовать label будет тоже самое что указать 0087745A: 0087745A: label: dd 0 //В следующем примере, указано что после 0087745A выделено 4 байта со значением 0, //зарезервировано командой dd 0, получается, метка будет указывать на следующие 4 байта после первых идущих в 0087745A: 0087745A: dd 0 label: dd 0

    Метка может быть зарегистрирована в текущем скрипте, или даже объявлена глобально для использования из других скриптов.
    label(lack) зарегистрировать метку lack для текущего скрипта.
    registersymbol(lack) зарегистрировать метку lack глобально.
    unregistersymbol(lack) снять регистрацию с метки lack, обычно используется в секции [DISABLE].

    Пример скрипта, который записывает при включении по адресу 0087745A число float 4 байта 5, а при выключении int32 0:

    6a28906b-91b1-4705-8723-eb71d17e7f3a-изображение.png

    С помощью скрипта вы можете легко выделить память и записать в неё значения. Выделяется память с помощью команды alloc(newmem, 1000), эта команда выделяет новую память как минимум размером 1000 и создаёт для неё метку newmem, которая аналогична адресу выделенной памяти.

    Пример скрипта в котором выделяется новая память и в неё записывается значение, после выключения скрипта память освобождается командой dealloc(newmem):

    0587b40e-a7b4-48ce-82f9-d96514d6d49c-изображение.png

    Мы можем зарегистрировать newmem что бы получить возможность добавить эту метку как адрес в таблицу и увидеть значение:

    b11f6e64-bb52-40f6-a153-d2eed90574af-изображение.png

    Добавьте адрес newmem в таблицу, нажав на кнопку Add Address Manually:

    8f3006e6-3215-494d-b885-53061d0a6d72-изображение.png

    b027a2c5-e3cf-489f-b746-2308e7aca1c3-изображение.png

    Включите скрипт нажав на квадратик слева от него, если всё сделано верно вы увидите значение записанное в память, не забудьте что Cheat Engine должен быть подключён к какому то процессу:

    a191fe28-9104-466d-9804-ff62d53e3ea8-изображение.png

    Значение float, измените его тип дважды кликнув на 4 Bytes в столбике Type что бы оно отображалось корректно:

    c9687ac4-c521-46f7-89d8-caf560d90eae-изображение.png

    Более продвинутые команды и примеры скриптов рассмотрены в следующих статьях.

  • Защита статических базовых значений в игре.

    10
    0 Голоса
    10 Сообщения
    163 Просмотры
    __fastcall_

    @sasha21l Тогда можно сделать поиск по сигнатуре, можно вообще через хук какой-нибудь функции получать игрока, много вариантов вообщем. Можно ещё пореверсить структуры игры, может там вообще что-то такое будет: CWorld -> CEntityList -> CPlayer, это просто пример. И тогда можно получать структуру CWorld или Entitylist и от туда получать игрока своего.

  • Оффсеты

    5
    0 Голоса
    5 Сообщения
    337 Просмотры
    FoxEditF

    @__fastcall Спасибо! Твой ответ полностью ответил на мой вопрос. Я понял, что дело в том, что я неверно воспринимал эти списки оффсетов, которые люди выкладывают на форумах. Я думал, что эти списки будут содержать в себе подробную информацию, например, сразу до хп или патронов (Что-то вроде 2B8 -> 30 -> ...). Но как ты и показал в примере (который, к слову, также объясняет и тот самый код, который я привёл в самом верху темы) hazedumper, мне дают по отдельности адреса к началам сущностей, например, игрока и отдельно оффсеты, которые я могу применять К этим сущностям. То есть в списке у меня может быть 2 разных оффсета, которые я просто должен скомбинировать, чтобы "прыгнуть" к начале структуры, допустим, игрока и потом "прыгнуть" к его хп.

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

  • Вызов игровой функции

    5
    0 Голоса
    5 Сообщения
    189 Просмотры
    StoneWeaverS

    Пользователь @Inode написал в Вызов игровой функции:

    не понял что значит "для managed".

    Это управляемый код, скомпилированный не в х86 код, а в промежуточный байткод. Для него хук делается немного иначе, чем для обычного кода. Погугли хук на C#

  • Автоматизированный вызов функций определенных классов.

    5
    0 Голоса
    5 Сообщения
    137 Просмотры
    StoneWeaverS

    Пользователь @beetlejuice541 написал в Автоматизированный вызов функций определенных классов.:

    @StoneWeaver А как в целом относитесь к идее самостоятельного вызова функций в игре? Я даже не встречал особо уроков на эту тему. Хотя все мои попытки поиска по типу "вызов функций unity hack" и подобное, выдает мне уроки именно по unity. 😖

    Хорошо отношусь. Это самый лучший вариант хака, по идее

  • помогите со скриптом

    4
    0 Голоса
    4 Сообщения
    106 Просмотры
    K

    push копирует значение, pop вставляет.
    Но у тебя разный тип данных, один float другой 4 байта.
    Надо преобразовать в другой тип данных, а потом уже вставлять в нужный тип данных(Float)

  • Как автоматически получить значение зная AOB?

    2
    0 Голоса
    2 Сообщения
    85 Просмотры
    Нет ответов
  • Подскажите плез (нид хелп)

    2
    +0
    0 Голоса
    2 Сообщения
    108 Просмотры
    T

    Пользователь @lagg написал в Подскажите плез (нид хелп):

    Меня интересует как достать координаты своего персонажа

    Прочитать их из памяти процесса.

    Пользователь @lagg написал в Подскажите плез (нид хелп):

    Функционал прост:

    Я бы так не сказал.

    Пользователь @lagg написал в Подскажите плез (нид хелп):

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

    Для функционала радара потребуется знания геометрии.

    Пользователь @lagg написал в Подскажите плез (нид хелп):

    Это все нужно сделать в ММО РПГ

    На сколько я помню, тут запросы не распространялись на онлайн игры(хотя может я ошибаюсь)

    Пользователь @lagg написал в Подскажите плез (нид хелп):

    знающий человек кто бы смог помоч

    Учитывая заданные вопросы, помощи тут будет мало.

    Пользователь @lagg написал в Подскажите плез (нид хелп):

    или стать сенсеем и раздуплить меня

    Боюсь обучение до поставленных целей займет слишком много времени.

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

  • Minecraft скрипт для мультиаккинга

    1
    0 Голоса
    1 Сообщения
    92 Просмотры
    Нет ответов
  • Можно ли применить спидхак не ко всей игре, а к отдельной инструкции?

    6
    0 Голоса
    6 Сообщения
    296 Просмотры
    Partizan1078P

    @sinkhrophazatron Мне Почему-то пришла в голову идея с созданием своего потока. И вызывать нужную функцию по своему таймеру.

  • Как упростить работу в Structure dissect?

    3
    0 Голоса
    3 Сообщения
    112 Просмотры
    K

    @Partizan1078 Спасибо!

  • За что отвечает настройка размера стека в дебаггере?

    3
    0 Голоса
    3 Сообщения
    61 Просмотры
    K

    @Partizan1078 Спасибо большое!

  • The Godfather II v.1.0.764.0

    2
    1 Голоса
    2 Сообщения
    95 Просмотры
    P

    @Partizan1078 Чем не доволен? Нормальное видео. Хороший урок.

  • Проблема с сравнением.

    4
    0 Голоса
    4 Сообщения
    109 Просмотры
    RotlJotR

    UPD.

    Проблему решил взяв другую инструкцию, почему-то именно в этой у меня не работало сравнение и просто приводило к крашу.

  • Как понять какой в игре античит?

    2
    0 Голоса
    2 Сообщения
    230 Просмотры
    S

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

    Например, в играх, разработанных компанией Valve, таких как Counter-Strike: Global Offensive (CS:GO) и Team Fortress 2 (TF2), используется античит Valve Anti-Cheat (VAC) В игре VALORANT разработчики использовали собственную систему античита

    Если вы не можете найти информацию о конкретной игре, вы также можете обратиться к сообществу игроков или официальным форумам игры для получения дополнительной информации о том, какой античит используется в игре. https://you.com/ GPT )

  • Как выучить более углубленный C++

    5
    0 Голоса
    5 Сообщения
    272 Просмотры
    __fastcall_

    @Droid Про маску сам автор видео рассказывает. Со 2 минуты и по 5 минуту.

  • автогео для идеального мира

    1
    0 Голоса
    1 Сообщения
    122 Просмотры
    Нет ответов
  • Эта тема удалена!

    Не решенные
    1
    0 Голоса
    1 Сообщения
    7 Просмотры
    Нет ответов
  • Поиск адресов в онлайн играх

    6
    0 Голоса
    6 Сообщения
    387 Просмотры
    StoneWeaverS

    В общих чертах код внедряет ассемблерный код в игру и выполняет его. Смещение функции Lua_DoString определено заранее. Скорее всего, эта функция находится в какой-то из библиотек, а смещение до функции от базового адреса библиотеки чаще всего статично. Никакой магии.

  • Поиск инструкций без отладчика отталкиваясь от указателя.

    Закрыта
    2
    0 Голоса
    2 Сообщения
    212 Просмотры
    StoneWeaverS

    @Pitronic предлагаю задать вопрос там, где ты более активен, ибо на сто процентов уверен, что получив ответ тут, ты утащишь его туда.

  • Вопрос по теме написание макросов языке на lua

    39
    0 Голоса
    39 Сообщения
    871 Просмотры
    StoneWeaverS

    Пользователь @Partizan1078 написал в Вопрос по теме написание макросов языке на lua:

    У меня нубский вопрос. Ни как не догоню.
    Почему вот так всё работает как надо.

    Во втором случае ты функцию ctrl_i_pr объявил, но не вызвал. Объявления мало. Объявление лишь говорит компилятору, что вот такая функция существует, и она будет делать вот это и вот это. А чтобы реально выполнить действия, функцию надо вызвать. Ну или назначить её на горячую клавишу с последующим нажатием этой клавиши, разумеется.