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

MasterGH

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

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

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

    129

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

  1. Уже была запись про тестирование производительности. В этом примере тестируем разное обращение к функции со средним арифметическим значением Результаты при 4-х запусках avg = 0.93333998758048 avg = 1.0322099291325 avg = 0.92657961891689 avg = 1.1883763135947 Вывод. Разница не существенная.
  2. MasterGH

    Новости по будущему плагину

    vtSingle — тип взят из defines.lua. float его синоним. Single-precision floating-point
  3. MasterGH

    [Cheat Engine] Dissect Data Scaner 1.0.1 beta

    В принципе понятно куда копать. Надо алгоритм сканера переделать на такой, чтобы встав в любое место структуры, т.е. на любой байт, правильно получить смещение в структуре. Для этого надо просчитать то, что в квадратных скобках опкхода. Если это не возможно, потому что регистр перезаписываются, значит ставим не аппаратный бряк на инструкцию и он работает постоянно в холостую записывая нужные регистры перед тем как сработает аппаратный бряк на адресе структуры. Когда случилось, то снимем все бряки, определяем правильно смещение. Ну, а там дальше смотреть...
  4. MasterGH

    [Cheat Engine] Dissect Data Scaner 1.0.1 beta

    Тестирую я радостный на gta3 плагин. Нашел кучу интересных адресов настроек. И силу прыжка, и скоростей Velocity, и id земли на которой стоим и id глобального события (если его переключить, то ты либо в полете, либо арестован либо еще что-то). И тут я увидел что капитально на многих адресах поехали смещения в структуре. В пределах 1-4 байт. И как я понял дело в скорости срабатывания адресов и таймера ожидания перехода аппаратного бряка на следующий байт в структуре до её размера. Представим себе 4-х байтовое значение Начало структуры: +00: xx xx xx xx +04: xx xx xx xx 1. На первом байте не успели сработать инструкции. 2. На втором байте не успели сработать инструкции. 3. На третьем байте наконец сработали и увидели опкод.Опкод распарсили. Получили размер в 4 байта 4. На третьем байте на два байта смещение +00 убежало вперед в смещение +02. Примерно такая картина Начало структуры: +02: [xx xx] xx xx .... и там много что поехало, а некоторые смещения не поехали Окей. Я могу быстро вычислить адрес в скобках [eax+смещение] и даже всякие repe повторы обработать, но как только вот такая штука попадается mov eax, [eax+смещение] или вот такая mov eax, [eax*4+смещение], то eax уже успеет перезаписаться, ведь на данных стоит аппаратный бряк, а он работает после выполнения инструкции. 1) На смещении нужно постоять и подождать других инструкций и если N времени таких нет, то надо мне подумать, как быть дальше. 2) В принципе я могу и не ждать снять аппартный бряк с адреса в структуре и поставить не аппаратный бряк уже на инструкцию и получить eax до инструкции., а не после как при аппаратном. И тут еще один нюанс, на [eax+смещение], не тот адрес, а какой-то соседний или вообще дальний. Похоже надо оставлять оба бряка и аппаратный на смещении структуры и не аппаратный на инструкции. Сохранять данные не аппаратного постоянно, как только сработает аппаратный посмотреть последний данные не аппаратного и с ними работать. В общем буду думать как это все упростить и чтобы стабильно работало. Еще есть такая штука jumps и calls на адрес инструкции, там тоже может быть ситуация...
  5. Пример, который показывает как снять стек вызовов функций function A0() -- Здесь можно удалить ":gsub('\n','\r\n')", но тогда в консоли текст будет в одну строку print(debug.traceback():gsub('\n','\r\n')) end function A1() A0() end function A2() A1() end function A3() for i=1,3 do A2() end end A3() Можно поставить пошаговую отладку в консоли Lua (как на скриншоте) и пройти по шагам
  6. Я обратил внимание на следующие поведения записи и чтения 1. Срабатывают только инструкции чтения до изменения параметра, адрес рабочий С адресом работают инструкции на чтение, но если в друг в этом адресе что-то поменять (например в CE), тот тут же выскочат инструкции на запись. Нельзя однозначно утверждать, что адрес является настроечным параметром, но и нельзя утверждать, что это не рабочий адрес. Какая-то инструкция может жестко менять значение, а может быть будет "стараться" изменить значение адреса в меньшую или большую сторону, но адрес при этом будет рабочим. 2. Срабатывают инструкции записи и чтения, адрес не рабочий Запись и чтение влияет только на часть игры, а не на все или вообще не влияет, а перезаписывается постоянно. Например, на визуальное отображение полоски со здоровьем. Получается, что адрес не рабочий, а у него есть как и в первом пункте инструкции и на запись, и на чтение. 3. Один раз срабатывает инструкция записи и потом всегда на чтение Если попался такой адрес в структуре, то он точно является "настроечным" и рабочим адресом. Например, это какой-то коэффициент, который добавляет, умножает, отнимает... в общем что-то меняет. Что с ним не делай, это адрес будут только "читать". Также это может быть булевой параметр "1 "или "0" и по нему может что-то резко меняться в игре. Окей. Вспоминается окно с кучей инструкций и счетчиков уникальных адресов (не более 8-ми логируется) Постреляв патроны с адресом патронов (в СТАКЛЕРЕ Зов Припяти) сработали инструкции как на запись, так и на чтение. Первая инструкция читает очень часто, вторая редко. В круглых скобках обозначаются количество проскакивающих адресов. Если был выстрел и значение поменялось, то вылезли инструкции записи (все после первых двух). Код читает в цикле адрес...и если, что поменялось, то запишет в него потом. Это похоже на пункт1, который обсуждали выше, но этот адрес патронов не тот, который нужен. С виду рабочий, но патроны потом не стреляют. Патроны это структуры в памяти, а адрес их как счетчик структур Как можно делать Создаем две группы (скрин ниже). Первая текущая и не замороженная. Вторая с двумя замороженными состояниями, когда стоим и ничего не делаем. Делаем несколько выстрелов. Цвет по +AC нас интересует больше всего, он соответствует логике состояний (стреляю и (не стреляю и не стреляю)) Выделяем и перемещаем адреса этого цвета и морозим в таблице. Первый праметр это прочность, второй не знаю. Третий счетик патронов. 3 и 5 адреса связанные, если правильно помню, с объектами патронов В Сталкере это не даст беск. патрнов, но в других играх может иметь смысл как прием сравнения структур и групп. p.s. По Сталкеру Зов Припяти, к сожалению, у меня не было времени взломать патроны или может быть я не умею, не знаю. Какие-то патроны в сталкерах ломал, но не помню как.
  7. MasterGH

    [Cheat Engine] Dissect Data Scaner 1.0.1 beta

    Немного комментариев к этой версии. 1. Исправлены смещения 2. Добавлены также инструкции на запись На скриноте ниже пример сравнения текущей структуры с координатами в СТАЛКЕРЕ Зов Припяти с копией структуры.
  8. MasterGH

    Новости по будущему плагину

    Да, действительно делалось только для 6.7. Будет исправлено описание файла. Баг, результат которого можно видеть на скриншоте ниже. Два одинаковых опкода и неверный оффсет +131, а нужно +130 . Об этом баге я знаю. Скоро будет исправлено
  9. MasterGH

    Новости по будущему плагину

    Не хватало файла GHL_ClassSettings.lua. Перезалил
  10. Версия 1.0.2 beta

    80 раз скачали

    Только для Cheat Engine 6.7 Это тестовая версия, поэтому могут быть ошибки при сканировании. О них можно написать мне в личку с названием игры, сигнатуры инструкции. Если плагин вдруг заключил и пишет что-то в консоли, то нажать на кнопку Stop или для остановки ввести Lua команду stopDissectDataScanner() Установка Распаковать в основную директорию с программой. В архиве форма, файл настроек и lua исходник.
  11. MasterGH

    Новости по будущему плагину

    Проведено огромное количество опытов над структурами. Много переделок. Очень кратко напишу, что поменялось. 1. Название структуры состоит из адреса, количества адресов в ней и времени в миллисекундах на один байт в структуре. Подчеркнуто красным 2. Смещения отбираются только те, на которых за X времени не было обнаружено ни одной инструкции на запись. Чем больше та самая чувствительность, тем точнее результат 3. В именах структур теперь ценная информация. Это смещение, регистр и тип На скриншоте ниже можно посмотреть пункты 2 и 3. Также на этом скриншоте я заморозил по соседству адрес (поставил Lock) и пару раз пострелял в игре Сталкере Зов Припяти Выводы, которые я сделал за очень и очень скромное время пользования. За минут 15 и на паре структур оружия в двух разных играх L4D2 и Сталкер Зов Припяти 1. Если править 4-х байтовые значения, то легко можно нарваться на вылет игры. Но подключившись снова, можно продолжить. 2. Правки значений с типом в 1 байт могут заблокировать оружие (в двух играх) или же устроить скорострельность на полную катушку в L4D2. 3. Правки значений с типом float. Можно легко нарваться на вылет в игре, если например поставить нолик. Деление на ноль или какая-то иная причина. Лучше ставить чуть больше нуля, можно положительные или отрицательные значения 4. Частенько бывают адреса в структуре, на которых включаются инструкции записи только после изменения значения. Тут я пока ничего не смог сделать, просто удалить их из структуры как лишние. 5. Для сканера используется 1 аппаратный брейкпоинт, остальные три штуки еще не используются, т.к. сложно их прикрутить. Если использовать все 4 аппаратных бряка, то скорость сканера была бы в 4 раза быстрее. Сейчас на 2К байт по 10 мс, у меня уходит где-то 150 секунд. Если я ставил 20мс, то находилось на 10 смещений больше или какие-то другие смещения пропадали. Код будущего плагина все еще находится на стадии тестирования. Поэтому пока плагин не выкладываю. upd1: инструкции cmp, add, sub, xor, and, not, test, mulss, fsub, fmul, dec, inc, mul; теперь выводятся в имя элемента структуры. На скриншоте случайно вышел на координаты UI таймера. Сделал три скана трех структур в новых окнах upd2: перемещение структуры Итог перемещения двух структур в первую
  12. По RTTI писать не буду, надо изучать и пробовать. Если в теории, то такой способ даже в играх, в которых нет RTTI. Найти координаты любого игрового объекта, например, главного персонажа. На них поставить брейкпоинт на доступ в CE. Включить опцию счетчика уникальных адресов. Там где их будет очень много, то та инструкция скорее всего работает со всеми координатами в мире. Среди этого многообразия адресов долго будет вручную найти координаты аномалии. Можно написать Lua скрипт, который найден ближайший игровой объект рядом с другим игровым объектом и вывести список таких координат. Если координаты аномалии движутся, то можно вручную найти или опять скриптом через Lua.
  13. Окей. Решение выложили, тему закрываю
  14. Надо тему подводить к итогу и завершать, потому что прошло много времени. Нужно написать подробно, что делал, что не получилось. Скриншоты, видео, текст.
  15. Можно написать скрипт в теге кода под спойлером и пару слов как было сделано. Таблицы некогда проверять
  16. MasterGH

    Анализ Dissect Data Structure 2

    Охота на структуры и удивительное путешествие в мир структур в L4D2 1. Игру L4D2 в оконный режим 2. Установка плагина (позже) 3. Установка VEH отладчика, иначе вылеты 4. Первая миссия. Ищем адрес патронов. Бряк на адрес. Нашли инструкцию Красным показано, что я не всю структуру проанализирую позже. Долго было ждать. Структура больше 5К байт... 5. Делаем сигнатуру любой инструкции при работе с патронами на всякий случай, если игра вылетит. server.dll,83 BE 14 14 00 00 00 7F 4D 6. Переходим в код и ищем проскакивающие адреса на инструкции. Там один адрес нашего пистолета. Клик на него и переносим адрес начала будущей структуры в окно Dissect Window. Можно не создавать структуру (отказываемся). Кликаем "Scanner" (он будет на всех окнах dissrct data) 7. Далее побежало сканирование. В игре можно что-то делать, можно ничего не делать. Долго ждать.. Меняю опции. Чувствительность как была так и осталась минимальная (это время ожидания прерывания на адресе умноженное на коэфициент чувсвительности и на 100 мс). Размер структуры меняю, до 1100 Наконец ~30 секунд дождался без вылетов (иногда бывают, возможно из-за VEH). Появился результат Самые интересны это байтовые и float значения. и инструкции чтения. Их определит можно пока только по логам... Меняю первый байт на 1 и пистолет стал очень быстро стрелять. Ради чего это все и делалось, чтобы похожие адреса искать... Если сравнить дефолтную расструктуризацию, она слева Логи (для меня и для желающих) по определению типа по опкодам Плагин выложу позже. Надо еще доработать и потестить. Вот к примеру float распознал как Pointer и там где fst тоже по +42C тоже фигня. Это ошибки. Это быстро поправить, но могут быть еще ошибки. Не менее интересны еще вложенные структурки, которые удается раскрыть (не все). Вот одна из них и усеяна параметрами, которые можно покрутить Вложенные структуры пока отдельно можно создавать в окнах, чистить сканером, потом подставлять их в основную структуру по имени. В общем пока рано об этом писать. Больше всего меня волнует польза, т.е. что можно с этим сделать. Пока только сразу вышел на скорострельность. Еще шесть параметров покрутил байтовых, ничего не дало. Надо еще попробовать выводить только смещения, которые работают на инструкцияъ чтения, а не "чтении и записи". Запись скорее всего не нужна. Значения просто активно перезаписываются в структуре. А вот оставлять смещения, с которыми работает только "чтение" скорее всего даст куда больше вероятности найти параметр настройки.
  17. MasterGH

    Анализ Dissect Data Structure

    Конечно не секрет, что типы данных не правильно определяются. Вот пример для 50-ти адресов Слева как определил данные CE. Справа как определил их я по логу ниже Понравились данные с размером в 1 байт, привлекают в нимание. Как только я переключил на ноль или 1, то персонаж перестал двигаться и не реагировал на движение. Лог инструкций Пытаюсь по логам определить алгоритм для Lua, чтобы скрипт сам ставил тип и смещение. Конечно есть сюрпризы, когда регистр перезаписывает сам себя и еще куча опкодов. Чтобы получить такой лог мож попробовать этот скрипт. Он черновой
  18. MasterGH

    Cheat Engine 6.7 и Lua. Часть 4

    Решил попробовать написать CE Lua скрипт, который прочесывает структуру и в Dissect data/structures окне создавал бы структуру только со смещениями, с которыми код работает, т.е. читает или пишет. Например, мой персонаж прогуливается по городу, а каждые 200 мс ставится брейкпоинт на смещение +1 до гипотетической N границы структуры (например до 4096). Я не успел сделать определение типа, но смещения внутри структуры получить я успел. Итак, находим начало структуры любой. Запускаем Lua скрипт и просто что-то делаем в игре. Потом вылазит текст с дизассемблированными инструкциями и смещениями. Уже по этим логам можно определить вручную 1) к каким смещением было обращение (адреса по ним мы и будем менять или сравнивать структуры между собой позже) 2) по виду инструкции и соседнему смещению уже примерно можно определить тип данных и их размер Осталось сделать определение типа, а это не так уж долго сделать и осталось взять код из предыдущих записей в блоге формирования структуры в окне dessect data. Так мы получим структуру только с активными смещениями, (а зачем нам пассивные?) и определим в них тип, я надеюсь определим правильно Пример кода, который я использовал
  19. Это должен быть адрес одной из координат. Если игра зависает при подключении отладчика, то может попробовать включить VEH дебаггер. В отладчике из меню вызывается "dessect data/structure " и там в окне указывается адрес начала структуры. Если смотреть скриншот выше это был бы адрес из ebx Когда ты кликнешь на инструкцию у тебя появится регистр плюс смещение. mov [ebx+ смещение] ebx будет началом структуры
  20. Актуально, если под code будет всегда оригинальный код в 10 байт и 10 байт будут другими на другой инструкции. Я думаю, шаблонный генератор все сделает за нас. Помогает такие штуки не забывать и просто о них даже не думать.
  21. Нет смысла. Зачем тебе видео и АА скрипты, если сначала можно найти рабочий адрес скорости и проверить его заморозкой. Все остальное потом
  22. Поставить брейкпоинт на любой адрес координат. Найти начало структуры. Начало лежит в регистре. Например [eax + 0xx]. Начало в eax Расструктуризовать dessect data/structure Взять случайные смещения рядом с eax + 0xx и поменять значения по ним раза в два больше. Зайти в игру и посмотреть, что поменялось. Потратить время и по всей структуре поменять рандомно значения раза в два больше. Тип float к примеру. Если игра вылетает, то повторить с другими смещениями.
  23. Отклонение от обсуждения. Я думаю, вопрос решен. Тему закрываю
  24. MasterGH

    Взлом

    Возвращайся модератором работать. Тему я одобрил, не успел ответить. Создаем тему в запросах. Закрыто
×
×
  • Создать...

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

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