Пошаговая отладка в 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 файла игры и определяем по нему вер
Чтобы получить цвет из компонента нужно найти его на форме CE через Lazarus. Этот компонент нельзя найти визуально, он скрыт.
Узнал об этом случайно, когда зашел на форум Cheat Engine в тему расширений на Lua. Теперь в дизассемблере можно будет быстренько цвета менять
Спавн итемов удалось сделать через dnSpy.
При клике на любой предмет на меню крафта он создается в инвентаре, а если там занято, то выкидывается на карту.
Я переписал метод клика на рецепт, вот он оригинальный
На этот
Для спавна заменить Assembly-CSharp.dll из архива, сделав копию предварительно
Assembly-CSharp.rar
Если нужно найти начало и конец подстроки. Пример
Попробуем найти слово lab в троке gamehacklab.ru
print(string.find('gamehacklab.ru', 'lab'))
>9 11
Если не найдена подстрока, то вернет nil.
С помощью string.match можем выводить не индексы, а строку
print(string.match('gamehacklab.ru', 'lab'))
&
В оригинале, если нет всех компонентов рецепта, то нельзя скрафтить вещь.
Цель: скрафтить без компонетов по нажатию кнопки
Игра на Unity и можно пробовать использовать в dnSpy модифицировать файл Assembly-CSharp.dll
Открываем файлик и смотрим на классы связанные с крафтом
Так находим кнопку, которая создаст указанное количество вещей крафта в CreateItem
Задача скрафтить по имеющемуся рецепту любую вещь. Для этого я добавляю проверку количес
Есть такой плагин "AA Maker" и там довольно интересные регулярные выражения на Lua. Разберем некоторые выражения
Выражение ''%[(.*)%]' - захват всего, что в квадратных скобках
Пример
local s = 'mov eax, [ecx + 4]'
print(string.match(s, '%[(.*)%]'))
--> ecx + 4
Символ "%" нужно всегда ставить перед специальными символами такими как ^
Проведено огромное количество опытов над структурами. Много переделок.
Очень кратко напишу, что поменялось.
1. Название структуры состоит из адреса, количества адресов в ней и времени в миллисекундах на один байт в структуре.
Подчеркнуто красным
2. Смещения отбираются только те, на которых за X времени не было обнаружено ни одной инструкции на запись. Чем больше та самая чувствительность, тем точнее результат
3. В именах структур теперь ценная информ
ИМХО отказываться от 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
Связь точек линиями и связь через метод описанный в статье
Пример1. Слева линии, справа работа алгоритма
Пример2. Скриншот из pdf документа с разным значением коэфициента
Пример3. С альфа и без альфа канала
11 декабря 2019 года форуму Gamehacklab исполнится 10 лет. Это дата первого пользователя форума.
Поздравляю всех:
активных пользователей,
высший состав форума, админов и модеров,
старожил,
помогаторов,
тех кто был на форуме очень давно и перестал заходить.
Отдельно @Xipho, @srg91, @partoftheworlD, @Garik66, @LIRW, @SER[G]ANT, @gmz. Извините, если кого-то персонально пропустил.
Можно пожелать всем бесконечного энтузиазма на тему поиск
Где писать Lua код?
Lua Engine окно, которое вызывается из главного окна CE.
Lua Console окно, которое вызывается из окна отладки CE.
Окно Autoassembler скрипта с вставки {$lua}, {$asm}
Lua Engine окно и Autoassembler-ные скрипты могут сохраняться в файлах Cheat Engine *.CT. *.CETRAINER, *.EXE
Lua Console для пошаговой отладки Lua кода и просмотров результатов ошибок и функции print()
Моя первая программа
Сначала узнаем версию для CE 6.7 и это
В таблице поиска есть колонки ссылающиеся на название Lua перменных: "value" и "previousvalue"
А что можно делать?
Сравнивать текущее и предыдущие значения вместе или по отдельности, в том числе на разных вкладках CE
Примеры:
value == 65
value == 0x65 (или поставить галку hex)
value ~= 65 (или поставить галку not)
Можно и такое сравнение сделать после поиска неизвестного используя математические функции:
math.abs(value - previousvalue)
Я задался вопросом, что такое pointermap. Вообще о нем не слышал и речь пойдет о нем. Я узнал о нём и прикинул, что возможно круто, а возможно и не круто иметь готовую цепочку указателей перед тем, как что-то делать в отладке. Цепочки можно раскрыть в окне структур и прикинуть, что там в них и "около" каких адресов будет происходить отладка. Во время отладки можно смотреть на окна структур. Может быть, а может быть и нет что-то интересное связать в отладке и с данными об указателях...
Долго не могу решить проблему
Traceback (most recent call last):
File "C:\air test\plugins\firebase\build.py", line 124, in run
self.SIGNAL_INSERT_LOGVIEW.emit(_str.decode("GB2312").encode("utf-8"))
UnicodeDecodeError: 'gb2312' codec can't decode bytes in position 11-12: illegal multibyte sequence
QObject::~QObject: Timers cannot be stopped from another thread
Если кто шарит на питоне просьба помочь. Питон 2.7
Основная строка
self.SIGNAL_INSERT_LOGVIEW.emit(_str.deco
Была задача получить два списка из документа, в котором было с пару десятков тысяч строк. На практике выяснилось, что искать текст после ключевого слова легче чем искать текст до ключевого слова. Об этом и будет дальше
В утилите, которую я делал "Lua Regular Expressions (v. 1.0)"
Текст во вкладке "gmatch"
Game1
gameCompany
DAU
53.21k
-20%
Game2
gameCompany
DAU
20.35k
-20%
Поиск элемента после строки
"DAU "DAU%
Legacy of Kain: Defiance
Это старая PC игра выпущена в районе 2003-2004 годах, когда я еще учился в школе в классе 11-ом.
В самом конце игры была сложная миссия сражения с боссом, никак не получалось её пройти.
Кстати из этой игры есть персонаж на аватаре у пользователя с форума Cheat Engine
Не мог пройти, как не пытался. То ли руки не из того места, пройти очень хотелось. Было у меня немного журналов игровых и там я много раз видел программу MTC. Ка
Наконец-то дошли руки до третий части.
Речь пойдет о создании структур программно. Пример, что будет в конце записи
Сразу к делу. Нужен поинтер и процесс.
Запустим туториал из Cheat Engine из меню Health->Cheat Engine Tutorial.
Прохождение туториала подробно описано здесь
Подключаемся к процессу идем на 8-мой шаг. В руководстве есть поинтер
[[[["Tutorial-i386.exe"+XXXXXX]+C]+14]+0]+18
Вместо XXXXXX может быть любое
Вдохновение появилось после просмотра видео @Xipho по Ultimap
Когда в Ultimap появляются Nx адресов с одним счетчиком, то хочется увидеть эти связи на графиках IDA.
Появилась идея загуглить как в IDA через IDC скрипт отрисовать ветвь кода или ветви кода, на которых эти самые адреса связаны между собой, а все вложенные другие скрывать.
Пока из подсказок я нашел это и это
Допустим для тренировки даны два адреса из одной ветви кода (это я точно знаю, т.к. получен н
Существует три логических оператора: 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
FINCSTP
Похожа на FSTP, также вращает стек регистров FPU (я кстати не знал, увидел при тестах в CE), но только не перемещает значение по адресу.
FSTP [здесь указывается адрес или регистр]
FINCSTP
Если нужно вытолкнуть значение из ST(0), а адрес куда его выталкивать не нуже
Охота на структуры и удивительное путешествие в мир структур в L4D2
1. Игру L4D2 в оконный режим
2. Установка плагина (позже)
3. Установка VEH отладчика, иначе вылеты
4. Первая миссия. Ищем адрес патронов. Бряк на адрес. Нашли инструкцию
Красным показано, что я не всю структуру проанализирую позже. Долго было ждать. Структура больше 5К байт...
5. Делаем сигнатуру любой инструкции при работе с патронами на всякий случай, если игра вылетит.
se
Новые директивы try/except в AA доступны Cheat Engine 6.8 Beta2
Задача try/except в AA обработать исключение, не допустить crash. Чтобы игра продолжалась, а чит в лучшем случае не закрыл бы процесс.
В теории возможно определить, что был crash и что-то сделать. Например, отправить логи в свой или иной удаленный сервис аналитики, что такой-то чит не сработал...
Пример от DarkByte для try/except с счетчиком crashes
Немного комментариев к этой версии.
1. Исправлены смещения
2. Добавлены также инструкции на запись
На скриноте ниже пример сравнения текущей структуры с координатами в СТАЛКЕРЕ Зов Припяти с копией структуры.
1. Нашел адрес патронов
2. Поставил брейкпоинт
3. Выкинул из рук Калаш с этими патронами
4. Увидел инструкцию, которая срабатывает когда что-то выкидываешь.
Решил зацепиться за эту инструкцию.
Либо спавн до инструкции, либо после.
Сделал трейслог из рутины на этой инструкции и
Открываем Lua консоль из дизассемблера
Пишем Lua скрипт
Дальше по шагам как на картинке
Сколько я не пользовался CE я никогда не знал об этом отладчике. Когда я случайно узнал, то был приятно удивлен.
Если мы пишем какую-то функцию и она дает сбой, то её можно отладить как на скриншоте. Это может быть и не функция.