Перейти к содержанию

Лидеры


Популярный контент

Показан контент с высокой репутацией за 12/20/19 во всех областях

  1. 2 балла
    Так, давно что-то ничего не писал в блог Собственно время пришло Данная статья является примером метода о котором рассказано в данном видео Рассмотрим вызов игровой функции на примере перовой части игры Dishonored В данном примере будем восполнять себе количество маны, которая в игре не может регенерироваться полностью после использования череды способностей Для начала нам необходимо найти само значение маны, благо оно храниться 4мя байтами в памяти и тут нет ничего сложного Теперь когда у нас есть адрес маны или же указатель на данный адрес, нам необходимо найти метод который как раз и перезаписывает значение Делается это очень просто (F6) Нас интересует инструкция которая перезаписывает значение 1 раз Выходим на эту инструкцию в дизассемблере и ставим брейк Вот мы и нашли инструкцию, далее просто выходим из него (Кнопка Execute till return) Для того чтобы вызвать метод, необходимо узнать и проанализировать его параметры. Этим и займемся В метод передается 2 параметра, один из которых находится в ecx (Указатель на базовый класс) А второй передается в регистре ecx, до инструкции которая перезапишет значение Данный кусок: push ecx mov ecx,esi Регистр edx содержит все время один и тот же не изменяющийся адрес, т.е он статичен Распишу параметры чтобы было более нагляднее push ecx (Значение 50 в данный момент) mov ecx, esi (В ecx записывается значение из esi (0x0AD0A000)) Теперь если немного проанализировать, то можно понять что 50 - это значение маны, которое будет присвоено игроку после применения способности А 0x0AD0A000 это указатель на начало структуры игрока, т.е PlayerController* player; Таким образом метод выглядит так: ManaMethod(PlayerController* player, int ManaOut); Теперь можно приступать к написанию самого кода на c++, чтобы вызывать этот внутреигровой метод (При этом заранее найдем работающий указатель на класс игрока PlayerController) Для вызова метода нам необходимо определить его соглашение о вызове, т.е в каком порядке туда передаются аргументы Посмотреть все соглашения можно тут https://ru.wikipedia.org/wiki/Соглашение_о_вызове Немного почитав можно увидеть что это соглашение __thiscall thiscall — соглашение о вызовах, используемое компиляторами для языка C++ при вызове методов классов в объектно-ориентированном программировании. Аргументы функции передаются через стек, справа налево. Очистку стека производит вызываемая функция. Соглашение thiscall отличается от cdecl соглашения только тем, что указатель на объект, для которого вызывается метод (указатель this), записывается в регистр ecx. В самом коде объявляем этот метод для его вызова далее //Метод принимает PlayerController* и ManaOut //0x00AB17C0 - адрес которых хранился в edx и он статичен typedef void*(__thiscall * _ManaType)(PlayerController* Player, int Mana); _ManaType ManaFunc = (_ManaType)(0x00AB17C0); Остается только написать вызов этого метода и на этом дело будет сделано /*PlayerConroller.h */ struct PlayerController { public: char pad_0000[2656]; //0x0000 int Mana; //0x0A60 }; /*Метод который вызывается при создании потока из dll*/ void onAttach() { while (true) { if (GetAsyncKeyState(VK_END)) { PlayerController* Player = reinterpret_cast<PlayerController*>(*(DWORD*)(Base + 0x01052DE8)); //Получаем указатель на игрока PlayerController* ManaFunc(Player, 100); } Sleep(150); } } Собственно на этом моменте статья закончена При нажатии на кнопку END внутри игры, мана восполняется до 100 единиц
  2. 2 балла
    С недавним обновлением Raft в игре изменили радар, теперь необходимо ввести код из 4-х цифр, который является частотой, чтобы радар показал координаты, найти массив с координатами и кодами слишком просто, и поэтому мы будем генерировать коды без какого-либо воздействия на память игры. Открыв dnSpy необходимо найти участок кода, отвечающий за генерацию частот. Восстановив код и запустив для проверки, обнаружились некоторые проблемы: 1. Cид используется 1 раз при создании нового мира. 2. Частота состоит из 4 цифр, из-за чего очень много сидов будет подходить под значение первой частоты, которая дается в начале игры, поэтому придется брутить и генерировать все возможные частоты для 2-4 локаций. На генерацию сидов ушло порядка 30 минут, 90000+ возможных сидов и лишь 1 правильный набор кодов. Занятие было бессмысленным, но это был отличный способ занять вечер. Seed: 1276855 ------------------------------ 9839 1106 5814 8084 ------------------------------
  3. 2 балла
    Трейнер для игры Domina:Насилие и Жадность (v1.1.32a) Скриншот: Функционал: + Все ресурсы бесконечные + Бесконечные тайны Магистрата и Легата + Все постройки (кроме тех, которые на каждого гладиатора) Применение: 1. Запустить игру 2. Начать новую бесконечную игру или карьеру 3. Запустить трейнер 4. Профит. Ссылка на загрузку:
  4. 2 балла
    В таблице поиска есть колонки ссылающиеся на название Lua перменных: "value" и "previousvalue" А что можно делать? Сравнивать текущее и предыдущие значения вместе или по отдельности, в том числе на разных вкладках CE Примеры: value == 65 value == 0x65 (или поставить галку hex) value ~= 65 (или поставить галку not) Можно и такое сравнение сделать после поиска неизвестного используя математические функции: math.abs(value - previousvalue) < 10 Можно делать различные комбинации: and (логическое И). or (логическое ИЛИ). not (логическое НЕ). + (сложение); - (вычитание); * (умножение); / (деление); ^ (возведение в степень); % (остаток от деления). == (равно); ~= (не равно); < (меньше); > (больше); <= (меньше или равно); >= (больше или равно). Что на счет xor? Можно написать функцию xor Пишем глобальную функцию сначала: function BitXOR(a,b)--Bitwise xor local p,c=1,0 while a>0 and b>0 do local ra,rb=a%2,b%2 if ra~=rb then c=c+p end a,b,p=(a-ra)/2,(b-rb)/2,p*2 end if a<b then a=b end while a>0 do local ra=a%2 if ra>0 then c=c+p end a,p=(a-ra)/2,p*2 end return c end А потом применяем даже отдельные функции как в этом примере "value > 0 and BitXOR(value, 100) " А может быть я хочу только 100 первых результатов CheckCount100() and value > 0 and BitXOR(value, 50) Также хочу добавить те адреса, которые предположительно являются указателями getAddressSafe('['..value..']')~=nil Или наоборот не являются указателями getAddressSafe('['..value..']')==nil Еще можно попробовать добавить 50 красных и 50 синих указателей в таблицу CE, но это уже задание кому интересно. Можно в теории сравнивать адреса со значениями известных адресов и даже с известными указателями, с метками. Но поиск может затянуться, если адресов очень много. Можно попробовать указать условие, что значение адреса должно находиться в X структуре или в её вероятных указателях. Или попробовать оставить только одинаковые значения адресов, т.е. повторяющихся более 1 раза. Или попробовать искать только те адреса, к которым применимы сразу несколько условий чтобы не кликать их постоянно: (изменилось) И (больше 0) И (меньше 10000) (не изменилось) И (больше 0) И (меньше 10000)
  5. 1 балл
    Спасибо! Это подходящий вариант, правда смещение у меня другое, но не в этом суть, мне осталось немного доработать скрипт и всё будет работать идеально! P.S Получился вот такой страшный скрипт.
  6. 1 балл
    Флажки там активируются и деактивируются только по горячим клавишам, к сожалению. Все верно, Этот скрипт можно использовать для настройки чекбоксов. Т.е. можно сделать как ты хочешь - чтобы чекбоксами можно было управлять. Надо будет строчек 100 Lua написать, чтобы это заработало. Подсказать я подсказал. Если очень нужно готовое решение, есть раздел платных запросов, а лучше мне сразу в личку
  7. 1 балл

    Версия 1.10 Origin

    0 раз скачали

    Трейнер запускаем в уже начатой игре, а иначе будет вылет при загрузки игры из за "vmprotect" Функции парные. Зажимаем клавишу insert и жмем нужную букву. Каждая функция под своей буквой.
  8. 1 балл
    То что он ничем не исполняется Вот можешь посмотреть, как тут скрипт исполняется новым потоком
  9. 1 балл
    Для примера возьмем 2 игры: CSGO и Left 4 Dead 2, в них используется Source Engine, и как можно подумать подсветка должна реализовываться одинаково, но не тут-то было. Давайте взглянем на процесс инициализации предметов (включая игроков) в CSGO: Как можем здесь увидеть для каждого объекта при инициализации резервируется место в структуре подсветки и возвращается ID в этой структуре, который отличный от ID игрока. Внутри GetGlowIndex: Прелести наследования, т.е. есть класс, который наследуется для любых предметов и инициализирует структуру подсветки, даже для обычных занавесок или телевизора. Вот только в L4D2 ничего такого нет, тут все куда более просто или оптимизировано, структура подсветки наследуется только для боссов (танк, курильщик и т.д.) и игроков, а подсветка ведется постоянно нужно лишь изменить уровень прозрачности. А вот структура определяющая подсветку для мобов (обычных зараженных) является динамической из-за чего заполняется только при определенных условиях, это создает некоторые сложности с подсветкой т.к. придется вручную выделять память под каждого моба и заполнять структуру определяющую подсветку, но просто так записав значение по определенным адресам не выйдет из-за подсчета объектов в структуре. Но мы ведь не пальцем деланные, немного пореверсив находим функцию инициализации, правда перед вызовом необходимо получить указатель на моба, это делается с помощью вызова виртуальной функции, которая принимает id и возвращает указатель на структуру. На выходе получаем это:
  10. 1 балл
    Здравствуйте! Я записал видео уроки, по программированию и созданию трейнера на Lua (Cheat Engine), после чего решил поделиться с вами и выложить их на данный форум. Впрочем вот и сами видео уроки: Видео урок 1: В данном видео уроке мы разбираем работу со статическими адресами. Видео урок 2: В данном видео уроке мы научимся работать с AAScript (Cheat Enigne). Видео урок 3: В данном видео уроке, разбираем такую тему как GUI, научимся добавлять контролы, так же научимся работать с ними. Понимаем что такое Main Lua, и учимся с ним работать. Видео урок 4: В данном видео уроке мы учимся ставить BreakPoint и получать значение регистров. После чего учимся создавать хоткеи, создавать таймер, замораживать значения. Видео урок 5: Используем наши знания и пишем трейнер для игры Left 4 Dead 2. В конечном результате работаем с функцией которая взаимодействует с жизнями, обрабатываем ее, и делаем нас бессмертными. (AAScript). Исходники трейнеров выкладываются под видео в описании. Спасибо.
  11. 1 балл
    Обход функции, снятия скринов античитами. 03.01.2020 Undetected Поддерживаемые системы: x64 only Windows 7+ Поддерживаемые режимы игры: Windowed mode FullScreen Инструкция: Для запуска требуются права администратора Запустить файл Запустить игру Играть В зависимости от античита, скрины не будут сниматься или будут чистые ENJOY
  12. 1 балл
    ЗЫ1; ответ на твой вопрос под спойлером:
  13. 1 балл
    1. Название игры. 2. Что за опция (характеристика). 3. СЕ-ный скрипт с ЛОГами. Без вот этих 3-х пунктов, лично я больше отвечать не буду. Результат таких запросов - простая тема разрастается на несколько страниц. Ты проде выкладывал несколько трейнеров? И при этом не можешь написать элементарный скрипт?
  14. 1 балл
    В архиве имеются, следующие разрешения: 3840x2160, 1920x1080, 1280x720. Если нету, под ваше разрешения - можете сами от масштабировать! Миниатюра: Скачать c Яндекса Wallpaper_Taiwan_v2.zip (сконвертированные в jpeg для уменьшения размера)
  15. 1 балл
    Начнем с FLIRT(Fast Library Identification and Recognition Technology). Суть технологии проста - экономия времени, вместо ручного восстановления библиотечных функций, используются сигнатурные файлы сгенерированные из статических библиотек с помощью утилит, которые идут в комплексе с IDA SDK, которые по ходу анализа переименовывают функции найденный с помощью сигнатур. Сигнатурный файлы выглядит так: Например, мы знаем, что игра X использует Lua для выполнения скриптов, но сама длл луа вшита в файл, а не идет в комплексе рядом с ним, из-за чего мы не можем увидеть импортируемые функции, а значит придется потратить кучу времени, чтобы вручную по исходникам восстановить их. И тут на помощь приходит FLIRT, подключаем сигнатурный модуль в процесс анализа и буквально через пару секунд функции начинаются помечаться как библиотечные и подписываться. Пока IDA работает, реверсер отдыхает. У GHIDRA есть подобный функционал, но называется Function ID. И чтобы базы для гидры не генерировать руками, есть готовый скрипт, но для начала совету прочитать статью автора, чтобы не было вопросов по использованию скрипта: https://blog.threatrack.de/2019/09/20/ghidra-fid-generator/
  16. 1 балл
    Версия игры: Mount&Blade Warband_1.153, мудули: Native, 3.301, 3.9.3 Этот трейнер для ВАС..., если ВАМ: Хочется снова сыграть в "Mount&Blade Warband: Native или Prophesy of Pendor", но лень прокачивать персонаж и компаньонов?!. Надоело долгое перемещение по карте, нудное выстраивание отношений с Нолдорами... . Трудное зарабатывание "Куалиса", искать лучшее оружие и аммуницию, лошадей. И многое другое... Требуется установленный Cheat Engine 6.7 или выше версия. Mount&Blade Warband_1.153_3in1.7z
  17. 1 балл

    Версия 1.4 GOG

    4 раза скачали

    Использование: Запускаем сначала игру, а в главном меню игры (либо в уже начатой)запускаем трейнер (.cpl) Функции: 1. > Бессмертие. 2. > Легкие убийства. 3. > Бесконечный прыжок. 4. > Бесконечные патроны. 5. > Бесконечное золото (надо что то купить с активной функцией) 6. > Без перезарядки умений. 7. > Бесконечные очки.
  18. 1 балл

    Версия 3.3.06

    2 раза скачали

    Использование: Запускаем сначала игру, а в главном меню игры (либо в уже начатой)запускаем трейнер (.cpl) Клавиши на функции парные.Зажимаем insert и жмем нужную клавишу на панели трейнера.
  19. 1 балл

    Версия HOODLUM

    16 раз скачали

    Использование: Запускаем сначала игру, а в главном меню игры (либо в уже начатой)запускаем трейнер (.cpl) Переключение интерфейса с eng на rus правой клавишей мыши по панели трейнера.
  20. 1 балл

    Версия 1.3

    15 раз скачали

    Использование: Запускаем сначала игру, а в главное меню игры (либо в уже начатой игре) запускаем трейнер. Функции: 1. > Бессмертие. 2. > Без перезарядки оружия. 3. > Бесконечные патроны. 4. > Максимальная точность оружия. (На ружье оставил стандартную) 5. > Без отдачи оружия. 6. > Урон каждого оружия увеличен в 1.5к раз. 7. > Бесконечные предметы. 8. > Сбросить время. 9. > Показать предметы.
  21. 0 баллов
    ЗЫ: 4. А если равно 25, то что нужно сделать? Нажать Alt + F4?
×

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.