Я обратил внимание на следующие поведения записи и чтения
1. Срабатывают только инструкции чтения до изменения параметра, адрес рабочий
С адресом работают инструкции на чтение, но если в друг в этом адресе что-то поменять (например в CE), тот тут же выскочат инструкции на запись. Нельзя однозначно утверждать, что адрес является настроечным параметром, но и нельзя утверждать, что это не рабочий адрес. Какая-то инструкция может жестко менять значение, а может быть будет "стараться" измен
Если нужно найти начало и конец подстроки. Пример
Попробуем найти слово lab в троке gamehacklab.ru
print(string.find('gamehacklab.ru', 'lab'))
>9 11
Если не найдена подстрока, то вернет nil.
С помощью string.match можем выводить не индексы, а строку
print(string.match('gamehacklab.ru', 'lab'))
&
Есть такой плагин "AA Maker" и там довольно интересные регулярные выражения на Lua. Разберем некоторые выражения
Выражение ''%[(.*)%]' - захват всего, что в квадратных скобках
Пример
local s = 'mov eax, [ecx + 4]'
print(string.match(s, '%[(.*)%]'))
--> ecx + 4
Символ "%" нужно всегда ставить перед специальными символами такими как ^
11 декабря 2019 года форуму Gamehacklab исполнится 10 лет. Это дата первого пользователя форума.
Поздравляю всех:
активных пользователей,
высший состав форума, админов и модеров,
старожил,
помогаторов,
тех кто был на форуме очень давно и перестал заходить.
Отдельно @Xipho, @srg91, @partoftheworlD, @Garik66, @LIRW, @SER[G]ANT, @gmz. Извините, если кого-то персонально пропустил.
Можно пожелать всем бесконечного энтузиазма на тему поиск
В архиве два файла. Функции
1. Контекстное меню. Компактное/ не компактное окно CE
2. Сохранение и загрузка положения и размера формы CE
3. Сохранение и загрузка компактного состояния формы или не компактного
Сделано на энтузиазме после написания класса сохранения и загрузки параметров.
После запуска, CE будет там, где её (CE) закрыли с по
На скриншоте 22 ветви трассеровки от адреса патронов не входя в call-ы до корневого цикла. Корневой цикл определяется, когда поиск происходит более трех секунд и не находит ничего. Вполне хватает этого времени. Буду еще повторно тестить и проверять доходит ли он цикла или надо еще что-то придумывать.
Желтым выделяется точка, вертикальная полоса ветви и связи с такими же узлами. Узел это адрес выхода из ret
Функции:
1) Три типа данных: float, double, integer
2) 10 слотов сохранений
3) Управление горячими клавишами. ctrl+X - где X от 0 до 9 сохраняет позицию, shift + X загружает ранее сохраненную позицию
4) Озвучивание загрузки или сохранения Как пользоваться:
1. Подключаемся к процессу игры любым способом (хоть вручную, хоть на Lua, чем угодно)
2. В CE вставляем Lua скрипт
3. Меняем адрес teleport_address = "03D2C6DC" на тот который нужно.
Здесь
Для тех кому интересно, вопрос к ним. Какие критерии можно добавить спрашивая оценку плагина?
Например, по 5-ти бальной шкале спрашивать оценку у пользователей:
Необходимость плагина в Cheat Engine
Работает без ошибок
Понятно как пользоваться
Интерфейс плагина
Удобство плагина
Нравится
Простая установка
Думаю, прикрутить аналитику прямо в плагины. Там будет как аналитика использования плагина, та
Дополненная реальность похоже на спецэффекты в кино, только на экране видим изображение получаемое с видео камеры, которой управляет пользователь.
Что интересно. Камера, которая есть у многих на телефоне и допустим некоторая программа с API(какой-нибудь дополненной реальности написанная вами) определяет, что происходит на изображении и по этим данным можно
1) определить плоскости реальные в нашем мире
2) определить положение объектов относительно друг друга в нашем
В общем хорошо взялся за регулярки на Lua! Всё подряд прогоняю через них, что под руку попадется, любые задачи.
Случайный пример задачи. Пронумеровать список
Тут же написал
И получил ответ. В следующий раз только вызывать "EnumerateText([[ текст со строками]])"
Тут в буфер текст улетит и выведет в мессагу. После закрытия мессаги через CTRL+V вставит текст, куда хотим
Пронумерованные функции — функции работы со строками последней
Планируется улучшать и дорабатывать плагины, показать как с ними работать.
1. Вывод данных в окно логов: сканирование, подключение к процессу, опции сканирования, состояния активации и деактивации записией в таблице CE и другие
2. Запись действий из пункта 1, сохранение этих действий и воспроизведение по кнопке или горячим клавишам
3. Показ в дизассемблере CE ветвлений кода при проходе потоками разными цветами (можно видеть код, который не был пройден в разных ситуациях)
4. До
Инфа по совместной работе с гитом. Может быть пригодится кому, а может и нет. Такую систему я использую на работе недавно.
Можно совместно работать над одним большим проектом через git-flow. Возможно, кто-то из форумчан тоже использует git flow на работе.
Кратко. Модель контроля версии построена на 4 ветках
master - релизы
develop - разработка
feature - фичи
hotfix - исравления
С develop начинается разработка через копирования в ветк
Отличная книга по изучению паттернов проектирования. Ее можно читать со шпаргалкой по паттернам (иллюстрацию по паттернам можно загуглить).
Перед этим еще загуглить SOLID + Unity .
До кучи еще алгоритмы и структуры данных.
Все это пригодится, чтобы пойти работать на программиста игр или приложений с разными типами реальности: дополненная, виртуальная и смешанная. А так же сейчас можно встретить вакансии по программированию не только Android, iOS устройств, шлемов и очков, но раз
Функция loadstring позволяет исполнять текст как код. Попробуем генерировать числа, сравнения чисел и логику И, ИЛИ.
Цель: просто пример.
Создать пары случайных чисел А и Б.
Случайно сравнить попарно.
Создать случайно логику "И, ИЛИ" и сравнить результаты сравнения до тех пор, пока не будут истинны
Открываем Lua консоль из дизассемблера
Пишем Lua скрипт
Дальше по шагам как на картинке
Сколько я не пользовался CE я никогда не знал об этом отладчике. Когда я случайно узнал, то был приятно удивлен.
Если мы пишем какую-то функцию и она дает сбой, то её можно отладить как на скриншоте. Это может быть и не функция.
Плагин ведет историю поиска, отсева, отмены. Логи выглядят следующим образом
Для чего может применятся
На шаге отсева посмотреть в логах, какое значение искали до этого и какой способ поиска использовали.
При неудачных поисках мы просматриваем как и что мы сканировали раньше.
Если вообще ничего не получается при сканировании, то логами можно обмениваться.
Горячие клавиши, которые настраиваются из окна настроек CE работают и в логах.
Установка: скоп
Пример, который показывает как снять стек вызовов функций
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 (как на скриншоте) и пройти по шагам
Есть инструкции, которые добавляют мусора больше чем другие.
Показываем объем памяти мусора
print(string.format('Lua memory usage %.1f MiB',collectgarbage('count')/1024))
Ниже код того как попробовать узнать сколько мусора добавил код при парсинге ассемблерной строки двумя способами
Пример результатов могут отличаться. Фиг его знает почему. Возможно работает сборщик мусора в разные моменты времени
Lua memory usage 1.8 MiB
Lua memory usage 1.8 MiB
Lua memory us
pcall() функция может вызывать функцию, которая может вызывать исключение.
Возвращает статус в виде булевой о том, есть ли исключение или нет и возвращает текст исключения.
Источник
Как этим пользоваться? Если вдруг знаем, что может произойти ошибка, то можно её обработать и выполнить правильное действие не останавливая работу Lua скрипта.
Или например если не выполняется условие, то можем сами создать ошибку с помощью функции error, что остановит скрипт.
Новые директивы try/except в AA доступны Cheat Engine 6.8 Beta2
Задача try/except в AA обработать исключение, не допустить crash. Чтобы игра продолжалась, а чит в лучшем случае не закрыл бы процесс.
В теории возможно определить, что был crash и что-то сделать. Например, отправить логи в свой или иной удаленный сервис аналитики, что такой-то чит не сработал...
Пример от DarkByte для try/except с счетчиком crashes
Репозиторий
1. На адрес устанавливается брейкпоинт.
2. Идем в игру делаем или не делаем что-то
3. Начинают срабатывать инструкции на брейкпоинте
4. От каждой инструкции начинается трейслог, подобный тому, который есть
Прошлая точка входа запускающая активирующий скрипт не хотела работать, если запустить гигантский трейнер (сгенеренный на CE), а потом игру.
Для работы трейнера точка входа теперь задается вот таким образом после генерации кода трейнера
Подробнее в исходниках (лучше смотреть позже, после просмотра видео, которое еще готовится)
gta3.CT
У версии CE 7.2 есть к сожалению баги.
1. При генерации трейнера нужно вручную править высоту надписей — надписи
Unity + ARKit 2.0 + Apple Device + iOS > 12.x позволят сканировать через визуальную одометрию реальный мир и расставлять в нем виртуальные объекты и загружать их в точные места, куда раньше поставили. Особенность в том, что чем больше информации собрали физической камерой из разных положений и углов, тем больше шансов, что увидим объекты именно там куда их поставили. Это еще классно тем, что карту мира можно расширять, сохранять, загружать, передавать в реальном времени на разные устройства
Проведено огромное количество опытов над структурами. Много переделок.
Очень кратко напишу, что поменялось.
1. Название структуры состоит из адреса, количества адресов в ней и времени в миллисекундах на один байт в структуре.
Подчеркнуто красным
2. Смещения отбираются только те, на которых за X времени не было обнаружено ни одной инструкции на запись. Чем больше та самая чувствительность, тем точнее результат
3. В именах структур теперь ценная информ