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

MasterGH

Ветераны
  • Постов

    2 999
  • Зарегистрирован

  • Победитель дней

    129

Весь контент MasterGH

  1. Функции: 1) Три типа данных: float, double, integer 2) 10 слотов сохранений 3) Управление горячими клавишами. ctrl+X - где X от 0 до 9 сохраняет позицию, shift + X загружает ранее сохраненную позицию 4) Озвучивание загрузки или сохранения Как пользоваться: 1. Подключаемся к процессу игры любым способом (хоть вручную, хоть на Lua, чем угодно) 2. В CE вставляем Lua скрипт 3. Меняем адрес teleport_address = "03D2C6DC" на тот который нужно. Здесь может быть указатель например -"[[address+XX]+XX]" или через registersymbol() в АА скриптах. Не тестировалось если адрес еще невалидный, т.е. не существует в памяти. По идее слоты проинициализируются с нулевыми координатами по умолчанию. Поэтому лучше Lua скрипт запускать в момент существования адреса. Проверка на существование адреса - getAddressSafe(string, local OPTIONAL, shallow OPTIONAL): returns the address of a symbol, or nil if not found. Similar to getAddress when errorOnLookup is false, but returns nil instead. Проверку можно делать по таймеру. Запуск скрипта это последняя строка 4.Меняем тип данных type_data = 'INTEGER' -- FLOAT, DOUBLE, INTEGER Данный скрипт предоставляется как есть. Сделан для всех пользователей форума и можно использовать его в любых целях: в образовательных, в коммерческих. Если что-то не работает, то придется править вам самим. У меня к сожалению нет времени на оказание помощи. Справочник по луа функциям в файле"celua.txt"
  2. Мой пример для integer. Его можно прееделать для float и под твой адрес -- ctrl + R - сбросить позицию -- ctrl + X - сохранить в слот X, где X от 1 до 10 -- shift + X - сохранить в слот X, где X от 1 до 10
  3. В Cheat Engine есть программа туториал и там должно быть упражнение по поиску указателей как раз через сканер памяти и установку брейкпоинта. На ютубе должны быть наглядные решения этих туториалов. Там ничего сложного нет. Даже можно без сканера пройтись вверх по дизассемблеру и составить указатель. Найти видео можно по фразе "cheat engine tutorials"
  4. Есть очень много руководств, как искать указатели. Я очень и очень редко ищу целые указатели. Проще править код. Если надо структурки сравнивать, то можно поискать и указатели. Самый проверенный и самый сложный через отладчик Cheat Engine или через IDA, или гидру, или любой какой угодно. Смотрим стек, выходим из функций, трейсинг... Если указатель постоянно рассчитывается при обращении, то быстро найдешь. Самый простой способ через сканер памяти и отладчик. В этом случае как повезет + надо записывать разные варианты. Перезагружать процесс. Еще простой способ и долгий автоматический поиск. И еще один способ отказаться от указателей полностью редактируя код или использовать частичные уровни указателей 1,2 уровня (или больше, сколько надо) как для сравнения структур так и для инъекции.
  5. Похоже игра на Mono и Unity. Найти метод по некоторому названию (где-то выше по коду) в CE и скомпилировать это метод по названию (перед активацией скрипта АА) Пример если название функции "TakeDamage" (здесь просто нопинг) Вообще, у @Xipho было видео по Subnautica на канале Gamehacklab[RU]. Там monodessector и там разные подходы. У меня в блоге тоже можно поискать как ломать игры на Unity. Если движок знаешь, да еще и игра на Моно, да еще и без обфускации, то можно что хочешь с ней делать. Документация Unity функций.
  6. unepic.exe+2D455: 8B 15 888C6800 - mov edx,[00688C88] // цветами показан обратный порядок следования байт, просто так инструкции следует "перевернутыми" 8B 15 - это бинарный/байтовый код инструкции mov edx Во многих играх после перекомпиляции кода, инструкции сохраняют последовательность, но меняются смещения и адреса внутри. Можно попробовать в сигнаруте искать по первым начальным байтам последовательность инструкций, но в этом случае нужно умело править код. Т.е. содержимое инструкции, смещения, адреса могут поменяться. Т.е. если mov edx сохранил свое положение в сигнатуре, то вот адрес [00688C88] уже может быть другим, а точнее 90% будет другим и инъекцию кода уже надо делать не зарнее подготовленную, а генерируемую или как-то еще копируя участки кода и т.п. По опыту небольшого исследования, могу сказать есть инструкции, которые очень просто подходит для редактирования с такими "гибкими" сигнатурами: например по смещениям просто, что-то нопить. А есть инструкции, которые не достаточно нопить, а есть типа этой unepic.exe+2D455: 8B 15 888C6800 - mov edx,[00688C88] где нужно танцевать с бубном, т.к. будущая инъекция кода еще не известна, а будет известно на какой-то игре
  7. MasterGH

    "AlphaGo Zero совсем на пальцах"

    За нейронными сетями и быстрыми вычислениями (например на тензорных ядрах видеокарт) скорее всего, огромное будущее и огромный спрос. Стартануть в эту тему можно, изучив статью с хабра о принципах AlphaGo Zero и вот эту. Основные моменты это рекуррентные сети, которые ищут в глубь и сверточные сети, которые чем-то похоже на хеш-сумму (на тензорных ядрах они-то и быстро считаются). На данный момент по своей работе я активно развиваюсь в нескольких направлениях: в многопоточном программировании на CPU/GPU, вычислительных шейдерах, сокетах. Если писать программы на одном CPU ядре, то все чаще этого не хватает по мощности как на ПК так и тем более на мобильных устройствах. Такое ощущение, что без многопоточного программирования скоро нельзя будет никуда устроиться работать. Сейчас тенденция много ядер на CPU и их использовать. А еще лучше и быстрее что-то "тяжелое" отправить вычислять на GPU. Это не говоря по обработке графических данных. С ними очень эффективно работают программы на GPU. А чтобы системы соединялись между собой на расстояниях надо хорошо знать сокеты и многопоточное программирование. Основная фишка в многопоточности это спланировать множество задач из одной точки программы и в другой точке ждать, когда они все одновременно выполнятся. Некоторые, задачи при этом должны синхронизироваться только с основным потоком. Когда все задачи выполняться на разных ядрах CPU, то итоговый результат на каком-то одном ядре уже сделает все что требуется. Бонусом к ускорению на CPU ядрах служат специальные ассемблерные инструкции, которые например, позволяют обрабатывать больше данных за меньшее количество тактов. Интересующимся ссылки в основном по Unity игровом движке
  8. Титры обычно находятся в отдельных не исполняемых файлах. Пишут редакторы субтитров, которые распаковывают игровые ресурсы, позволяют менять содержимое и запаковывать обратно. Либо искать готовый, либо свой писать. Чтобы свой написать,то через любой отладчик/дизассемблер искать код распаковки ресурсов и на его основе сделать свой. Более подробно не подскажу, надо сидеть и заниматься этим, а времени на это нет к сожалению
  9. Это точно верно? Т.к. значение записывается в инструкцию. P.S.
  10. В CE 6.7 Можно не искать "memrec" по "ID". memrec — это ключевое слово в AA скриптах, которое может возвращать nil. Просто memrec с проверкой на nil:
  11. Ну, тогда ничего делать не надо. CSV формат табличный с ключевиками и парсить его через Lua. Или же просто на lua скрипте или же любым текстом. Не должны, а могут быть. https://love2d.org/wiki/love.data Любые данные: бинарные, сжатые, серилизованые, любой формат, который движок предоставляет. Вообще интересный движок.
  12. Какой игровой движок? Правильнее делать специальные запакованные файлы-ресурсы и располагать их по некоторому пути. В этих ресурсах, а они обычно сильно сжимаются, могут быть тексты, модели, текстуры, музыка, анимации и так далее. Когда ты из игрового меню запускаешь игровой уровень, то эти самые ресурсы распаковываются и загружаются в игру. Игру не нужно перекомпилировать. Также ресурсы можно подгружать не все сразу, а в определенных местах игры на чек-поинтах или при загрузках сохранений. Можно подгружать из самописной встроенной игровой консоли по специальным командам в том числе по сетевому пути. Текстовая информация Диалоги в txt, ini, json, xml, lua или табличные форматы или в чем-то "читаемом" лучше в открытом виде не держать. Игра должна быть закрытой коробкой. Для пользователя должен быть доступен исполняемый файл, а остальное все должно быть закрыто. В том виде, в каком продали игру - в том виде и лучше и играть. Иначе, имеем шанс на кучу не протестированных модификаций, которые могут приводить к ошибкам и сваливаться на голову техподдержки.
  13. Только писать отдельную функцию aobscan и её использовать в скриптах АА, естественно с помощью функций Lua или использовать не Cheat Engine, а например, C++/ASM + WinAPI и там сделать поиск множества сигнатур.
  14. Можно остановиться сразу на Entry Point (первая инструкция) в отладке. Для этого надо поставить WndowsDebugger в настройках. Потом зайти в список процессов. Выбрать File->CreateProcess. Поставить, если нужны, параметры открытия процесса. После чего сразу будет остановка на Entry Point
  15. Это число 0x66666667 "магическое". Если вкратце оно для того чтобы не использовать "дорогие" инструкции деления. Кое что о нем есть здесь. И сюда.
  16. Если я правильно скриншот нашел Гаджеты эти в инвентаре могут быть списками поведений. У списка, обычно, есть счетчик и он может выводится на экран. Тут можно пробовать искать функцию, которая добавляет список поведения в инвентарь. Вызывать её, если поведений в списке меньше максимального значения или некоторого.
  17. MasterGH

    [The Escapists 2 + Unity + dnSpy] Спавн итемов.

    А, не сразу понял. Надо было мне сначала выйти из учётки, потом скачать и увидеть что файл не доступен. Я его перезалил в саму тему.
  18. MasterGH

    Neural Network Right Here in Your Browser

    Ссылка на сайт. Как с этим работать не знаю, но может быть позже напишу. Ссылка на другие материалы.
  19. MasterGH

    Unity + ML (Python)

    Unity — среда для тренировки искусственного интеллекта. Ниже пример обучения ИИ для игры в гонки. В новой версии Unity много изменений, если кому интересно на официальном сайте много информации по обновлениям
  20. MasterGH

    CE Lua 7.0 Поиск по формуле

    В таблице поиска есть колонки ссылающиеся на название 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)
  21. MasterGH

    Форуму 10 лет

    11 декабря 2019 года форуму Gamehacklab исполнится 10 лет. Это дата первого пользователя форума. Поздравляю всех: активных пользователей, высший состав форума, админов и модеров, старожил, помогаторов, тех кто был на форуме очень давно и перестал заходить. Отдельно @Xipho, @srg91, @partoftheworlD, @Garik66, @LIRW, @SER[G]ANT, @gmz. Извините, если кого-то персонально пропустил. Можно пожелать всем бесконечного энтузиазма на тему поиска сигнатур и значений, сравнении структур и стеков, дизассемблирования и ассемблирования. Энтузиазма в программировании на C++ и WinAPI. Энтузизма в том, чтобы найти универсальное решение при создании любого чита для любой игры. P.S. Для энтузиазма. Подкину идею. Мне нравится видеть, как наборы инструкций можно условно разделить на: математические, логические, ветвления, чтения и записи и другие. При этом математические на мой взгляд наиболее выделяются, т.к. они заставляют в игре всему меняться. Хотя логические инструкции тоже могут что-то менять, но по ощущениям не так явно менять, как математические инструкции. По математическим в основном меняются перемещение камеры и перемещение персонажа и изменяются игровые значения. Можно отдизассемблировать весь игровой код и найти все математические операции и точно некоторые из них связаны с будущими читами. Это всякие добавить, отнять, умножить, разделить. Не думаю, что их будет за тысячу даже, которые именно нужны для читов, а не те которые что-то рассчитывают не понятно что) Если руки дойдут, то возьму IDA да пройдусь по какой-нибудь игре с поиском всех математических инструкций, поставлю на них счетчик срабатывания да прогуляюсь в игре персонажем... Если будет время...
  22. Да вроде я выкладывал AntonVit-видео на форум Разные варианты есть, зависит от кода Обычно самый простой если по одной координате x = x + dx * dt * Time.deltaTime; Где dx например это 3м, а dt= 1c, Time.deltaTime - разница времени между кадрами отрисовки. Получается смещение на 3 метра за 1 секунду с учетом синхронизации кадров. Кадр может быть отрисовки или кадр может быть физическим. Это упрощенная схема. Для 3д Как обычно используются уже три оси и углы поворота. Если в игре есть физ. движок то там задается velocity по координатам. В более реалистичных расчетах есть формулы посложнее. Там скорость передвижения задается от колес, как Xipho написал var fwdSpeed = Vector3.Dot(rigidbody.velocity, transform.forward); (link) Текущая скорость это просто готовая уже рассчитанная величина для показа например в графическом интерфейсе. Толку её искать. Другое дело искать ускорение и предел скорости, другие параметры... Вот от них уже зависит и скорость и другое. Судя по коду эту величину и надо менять Вариант 1. Это нормализованный вектор в глобальной системе координат. Нормализованный, т.е. от 0 до 1 каждая его ось. Вариант 2 Направление игрового объекта, туда куда он как бы смотрит относительно самого себя. Обычно, тоже сразу нормазилованный. Если бы я знал точку А и точку Б, то направление было бы Б - А. Это без нормализации. Если А - точка откуда я смотрю, а Б - точка куда я смотрю. То вектор направления был бы также: Б - А. Но если я хочу относительно модели всегда знать, куда она направлена, то надо знать Б относительно 3д сетки. Короче forward позволяет узнать вектор направления. Так называемый локальный Forward можно разными способами высчитывать.
  23. MasterGH

    Задачка по IDA и Python

    Довольно интересно, спасибо. Как появится время, то обязательно продолжу исследование.
  24. MasterGH

    Задачка по IDA и Python

    Вдохновение появилось после просмотра видео @Xipho по Ultimap Когда в Ultimap появляются Nx адресов с одним счетчиком, то хочется увидеть эти связи на графиках IDA. Появилась идея загуглить как в IDA через IDC скрипт отрисовать ветвь кода или ветви кода, на которых эти самые адреса связаны между собой, а все вложенные другие скрывать. Пока из подсказок я нашел это и это Допустим для тренировки даны два адреса из одной ветви кода (это я точно знаю, т.к. получен не из ultimap, а из tracelog) Адрес1 - Tutorial-i386.exe+2578F - 29 83 AC040000 - sub [ebx+000004AC],eax" или адрес 0x00402B77 Адрес2 - Tutorial-i386.exe+16DBED - 89 45 FC - mov [ebp-04],eax или адрес 0x0056DBED И вот думаю, как скрипт ниже переделать, чтобы сначала вывести текстовый маршрут, а потом и хотя бы одну ветвь кода. Т.е. поднимаясь вверх по иерархии вызовов нужно остановиться до Адреса2. Пока просто вывод от стартовой функции без условий Как будет время попробую доделать... p.s. Ну ничего так idc скрипты. Много всего, но смысл тот же, что и в CE Lua у некоторых функций. Еще не разобрался как Python подключить к IDA, пока на idc скриптах. Будет интересно еще посмотреть эту же задачу на Hydra и Radare, ну и в CE (в новой версии появилось окно диаграмм)
×
×
  • Создать...

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

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