Нажали checkbox — заполнились данные по базовому адресу
Отжали checkbox — удалились данные
Если проще руками забить и поставить опцию раскрытия, то можно и без скрипта.
ИМХО отказываться от CE Lua скриптов из-за утечек памяти не стоит.
Можно чистить память следующим образом
function startCollectgarbageProcess(interval, showStatus)
local timer1 = createTimer(true)
timer1.Interval = interval
timer1.onTimer = function ()
if (showStatus) then
print(string.format('Lua memory usage %.1f MiB',collectgarbage('count')/1024))
end
collectgarbage("restart")
collectgarbage("collect")
if (showStatus) then
print(string
На видео показано рисование через поток и рисование без потока
Когда происходит рисование без потока, то окно нельзя подвинуть, не работает кнопка и даже не возможно работать с Cheat Engine
Код:
&
Функция loadstring исполняет строку кода как функцию.
f = loadstring ("print 'hello, world'")
f () --> hello, world
Есть еще и такая функция как string.dump. Она создает строку из функции
function f () print "hello, world" end
s = string.dump (f)
-- Можно строку тут же запустить как код
loadstring (s) () --> hello, world
Если по обратной связи строить и исполнять строку кода, то
Игра с рандомом. Есть счет.
Запускается через таблицу в аттаче.
Здесь мог быть AI на Lua, возвращающий номер клетки от 1 до 9.
function InputAI()
-- рандом
return math.random (1, 9)
end
Извиняюсь, лучше рандома пока не могу предложить.
Крестики и нолики.CT
Особенности
1) переход на следующий адрес по инструкциям ветвления вычисляется Lua кодом по ret, jmp, jmp condition до исполнения кода
2) определение опкодов ветвления по readmem без дизассемблериования
3) по тестам последний брейкпоинт снимается на ближайшем цикле
Пример лога до близжайшего цикла, когда поднимается из рутины вверх
Поиск по модулям
Исходник
Поместить ModuleListRegioScan.lua в autorun.
Что интересно, Дарк Байт решил написать на Lua. Эта функция жестко в CE не впиливается. Можно выбирать, хочу это расширение поставить или нет. Посмотрел, если понравится, то оставил. Cheat Engine перекомплировать не нужно и не нужно в нем делать опции скрывать или показывать функционал.
Источник
Чтобы получить цвет из компонента нужно найти его на форме CE через Lazarus. Этот компонент нельзя найти визуально, он скрыт.
Узнал об этом случайно, когда зашел на форум Cheat Engine в тему расширений на Lua. Теперь в дизассемблере можно будет быстренько цвета менять
В таблице поиска есть колонки ссылающиеся на название Lua перменных: "value" и "previousvalue"
А что можно делать?
Сравнивать текущее и предыдущие значения вместе или по отдельности, в том числе на разных вкладках CE
Примеры:
value == 65
value == 0x65 (или поставить галку hex)
value ~= 65 (или поставить галку not)
Можно и такое сравнение сделать после поиска неизвестного используя математические функции:
math.abs(value - previousvalue)
Напишем функцию, которая в 3.2 раз быстрее кода ниже
splitDisassembledString(disassemble(address))
Сравнивая скорости получаем оптимизацию в ~3.20 раза быстрее.
Пример использования
function GetDebugString2(address)
local clearString = string.gsub(disassemble(address), '%s','')
return string.match(clearString, '^(.-)%-(.-)%-(.-)$')
end
local address, bytes, opcode = GetDebugString2(0x0045464A)
print(address)
print(bytes)
print(opcode)
gsub очищает пробелы
Я решил рассмотреть три новые функции:
Пользовательские типы данных в hex-окне
Фильтр на окне определения адресов
Поиск данных в окне Tracer
1. Пользовательские тип данных в hex-окне
Пример как сделать:
Фильтр на окне определения адресов
3. Поиск данных в окне Tracer
Обычный поиск, как на прошлых скринах
Примеры
Ну и более интересная версия перебора и одновременн
Пост для тех, кто интересуется Lua в Cheat Engine.
Можно подхватить разные моменты активации и деактивации записи в таблице CE и рассчитать размер кода между метками
1. По шаблону вставляем АА код для туториала Cheat Engine
2. Регистрируем метки-маркеры в АА коде
3. Этими метками в Lua считаем и выводим ""endCode - startCode" размер байтов
Пример, который подсчитал 15 байтов
Пример скрипта
Документация ко
1. Открываем trainme Dark Byte.
2. Проходим первый шаг (там нужно сделать One Hit Kill чит через прогресс бар, количество патронов тоже интересно поломать)
3. Так вот на Step2 ищем адрес здоровья нашего космического корабля.
Ставим брейкпоинт на доступ, стреляем.
Видим, три адреса и вот теперь новые функции в контекстном меню как на скриншоте
На "(1)-(2)" - вызываем контекстное меню выделив адрес своего корабля и добавляем его в группу1. Тоже самое делаем д
Источник
Как вступление. Мне нравится Lua, потому что в нем можно писать код в виде строковых данных (и Lua строки, и ассемблерные строки), а затем выполнять эти строки как код. В теории код может по фидбеку делать другой код в автоматическом режиме. Это на мой взгляд неисчерпаемые потенциальные возможности AI ограничивающиеся железом.
В CE 6.7 функция autoAssemble вызываемая в Lua скриптах позволяет включать и теперь выключать скрипт со "своим" dealoc-ом.
При
Появилась такая опция асинхронного выполнения скриптов
Если эту опцию поставить на скрипты, то появляются вот такие часики
АА-шные скрипты могут искать в этот момент сигнатуру.
Lua скрипты потестить было интересно, узнать действительно ли асинхронно выполняется. Например, один скрипт выполняет счет, второй выполняет счет. По выполнении выводится результат.
Во время выполнения включаем первую галку. Тут CE подвисает. Затем успеваем нажат
Завтра состоится очень скромная премьера 27 июня в 19.00 (по Московскому времени) видео "Фильтр-свой" чужой.
Почему видео находится не на официальном канале? Какая цель у видео?
Это личное любительское видео-хобби по отладке и изменению игрового кода — взлому игр. Я записываю видео для себя и для желающих.
Приходите смотреть
gta3.CT
Спавн итемов удалось сделать через dnSpy.
При клике на любой предмет на меню крафта он создается в инвентаре, а если там занято, то выкидывается на карту.
Я переписал метод клика на рецепт, вот он оригинальный
На этот
Для спавна заменить Assembly-CSharp.dll из архива, сделав копию предварительно
Assembly-CSharp.rar
Существует три логических оператора: and, or, not.
Те, кто уже знаком с языками программирования знают, как эти логические операторы работают.
Например,
A = true
B = true
if A and B then print('Условие "A and B" выполняется') end
if A or B then print('Условие "A or B" выполняется') end
B = false
if not (B == A) then print('Условие "not (B == A)" выполняется') end
Но, дальше интереснее.
Все логические операторы считают false
Пошаговая отладка в dnSpy позволяет ставить брейкпоинты на C# код во время работы игры, перемещаться по коду, просматривать значения переменных.
Сэкономит кучу времени при поиске и отладке игрового кода,
1. Страница загрузки dnSpy
2. Скачиваем dnSpy и все архивы с mono.dll файлами
Unity-debugging-4.x-win32.zip
Unity-debugging-4.x-win64.zip
Unity-debugging-win32.zip
Unity-debugging-win64.zip
3. Смотрим свойства exe файла игры и определяем по нему вер
Немного комментариев к этой версии.
1. Исправлены смещения
2. Добавлены также инструкции на запись
На скриноте ниже пример сравнения текущей структуры с координатами в СТАЛКЕРЕ Зов Припяти с копией структуры.
Уже была запись про тестирование производительности.
В этом примере тестируем разное обращение к функции со средним арифметическим значением
Результаты при 4-х запусках
avg = 0.93333998758048
avg = 1.0322099291325
avg = 0.92657961891689
avg = 1.1883763135947
Вывод. Разница не существенная.
Скрипт позволит вывести иерархию компонентов CE в виде текста.
Иерархия компонентов CE нужна для написания плагинов.
Например, для ColorPicker и для смены шрифта (подобротнее об этом было где-то было в блоге).
Скрипт:
Для CE 6.7