-
Постов
2 999 -
Зарегистрирован
-
Победитель дней
129
Тип контента
Профили
Форумы
Загрузки
Блоги
Сообщения, опубликованные MasterGH
-
-
Игра на движке Unity. Можно через Cheat Engine Mono найти функции и с ними работать. Можно встроить или модифицировать код, как здесь в примере через dnSPY.
Спойлер- 1
-
Пошаговая отладка в Cheat Engine подскажет что не так. Заранее вручную создаем newMem-память, метку и вручную запускаем поток и там делаем пошаговую отладку. Разбираемся в причинах. Правим. Проверяем и так пока не будет работать.
-
Видео-то не плохое, хорошее. Все подробно изложено и работает.
Что можно улучшить до идеала. Попробовать кому-нибудь аналитику прикрутить с проверкой нашлась сигнатура или нет. Результат попробовать отправлять в сервис аналитики. Возможно Firebase или что-то похожее
- 1
-
Принцип: SOLID, KISS, DRY
1) через OOP в Lua
2) через вложенные функции в Lua
3) через "код пишет код"
Спойлерfunction calculateString (str) return assert(loadstring( "return " .. str))() end
-
В 02.08.2018 в 23:05, Alex2411 сказал:
окно structure disect остаеться пустое
Сканер запускаем в таком виде.
СпойлерПотом выставляем настройки. Потом идем сразу в игру, чем быстрее тем лучше и делаем так, чтобы значения в структуре менялись с бОльшей вероятностью.
Потом ищем структуру
СпойлерОбщая картина для Tutorial-i86. Так что работает
В 02.08.2018 в 23:05, Alex2411 сказал:в окне lua engine в окошке output появляеться большой столбик адресов . что делать с ними дальше ?
Это логи, когда сканер ставил брейкпоинт на адрес структуры на доступ. В конце показывается на каких смещениях сработал брейкпоинт
СпойлерСтруктуру смотреть. Там параметры, которые читались. Если стоит WRITE, то записывались
- 1
-
Dissect Data Scaner должен идти на 6.8.1. Развивать были планы. Как я понял в DBVM, в CE 6.8.X появилась возможность ставить брейкпоинт на всю структуру сразу, а не довольствоваться аппаратными брейкпоинтами из которых плагин использует только 1-аппартный брейкпоинт на настраиваемую пользователем X—задержку, на +1 байт по всей структуре.
-
20 часов назад, Alex2411 сказал:
спайдер сохраняет только адреса и офсеты указателей
Да, нельзя, я посмотрел. Прошу прощения, что ввел в заблуждение. Сам не проверил.
Тогда остается писать Lua плагин в том же TinyDumper-е по сохранению и восстановлению многоуровневых структур. К сожалению, пока некогда им заняться и не понятно когда будет время.
Там по циклу получается определять структуры через autoguess и делать рекурсию по X вложенности при этом сохраняя значения. Потом придумать формат сохранения бинарный, т.к. строками — будет много. Потом придумать как это обратно восстановить через alloc() -и в памяти. Поменяются поинтеры и Spider может их показывать как результат сканирования, это может мешать... Довольно это трудоемко, пока не планирую этим заниматься, но могу подсказать как это написать на Lua в TinyDmper-е, на какие функции внимание обратить и как реализовать.
-
Через АА примерно так делать можно, где в originalbytes будет адрес
Спойлер{ Game : Tutorial-i386.exe Version: Date : 2018-07-31 Author : Andrew This script does blah blah blah } [ENABLE] //code from here to '[DISABLE]' will be used to enable the cheat aobscanmodule(INJECT,Tutorial-i386.exe,64 FF FF 89 F1 B8 88 4A 5A 00) // should be unique alloc(newmem,$1000) alloc(originalbytes, 7) registersymbol(originalbytes) label(code) label(return) originalbytes: readmem(INJECT+05+01,5) //store the original bytes newmem: //readmem(INJECT+05,5) code: reassemble(INJECT+05) jmp return INJECT+05: jmp newmem return: registersymbol(INJECT) [DISABLE] //code from here till the end of the code will be used to disable the cheat INJECT+05: db B8 88 4A 5A 00 unregistersymbol(INJECT) dealloc(newmem) { // ORIGINAL CODE - INJECTION POINT: "Tutorial-i386.exe"+2402B "Tutorial-i386.exe"+2400D: 8B 8B 78 04 00 00 - mov ecx,[ebx+00000478] "Tutorial-i386.exe"+24013: 8B 09 - mov ecx,[ecx] "Tutorial-i386.exe"+24015: FF 91 D8 00 00 00 - call dword ptr [ecx+000000D8] "Tutorial-i386.exe"+2401B: 5B - pop ebx "Tutorial-i386.exe"+2401C: C3 - ret "Tutorial-i386.exe"+2401D: 00 00 - add [eax],al "Tutorial-i386.exe"+2401F: 00 53 56 - add [ebx+56],dl "Tutorial-i386.exe"+24022: 89 C6 - mov esi,eax "Tutorial-i386.exe"+24024: E8 87 64 FF FF - call Tutorial-i386.exe+1A4B0 "Tutorial-i386.exe"+24029: 89 F1 - mov ecx,esi // ---------- INJECTING HERE ---------- "Tutorial-i386.exe"+2402B: B8 88 4A 5A 00 - mov eax,Tutorial-i386.exe+1A4A88 // ---------- DONE INJECTING ---------- "Tutorial-i386.exe"+24030: BA 01 00 00 00 - mov edx,00000001 "Tutorial-i386.exe"+24035: BB 88 4A 5A 00 - mov ebx,Tutorial-i386.exe+1A4A88 "Tutorial-i386.exe"+2403A: FF 93 C4 00 00 00 - call dword ptr [ebx+000000C4] "Tutorial-i386.exe"+24040: A3 E0 15 60 00 - mov [Tutorial-i386.exe+2015E0],eax "Tutorial-i386.exe"+24045: 8B 96 3C 02 00 00 - mov edx,[esi+0000023C] "Tutorial-i386.exe"+2404B: A1 E0 15 60 00 - mov eax,[Tutorial-i386.exe+2015E0] "Tutorial-i386.exe"+24050: E8 CB EE 06 00 - call Tutorial-i386.exe+92F20 "Tutorial-i386.exe"+24055: 8B 96 E8 00 00 00 - mov edx,[esi+000000E8] "Tutorial-i386.exe"+2405B: A1 E0 15 60 00 - mov eax,[Tutorial-i386.exe+2015E0] "Tutorial-i386.exe"+24060: E8 4B F1 06 00 - call Tutorial-i386.exe+931B0 }
Через Lua:
Спойлерlocal signature = '64 FF FF 89 F1 B8 88 4A 5A 00' local results = AOBScan(signature, "+X-C*W") if results ~= nil then local address = getNameFromAddress(results[0]..'+5') --local targetAddress = disassemble(address):match("%[(.+)%]") если адрес в скобках -- для извлечения адреса -- 0042402B - B8 884A5A00 - mov eax,005A4A88 { [00000488] } если адрес после зяпятой не в скобках local targetAddress = disassemble(address):match(",(.+)") --> 0x005A4A88 print(targetAddress) end
-
1 час назад, Desmos сказал:
Что делать?
Делать инъекцию ниже где идет xmm0
438F5884: 66 0F D6 45 A8 - movq [ebp-58],xmm0
так проще. Ну а чтобы до того адреса добраться, то на АА разные варианты подбирать либо быстрее на Lua через поиск сигнатуры и + смещение. Либо через поиск сигнатуры и дизассемблирование
-
1 час назад, Alex2411 сказал:
из указателей рядом . если бы можно было запоминать хотя бы первый уровень указателей это очень удобно .
я пробовал захватить данные с указателями из окна spider сохранить в файле и потом сравнить файлы . получаеться , но очень долго .Для +1 уровня в Spider-е не должно быть очень долго для структуры размером с 0x1000. Долго начинается +3 и выше.
Я все-таки предлагаю помучиться со сканированием в Spider-е.
1. Ищем первый раз + 1lvl Pointer, пишем в файл дамп
2. Меняем значение в игре. Если оно редко меняется, то делаем так чтобы менялось чаще. Например, загрузка игры с разными сохранениями.
3. Делаем отсев "изменилось" по адресу структуры (он поменяется, его заново найти) в новый файл. На этом шаге уже будет результат отсева, а не весь дамп в отдельном файле как дамп из пункта1. Отсев дальше быстрее пойдет
Ну и так далее...
-
11 часов назад, Alex2411 сказал:
спасибо мастер . многое понятно стало . слушай , а где то есть полный мануал по чит енжин , что бы все функции были написаны ?
Говоришь полный мануал и чтобы все функции были написаны. Тогда качай исходники Cheat Engine
11 часов назад, Alex2411 сказал:еще объясни пожалуйста . когда lock создал теневую копию , то копия сохраняеться без уровня указателей . если нужно искать что изменилось в структуре в указателе 2 или 3 или больше уровня как это сделать ? еще мне очень нравиться твой плагин tinydumper часто им поьзуюсь , но он то же не запоминает в глубину указателей .
Lock не сохраняет копии вложенных структур. Тут ничего не подскажу, кроме как свой плагин CE Lua писать.
11 часов назад, Alex2411 сказал:еще мне очень нравиться твой плагин tinydumper часто им поьзуюсь , но он то же не запоминает в глубину указателей .
К сожалению, не запоминает. Не обещаю, что сделаю эту функцию В каких случаях это могло бы пригодится? Можно же сравнить не Lock структуру с не Lock структурой и никаких проблем. А вот со стеком, возможно бы пригодилось как эксперимент. Вообще лучше Dark Byte напиши предложение об этом, чтобы над lock recursive подумал стоит делать или нет для стека как минимум.
12 часов назад, Alex2411 сказал:structure compare удобная фича , но мне пришлось из за багов сносить 6.8 и обратно поставить 6.7
Уже есть 6.8.1 и там были фиксы
-
-
Ну и накатал же я пост. Давно счеты со Spider-ом. Толком им не пользовался. Я не уверен, что знаю все о Spider-е. Поскольку возник такой вопрос, то решил снова им заняться, но уже более детально. Пришлось кучу скринов наделать.
Со "structure spider" более менее разобраться можно на практике и 9-тым туториалом.
has shadow — адрес структуры—копии. Можно сделать поставив галку Lock в окне Dessect Data на адресе. Делает копию структуры (например стека или данных игрока до перезагрузки уровня)
Сравнивать можно как в Desssect Data так и в Spider-е. Смотря что и как ищешь. Определяется экспериментально.
*Если поставить Lock и вызывать Spider, то данные о Shadow адресе сами заполнятся. Можешь попробовать, самому их можно не заполнять.
Но Dissect Data — для ручного визуального сравнения.
Запускаем 9-тый туториал и пытаемся понять. Слева окно с Lock адресами. А в окне справа поставлены их shadow copy (их можно посмотреть как на примере, на скрине выше строка "Lock (Shadowcopy at 00350000)")
Там, где мелкие стрелки и если там удалять адреса, то обновляется значения shadow и не shadow (синий цвет текста и данные будут появятся в таблице результатов). Т.е. можно сравнивать как копии, так и не копии очищая и возвращая значения в полях ввода. Shadow рекомендуется для сравнения дампов стеков
Но есть более лучшее средство чем Spider. Я писал о нем у себя в блоге Scan for commonalites на окне определения проскакивающих адресов
СпойлерРазница в значениях по EBX с типом float
Разница в группах (для потенциального фильтра) с типом 4 byte (опция Only find matching groups)
Все три инструмента: DissectData, Spider и Structure Compare могут помочь что-то сравнить и найти. Structure Compare появился в версии CE 6.8
- 2
-
Сканер памяти, брейкпоинты, дизассемблер. Пошаговая отладка или трейслог. Возможно сравнения дампов стека. Cheat Engine и IDA в помощь
-
3 часа назад, Penza сказал:
А почему некоторые цифры и буквы заменяются на звёздочки?Как определить,что заменять,а,что нет?
Первые hex-коды опкодов остаются, остальные заменяются звездами, чтобы была совместимость с бОльшим количеством сборок игр. Не факт что это прокатит, совсем не факт. Оригинальные опкоды, которые затираются звездами лучше не затирать, т.к. инъекция кода может не работать с тем, что под звездами оригинальных окодов. Объяснил как смог.
Короче, лучше на всякий случай без звезд делать инъекцию так как делает обычный шаблон Cheat Engine.
Потенциал от ААMaker все же есть — это генерировать АА по своему шаблону, но с сигнатурой косяк вышел (см. выше).
У AAMaker есть альтернативы на сайте Cheat Engine. AAMaker не планировал обновлять, но все возможно
-
Кстати да. В той теме есть скриптец
-
Есть класс "Edit Class" в справочнике. Я бы обрабатывал через OnKeyDown
function CEEdit1KeyDown(sender, key) -- тут читаем key и возвращаем его, можем править, если key не подходит return key end
Поменять VK_3 на тот, что ввел пользователь. Может быть не один KEY
createHotkey(function, {keys, ...})
Потом еще нужно ключи сохранить в файл, чтобы не вводить их вновь и читать из файла.
-
Можно. Открываем celua.txt и смотрим на:
"GenericHotkey Class" для привязки по горячим клавишам
getAddressSafe("[[здесь указатель+]+]+..") для чтения указателя
writeFloat(address,value) для записи значения по адресу
"Timer Class" для того чтобы значение морозилось в функции таймера
Я думаю, с этими функциями и классами можно написать на Lua.
-
22 часа назад, maks17990 сказал:
мне дали готовую инструкцию где и какие значения на какие поменять. Но половина значений я не могу найти. Я декомпилировал файл сохранил код открыл через visual studio. И на этом все. Гуглил ни чего полезного не нашел. Подскажите ?
Тут ничего не подскажешь. Нужно название игры, версия и название чита
-
Lua скрипт добавить в таблицу. CE будет будет подключаться к процессам по имени и искать уникальную сигнатуру. После того как сигнатура будет найдена подключение к процессам остановится.
Спойлерfunction onTimerFindProcess() timerfindProcess.Enabled = false local processName = "Protolife.exe" local processTables = getProcesslist() for key, value in pairs(processTables) do if value == processName then openProcess(key) --print('Try open process pid: '..key) local signature = '3B FB 74 55 83 C1 03 23 4D E8 8D 54 49 05 8B 7C 90 07 3B FE' local results = AOBScan(signature, "+X-C*W") if results ~= nil then local address = results[0] --print(address) timerfindProcess.Enabled = false return end end end timerfindProcess.Enabled = true end timerfindProcess = createTimer(nil) timerfindProcess.Interval = 1000 timerfindProcess.OnTimer = onTimerFindProcess
-
-
Спасибо за логи. Это информация поможет в улучшении плагина.
Что можно сделать судя по логам
Вариант 1
1) Можно искать не известный тип: 4 байта, float, 1 байт, 2 байта, Double. Либо попробовать сначала сразу все типы: Value type "All" (если это не очень долгий поиск)
2) Затем отсеивание "Увеличилось", "Уменьшилось" пока не найдется адрес
Поиск может быть от минуты и более.
Вариант 2 с типами данных (4 байта, float, 1 байт, 2 байта, Double) , что и выше, только наоборот, когда значение уменьшается в игре, то искать увеличилось, когда увеличилось в игре — уменьшилось при отсеве.
Вариант 3 с типами данных(4 байта, float, 1 байт, 2 байта, Double), что и выше искать изменилось, не изменилось.
Вариант 4 искать адрес текста. Ставить брейкопинт на запись и исследовать код.
Если не получится найти, как будет время посмотрю игру
-
6 часов назад, JasonMuller сказал:
А вот с углами вообще не понятно.
Вариант. Углы убираются в графическом редакторе у картинки трейнера. Загрузить её в TCEImage. Растянуть TCEImage на всю форму. По ссылке выше есть пример такой подложки, её можно сделать другой.
В таблице CE ниже можно заменить картинку на другую с закругленными углами
СпойлерПример *.CT: transparent.CT
- 1
-
3 часа назад, Vito5559 сказал:
Никак не выходит взломать, все значения которые удаётся обнаружить - динамические
Предлагаю поискать заново с моим плагином логов и эти логи выложить
Установка: скопировать GHL_log.lua в директорию Cheat Engine "/autorun"
- 1
- 1
[CE] Вопрос по Lua:registerSymbol
in Cheat Engine
Опубликовано