MasterGH

Администраторы
  • Публикации

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

  • Посещение

Репутация

253 NOPer

О MasterGH

  • Звание
    Сооснователь
  • День рождения 12/31/86

Информация

  • Пол Мужчина

Посетители профиля

57127 просмотров профиля
  1.         Репозиторий   1. На адрес устанавливается брейкпоинт. 2. Идем в игру делаем или не делаем что-то 3. Начинают срабатывать инструкции на брейкпоинте 4. От каждой инструкции начинается трейслог, подобный тому, который есть у CE, но менее тормозной 5. Заканчивается трейслог на инструкции, на 100-ом счетчике после ret-а (об этом пункте будет уточнение). Здесь выходим на коневой цикл 6. Трейслог останавливается и ожидание следующей инструкции, которая сработает на брейкпоинте, она должна быть отличной   В итоге мы имеем кучу трейслогов начинающихся с адреса работающего с параметром (например, кол-во патронов в обойме) и заканчивающихся на корневом цикле. Также мы собираем данные об адресах с рет-ами и счетчиками. По этим данным можно нарисовать схему, где ret-ы меняют направление пути прохождения потоком дизассемблерного кода   На скриншотах ниже Вертикальные линии со кружками -— это ветвь трейслога Белый кружок — адрес ret-a, который не повторялся Пунктирный кружок — адрес ret-а, который повторялся. Стрелка от такого пунктирного круга будет указывать на белый круг.   По схеме видим, где ret-ы меняют свое направление поднимаясь по рутине в корневом цикле         По плану по визуальной части: 1. Клик на кружок — переход на код 2. Придумать что-то, чтобы стрелки не накладывались друг на друга 3. Установка брейкпоинтов на кружках — становиться красными 4. Легенда. Номер ветви, связанная инструкция, состояние брейкпоинтов. Комментарий к ветви 5. Загрузка/сохранение легенды   Для чего нужно. Для поиска условий, которые включают и выключают ветви кода. Т.е. чтобы можно было это условие быстро найти и изменив его, повторить выполнение кода ветви, которая "пробьётся" из корневого цикла. Таким образом попытаться повторить действие в игре, а если не получаться повторить, то определить дополнительные условия.
  2. Рисование стрелок

           
  3. От всего форума, от всех пользователей большой респект за видео. Супер 
  4. Открываем Lua консоль из дизассемблера Пишем Lua скрипт Дальше по шагам как на картинке   Сколько я не пользовался CE я никогда не знал об этом отладчике. Когда я случайно узнал, то был приятно удивлен. Если мы пишем какую-то функцию и она дает сбой, то её можно отладить как на скриншоте. Это может быть и не функция. Например, код прочитал какой-то файл с текстом сохраненных параметров и подсмотрели в пошаговой Lua отладке что происходит дальше.   *Действуют горячие клавиши. Например, F7— шаг, F9 — запуск без остановки.
  5. Взлом Diablo The Hell v1 209

    Если интересно, набросал инфу 1. Для увеличения скорости записи в файл можно использовать спидхак (тем же Lua) speedhack_setSpeed(speed) : Enables the speedhack if needed and sets the specific speed speedhack_getSpeed(): Returns the last set speed 2. Таймер может проскочить адрес, в этом случае можно вызывать функцию Lua из AA кода. На форуме где-то была тема. Может быть сложно. 3. Вывод в файл может быть с одинаковыми id-шникиами. Возможно, надо исправить 4. Можно использоваться функцию print('запись') для проверки происходящих действий в скрипте Lua. Т.е. пишет в файл ли, выполняются ли условия, что записал в файл и так далее... 5. Можно использовать звуковое оповещение из Lua, в конце расчета
  6. Опубликованная в веб формате книга на официальном сайте. Язык английский   Перейти   Оглавление книги   Книга о приемах программирования больших проектов, в которых огромное количество строк кода. Основная проблема, когда ты уже что-то написал и надо добавить в уже существующий проект внушительный функционал или же наборот его поменять, или убрать. Хватаешься за галову и думаешь, что проще написать проект заного. Автор из числа тех программистов, которые оставляют свой опыт и знания (есть донат). Порой бывает информация более полезной в блогах чем где-либо, редко бывает в виде книг.   Про автора книги знаю очень мало, кому надо можете погуглить.
  7. Ветвления кода связанные с адресом

    В этой записи блога не будет чего-то, что показало бы "вау, это что-то новое и есть результат". Все сырое и результат пока мне только снится — быстрый поиск условий и включение, и выключение ветвей по этим условиям. Мыслю я не инструкциями, не группой инструкций, а ветвлениями кода и условиями, которые их запускают. Проще 20 ветвлений по 5 окон, чем тонна инструкций... Жаль пока теория, практики с результатом нет.   Рисунок. На нем слева прототип, справа текущий сырой вариант   1) ставим брейкпоинт на адрес патронов 2) от него расплетаются ветви кода от каждого хита, от каждой инструкции, и по ретам ветвление выходит из рутины   Кружи означают ret-ы. Клик на круг будет переходлм в дизассемблер Стрелки будут показывать входы и выход связанные с соседними рутинами (поиск общих адресов будет стрелками)     На экране справа вариант без стрелок, т.к. не успел еще их отладить. 4 ветки трассера по ретам из рутины связанные с адресом патронов, выстрелами. Потом я продолжал стрелять, перезаряжаться, выкидывать и поднимать оружие. В итоге собрал 20 ветвлений по ретам от инструкций связанные с патронами       Как видно, довольно все еще сырое, но видно, что все 20 ветвлений по ретам сформировались до корневого цикла.   Потом можно будет, я надеюсь, увидеть связи между этим ветвлениями, когда я прикручу стрелки. По кружкам кликать и переходить в дизассемблер и смотреть условия выше. На условии искать другие адреса, которое запускает ветвь кода. На адресах опять делать ветвления (новое окно с ветвлениями о ретам)... На практике будет получаться более двух таких окон (для патронов). Нужно будет искать адреса связанные с условиями в новом окне.    
  8. Флудилка

    Часть 2. Наброски поиска корневого цикла через трассер не заходя по call-ам   Задача снять ветви с брейкпоинта на адресе памяти   Когда поставили брейкпоинт и начинают прерываться адреса инструкций и с них начинают собираться данные.   1) Сработал адрес инструкции1. Брейкпоинт на адресе памяти снимается. Начинает лог. Лог заканчивается на корневом цикле. Ставится брейкпоинт на адресе памяти 2) Сработал адрес инструкции2. Брейкпоинт на адресе памяти снимается. Начинает лог. Лог заканчивается на корневом цикле. Ставится брейкпоинт на адресе памяти   и так далее   Затем вызываем managerBranches:Stop() и смотрим что получилось.     После выхода на корневые циклы вызов managerBranches:Stop() Логи  
  9. Флудилка

    Наброски поиска корневого цикла через трассер не заходя по call-ам      
  10. Флудилка

    Скрипт трейса по ret-ам до первого повторения адресов     Лог   Наброски иерархии кода, чтобы найти идею как выйти до главного цикла и остановиться там.  
  11. Флудилка

    Dereference Addreses — значение в квадратных скобках  
  12. Флудилка

    Обновилась страница справочной информации по Ассемблеру на сайте Cheat Engine. Кому интересно: ссылка   Как я узнал что она обновилась? Не знаю, повезло. Искал инфу по "breakpointmethod OPTIONAL" из main.lua и вышел на хелп и увидел, что страница обновилась. debug_setBreakpoint(address, size OPTIONAL, trigger OPTIONAL, breakpointmethod OPTIONAL, functiontocall() OPTIONAL) : sets a breakpoint of a specific size at the given address. if trigger is bptExecute then size is ignored. If trigger is ignored then it will be of type bptExecute, which obviously also ignores the size then as well debug_setBreakpoint(address, size OPTIONAL, trigger OPTIONAL, functiontocall() OPTIONAL) breakpointmethod OPTIONAL может быть трех типов     Первый и второй я понял, третий — не понял.
  13. Lua Plugin CE Disassembler

    Обновление плагина   Установка с репозитория: ссылка     Кратко 1. Добавил сохранение/загрузку параметров. Хранение в текстовом файле в папке autoruns 2. Добавил настройки графического интерфейса (слайдеры, пункт меню) Подбронее   Слайдеров много, сам путаюсь в них, какие за что отвечают. С цветами экспериментировал не понравилось, пока оставляю градацию "черный-белый". Для тех кто видит в первые этот плагин.   Плагин планируется развивать дальше, сейчас это черновой вариант
  14.   Использование. Код выше  вставляем в редактор Lua кода, а ниже пишем -- Инициализация (файл ищем в папке "autorun") classSettings = ClassSettings:New('userdata.txt', '*.txt') -- Пример сохранения параметров "Ключ - Значение" classSettings:Set('Name', 'MasterGH') classSettings:Set('Name2','Xipho') classSettings:Set('Color', 0xFFFFFF) -- Сохраняется так classSettings:Save() -- Пример загрузки print(classSettings:Get('Name')) print(classSettings:Get('Name2')) print(classSettings:Get('Color')) И запускаем.   Данные в файле после сохранения Name MasterGH Name2 Xipho Color 16777215 Сохранение по паре "Ключ — Значение", где Ключ должен быть уникальным. Для трейнеров на CE скрипт надо переписать, чтобы путь был не в папке autoruns, а по пути, который выберите. Это может быть директория трейнера или временная папка Windows.   ------------- Это пригодится для сохранения таких параметров как цвет, шрифт, чекбоксы, слайдеры, положение и размер элементов. Например, положение формы или другие настройки
  15. CE Lua ColorPicker (скрытый компонент)

      Нет. Класс TFontDialog не описан в mainLua.   Есть еще два варианта через создание потока. С его помощью вызывать уже готовую функцию создания диалога (еще найти её придется в Lazarus-е в пошаговой отладке), либо на WinAPI через ассемблерный код. С этими двумя вариантами я не могу помочь.