Перейти к содержанию
  • записи
    73
  • комментария
    93
  • просмотров
    3970

Записи в этом блоге

 

Встраиваем C декомпилятор в CE 6.8.3

Вступление   В CE выделим участок кода и функцию Sub eax,edx - вычитание и наиболее значимее чем запись и чтение. После декомпиляции Если выделили две инструкции   Обращать внимание будем на математику, логику, условия и потом на чтение и запись. В данном случае, нужно найти вычитание из адреса "eax4->f1152 = eax4->f1152 - (eax3 + 1)"     Как поставить декомпилятор 1. С форума Cheat Engine качаем архив 2. Распаковываем в папку с Cheat Engine 3. В настройках открываем плагин cesmartdec.dll 4. Идем на инструкцию, выделяем функцию  5. Декомпилируем на первой выделенной инструкции из всех выделенных  

MasterGH

MasterGH

 

CE 6.8.2. Lua .Считаем размер инъекции в байтах

Пост для тех, кто интересуется Lua в Cheat Engine.    Можно подхватить разные моменты активации и деактивации записи в таблице CE и рассчитать размер кода между метками   1. По шаблону вставляем АА код для туториала Cheat Engine 2. Регистрируем метки-маркеры в АА коде 3. Этими метками в Lua считаем и выводим ""endCode - startCode" размер байтов   Пример, который подсчитал 15 байтов       Пример скрипта   Документация кому интересно  

MasterGH

MasterGH

 

Самое интересное в дополненной реальности

Дополненная реальность похоже на спецэффекты в кино, только на экране видим изображение получаемое с видео камеры, которой управляет пользователь.    Что интересно. Камера, которая есть у многих на телефоне и допустим некоторая программа с API(какой-нибудь дополненной реальности написанная вами) определяет, что происходит на изображении и по этим данным можно   1) определить плоскости реальные в нашем мире 2) определить положение объектов относительно друг друга в нашем мире 3) определить уникальные маркеры и изображения   Это было чтение данных, затем идет запись данных. На изображение накладывается поверх другое.   Чтение данных с реального мира и запись данных поверх изображения по данным чтения это основные процессы.   Что меня заинтересовало. Так это, что можно что-то делать в реальности, а камера будет писать программу. Самый простой пример. Берем маркер - бумагу с рисунком. Камера увидела и поставила на нем 3д-дом или светофор. Резко убираем маркер и дом остается в этом месте. Таким образом можно построить виртуальный город. Есть на Ютубе.   Теперь можно взять вместо 3д-дома, 3д-светофоров маркеры для выстраивания алгоритма программы. Таким образом направив камеру можно что-то подхватывать из дополненной реальности, вытаскивать,  размещать таким образом программируя действия без строчки кода.   Берем маркер А и рядом с ним ставим маркер S. Означает, чтобы запомнилось положение макера А в пространстве. Убираем маркер S. Далее ставим маркер R, означает запись движения. Далее перемещаем А на точку2. Убираем маркер R, что означает остановку слежеия за маркеромА. Далее ставим маркер P, который запускает движение 3д объекта связанного с маркером А.   Ну и так далее. Это очень интересно в плане программирования маркерами...   Видео по построению объектов в городе  

MasterGH

MasterGH

 

Временное отсутствие

Привет всем. Я думаю, что меня может не быть на форуме продолжительное время от 2х месяцев в связи с обстоятельствами. Переезд, поиск работы и семейные обстоятельства. Второй момент. Я создал кнопки яндекс кошелька в некоторых темах моего блога. Толку от кнопок нет, т.к. там все по нулям. Поэтому я их удалю. Lua плагины для CE пока делать нет возможности. До встречи в Москве! ) Буду искать работу в новой игровой студии уже в Москве

MasterGH

MasterGH

 

Плагин для ведения логов в CE

Плагин ведет историю поиска, отсева, отмены. Логи выглядят следующим образом Для чего может применятся На шаге отсева посмотреть в логах, какое значение искали до этого и какой способ поиска использовали. При неудачных поисках мы просматриваем как и что мы сканировали раньше. Если вообще ничего не получается при сканировании, то логами можно обмениваться. Горячие клавиши, которые настраиваются из окна настроек CE работают и в логах.   Установка: скопировать GHL_log.lua в директорию "/autorun" Lua скрипт:  В комментариях можно написать про ошибки или про идеи улучшения плагина.

MasterGH

MasterGH

 

CE 6.8 Обзор нового инструмента поиска по структурам

1. Открываем trainme Dark Byte. 2. Проходим первый шаг (там нужно сделать One Hit Kill чит через прогресс бар, количество патронов тоже интересно поломать) 3. Так вот на Step2  ищем адрес здоровья нашего космического корабля. Ставим брейкпоинт на доступ, стреляем. Видим, три адреса и вот теперь новые функции в контекстном меню как на скриншоте   На "(1)-(2)" - вызываем контекстное меню выделив адрес своего корабля и добавляем его в группу1. Тоже самое делаем для красных адресов кораблей противников На "(2)" вызываем опцию сканирования и видим "(3)" На (3) выбираем скан по RAX или по другим значениям. Например, когда по RAX не нашли ничего.   Дальше видим окно и галку ставим "Only find matching groups" и сканим. Видим результат    Т.е. по +70 и другим смещениям можно сделать фильтр свой - чужой.  В общем замечательный инструмент для работы со структурами с заданием уровня сканирования по оффестам

MasterGH

MasterGH

 

Обработка исключения в Cheat Engine AA

Новые директивы try/except в AA доступны Cheat Engine 6.8 Beta2   Задача  try/except в AA обработать исключение, не допустить crash. Чтобы игра продолжалась, а чит в лучшем случае не закрыл бы процесс. В теории возможно определить, что был crash и что-то сделать. Например, отправить логи в свой или иной удаленный сервис аналитики, что такой-то чит не сработал...   Пример от DarkByte для  try/except с счетчиком crashes    

MasterGH

MasterGH

 

Обработка исключения в Cheat Engine Lua

pcall() функция может вызывать функцию, которая может вызывать исключение. Возвращает статус в виде булевой о том, есть ли исключение или нет и возвращает текст исключения.    Источник   Как этим пользоваться? Если вдруг знаем, что может произойти ошибка, то можно её обработать и выполнить правильное действие не останавливая работу Lua скрипта. Или например если  не выполняется условие, то можем сами создать ошибку с помощью функции error, что остановит скрипт.

MasterGH

MasterGH

 

Интересные программы

1. WebSite-Watcher позволяет отслеживать изменения на веб-страницах в том числе по по регулярным выражениям. Можно отслеживать изменения на сайтах Cheat Engine и других. Форум отслеживать смысла особого нет. Проще подписаться на обновление и почтовый клиент поставить. 2. Программы тестирования и автоматизации под разные ОС:     Sikuli — открытая кросс-платформенная визуальная среда создания сценариев-скриптов     AirTest IDE — почти как Sikuli и более того, китайские разработчики были вдохновлены Sikili и решили взять из него многое и использоваться  в QA тестировании.  3. Автоматический скрывать значков на рабочем столе AutoHideDesctopIcons 4. LightShot - быстро делаем скриншоты и заметки к ним. Можно еще использовать SnagIt, он еще и видео может снимать 5. f.lux — софтина регулирующее цветовую температуру компьютерного монитора 6. VerseQ — лучший на мой взгляд клавиатурный тренажер. Есть плагины тренировки на языки программирования 7. Scanner — показывает график в виде секторов о данных на жестком диске 8. ProcessExplorer, ProcessMonitor, WinScanner, API Monitor... все по системе 9. Возможно понравится XYplorer как замена или дополнение к файловому браузеру 10. NotePad ++ и sublime_text - на мой взгляд хорошие редакторы текста, может быть даже одни из лучших   Как-то раз нужно было поставить пробелы между китайскими иероглифами в гугл таблице (все для игры на Unity), чтобы в игре разрядить текст и он не был мелким. На notepad++ это выгладило так

MasterGH

MasterGH

 

CE Lua. Ищем свойства userData.

UserData в Lua это пользовательский тип.  Точно не знаю, но я думаю  в документации в CE Lua (celua.txt или здесь на офф. сайте) тип userData у всех классов или большинства классов. Например,  проверим, что главная форма CE это userData тип local mainFormCE = getMainForm() print(type(mainFormCE)) > userdata (вывод из консоли) Выводим список свойств следующим образом через getmetatable функцию. Метатаблица — это  особая  таблица свойств Lua-переменной (подробнее здесь) local mainForm = getMainForm() local listUserData = createStringlist() for k,_ in pairs(getmetatable(mainForm)) do listUserData.add(k) end local allowCustomInput = false local id, name = showSelectionList("Title", "Caption", listUserData, allowCustomInput) print ('Index: '..id..", Name: "..name) listUserData.destroy()   Результат в виде списка свойство переменной mainForm   Чтобы наглядно было. Свойства эти похожи на свойства из Дельфи. Можно загуглить, они поддробно описываются. Берем например свойство цвет. Прочитаем оригинальное и запишем свое любое   local mainFormCE = getMainForm() print(mainFormCE.getColor()) > 536870912 -- в hex-е это 0x20000000. Можно перевести в калькуляторе или через print(string.format("%08X", 536870912)) Случайное свое впишем ради наглядного примера mainFormCE.setColor(546484)
   

MasterGH

MasterGH

 

Cheat Engine 6.8 Beta 1. ShowSelectionList функция

Довольно интересная функция, мне понравилась.  showSelectionList() позволяет просмотреть список класса Strings и выбрать свойство через список.
  Как пример посмотрим список свойств главной формы и выберем любое свойство local mainForm = getMainForm() local listProperties = getPropertyList(mainForm) local allowCustomInput = false local id, name = showSelectionList("Title", "Caption", listProperties, allowCustomInput) print ('Index: '..id..", Name: "..name) --> Примеры выполнения: --> Index: 55, Name: ShowHint --> Index: 10, Name: Top После исполнения Lua скрипта вот такой диалог появится. Можно искать свойство через ввод текста     Список строк (Stringlist Class) используют: createStringlist(): Strings  - постой список getAutoAttachList(): Strings  - список имен процессов для автоподключения getPropertyList(class) : Strings - список свойств getCommonModuleList(): Strings  - список пропускаемых при сканировании модулей getProcesslist(Strings) - список процессов getWindowlist(Strings) - список окон getThreadlist(Strings) - список потоков Database.Params: Strings  - свойство  базы данных SQL ListItem.SubItems: Strings - свойство подстрок в визуальном компоненте списка ComboBox.Items: Strings - комбобокс Memo.Lines: Strings  - мемо компонент RadioGroup.Items: Strings  - компонент RadioGroup ListBox.Items: Strings - компонент ListBox FileDialog.Files: Strings  -  выбранные файлы в диалоге

MasterGH

MasterGH

 

Взлом крафта в StarsOne

В оригинале, если нет всех компонентов рецепта, то нельзя скрафтить вещь. Цель: скрафтить без компонетов по нажатию кнопки   Игра на Unity и можно пробовать использовать в dnSpy модифицировать файл Assembly-CSharp.dll Открываем файлик и смотрим на классы связанные с крафтом   Так находим кнопку, которая создаст указанное количество вещей крафта в CreateItem     Задача скрафтить по имеющемуся рецепту любую вещь. Для этого я добавляю проверку количества вещей  и удаляю лишний код. Под сполерами оригинальный и модифицированный код   Визуальное сравнение   Модифицированный код   Оригинальный   Изменяем весь класс или метов в этом окне   Если выводит ошибки при компяляции, то скачиваем IlSpy и его код вставляем в код в dnSpy. Или качаем DnSpy 3.2.0 или ранее   Изменения сохраняем в модуль, запускаем игру и крафтим.   Получить все рецепты (не проверял правда, попробуйте если хотите)   Вещи не ломаются. Убрать отнятие "здоровья" у вещи    

MasterGH

MasterGH

 

Unity набирает обороты

В версии Unity 2018 довольно много интересного.   1. Это Unity Hub. Та штука, которая позволяет быть в курсе новых версий Unity.  2. PackageManager. Покажет пакаджи установленный в проекте. 3. Pro Builder. Довольно интересный инструмент, который позволяет моделить оркужение в Unity и творить простые локации, здания и создавать примитивы с наложением текстур... там очень много чего, я не не смотрел особо. Это альтернатива террейну. Фишка в том, что мы не являясь художниками (2д, 3д артистами), на Pro Buildere можем вполне сносное сделать окружение в нереалистичном стиле.  И не очень мультяшный и не похожий на реалистичный стиль. В таком стиле в теории можно сделать быстро игру. Встроить туда рекламы и инаппов, ну и если все будет ок, то будет приносить прибыль на маркетах. Важнее продвинуть аппу вверх, на вид, чем сделать её; 4. У Unity развиваются мощные системы сервисов. Есть поддержка иннпов, рекламы, аналитики, багрепорты (альфа версия), стеки крашей и исключений с характеристиками устройств пользователей. Не все баги там можно увидеть. Google Play консоль ловит больше багов, крашей и ANR (диалоги с "подождите ваша программа что-то долго делает или не отвечает, или будет закрыта"). 5. Запомнился 2d аниматор с ригом. Т.е. риг это склет обычно на 3д модель, а теперь риг можно делать на 2д модели. 6. Пока больше не помню, что такого интересно...    В 2017 версии появилась возможность скрипты связывать с отдельными dll сборками. В теории это позволит увеличить скорость компиляции. Например, у нас в проекте на младших версиях Unity на правку уходит 8 секунд компиляции на мощном компе,т.к. все скрипты в одной сборке dll. Пока не тестили эту фичу...

MasterGH

MasterGH

 

Не работает плагин сборки Firebase для AirTest IDE

Почти месяц ковыряюсь со сборкой апк, которая не запускается на инструментальном тестировании в Firebase   Рис.1 Сборка апк на инструментальное тестирование TestLab  от Firebase. Окно AirTest IDE   Две апк-шки создается. 1. В Unity, с иvпортом Poco SDK  2. В Плагине как на рисунке   Затем обе апк-шки отправляются на инструметальное тестирование в Firebase  Запускаю тест. Шесть секунд видео со стандартной заставкой и конец теста.   На данный момент тестирование проводим через GameLoop тест, а не через инструментальный тест от AirTest IDE. Продолжаю искать решение, пока не понятно. Также в AirTest IDE еще не закончили свою документацию и в Firebase ничего не сказано про этот инструмент. Однако, известно что этот замечательный инструмент тестирования будет участвовать в FireBase TestLab. В 2018 году китайские разработчики официально договорились с гуглом об участии их продукта в тестировании на удаленных устройствах сервиса TestLab

MasterGH

MasterGH

 

Lua поиск элемента до и после строки

Была задача получить два списка из документа, в котором было с пару десятков тысяч строк. На практике выяснилось, что искать текст после ключевого слова легче чем искать текст до ключевого слова. Об этом и будет дальше   В утилите, которую я делал "Lua Regular Expressions (v. 1.0)"   Текст во вкладке "gmatch"   Game1
gameCompany
DAU
53.21k
-20% Game2
gameCompany
DAU
20.35k
-20%   Поиск элемента после строки   "DAU "DAU%c%c(.-)%c%c""
 > 53.21k;20.35k;   Поиск элемента до строки Вот такой паттерн со двигом скобок для поиска прыдыдущеей фразы   "%c%c(.-)gameCompany%c%c"   не прокатит для вывода списка игр над фразой gameCompany
  
 > ;53.21k
 > -20%
 > 
 > Game2
 > ;   Очевидно, можно сделать поиск по похожим фрагментам, которые идут последовательно сверху вниз.    Для просты сначала добавим первую пустую строку и видим повторяющиеся фрагменты   %c%cGame1%c%cgameCompany%c%c   пишем шаблон ".*%c%c(.-)%c%cgameCompany%c%c" и опять мимо    > Game1;53.21k
 > -20%
 > 
 > Game2;   Потому что текст над Game2 пошел выше Game2. Тогда делаем захват, только первой фразы и дальше не идем   "%c%c(%w-)%c%cgameCompany%c%c"
 > Game1;Game2;
 
И тогда все ок.   Но это еще не все. Осталась первая пустая строка, которую добавили, если её удалить, тогда   "%c%c(%w-)%c%cgameCompany%c%c"
 > Game2;
 
 Не видит Game1.
 
 Значит мы можем  убрать %c%c,
 
 "(%w-)%c%cgameCompany
 > Game1;Game2;   Дальше название игры может быть таким "My Game: my Game". Здесь и пробел и двоеточие. В таком случае текст уже будет
 
My Game1: my Game
gameCompany
DAU
53.21k
-20% My Game2: my Game
gameCompany
DAU
20.35k
-20%   Пробуем (%w-)%c%cgameCompany > Game;Game;   Что не верно, т.к. захват одним (%w-)   Мы должны в скобках развернуть фразу имени игры. В ней могут быть пробелы, числа, текст и двоеточие   ([%w%s]-)%c%cgameCompany
>  my Game; my Game;   Затем
([:%w%s]-)%c%cgameCompany
> My Game1: my Game;

> My Game2: my Game;   Затем
%c?%c?([:%w%s]-)%c%cgameCompany
> My Game1: my Game;
> My Game2: my Game;
  Вот и все. Если  попариться один раз, то тексты уже парсить будет гораздо быстрее.   Так я вывел столбы DAU и названий игр в таблицу, что было в районе 500 строк из пару десятков тысяч строк   p.s. Текст в консоли Lua отличается %c%c, а %с p.s.p.s. Можно разсплитить текст по "/n/r" или "/n" в таблицу строк и по индексам данных находить предыдущую или последующую фразу. Но мне проще две строки ввести "%c?%c?([:%w%s]-)%c%cgameCompany" и "DAU%c%c(.-)%c%c"

MasterGH

MasterGH

 

Python ошибка

Долго не могу решить проблему 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.decode("GB2312").encode("utf-8")) При билде апк в firebase через плагин в AirTest (QA-тестирование на Unity)   Среда разработки от уважаемых китайских разработчиков Я думаю в связи с этим ошибки с кодировкой GB2312. Гуглил, искал... пока безтолку     Исходники Билд

MasterGH

MasterGH

 

[Cheat Engine Lua] Тестирование производительности2

Уже была запись про тестирование производительности. В этом примере тестируем разное обращение к функции со средним арифметическим значением     Результаты при 4-х запусках avg = 0.93333998758048 avg = 1.0322099291325 avg = 0.92657961891689 avg = 1.1883763135947   Вывод. Разница не существенная.

MasterGH

MasterGH

 

Отладка Lua скриптов и stacktrace функций

Пример, который показывает как снять стек вызовов функций 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 (как на скриншоте) и  пройти по шагам

MasterGH

MasterGH

 

Чтение адресов и записи в адреса

Я обратил внимание на следующие поведения записи и чтения 1. Срабатывают только инструкции чтения до изменения параметра, адрес рабочий С адресом работают инструкции на чтение, но если в друг в этом адресе что-то поменять (например в CE), тот тут же выскочат инструкции на запись. Нельзя однозначно утверждать, что адрес является настроечным параметром, но и нельзя утверждать, что это не рабочий адрес. Какая-то инструкция может жестко менять значение, а может быть будет "стараться" изменить значение адреса в меньшую или большую сторону, но адрес при этом будет рабочим. 2. Срабатывают инструкции записи и чтения, адрес не рабочий Запись и чтение влияет только на часть игры, а не на все или вообще не влияет, а перезаписывается постоянно. Например, на визуальное отображение полоски со здоровьем. Получается, что адрес не рабочий, а у него есть как и в первом пункте инструкции и на запись, и на чтение. 3. Один раз срабатывает инструкция записи и потом всегда на чтение Если попался такой адрес в структуре, то он точно является "настроечным" и рабочим адресом. Например, это какой-то коэффициент, который добавляет, умножает, отнимает... в общем что-то меняет. Что с ним не делай, это адрес будут только "читать". Также это может быть булевой параметр "1 "или "0" и по нему может что-то резко меняться в игре.   Окей. Вспоминается окно с кучей инструкций и счетчиков уникальных адресов (не более 8-ми логируется) Постреляв патроны  с адресом патронов (в СТАКЛЕРЕ Зов Припяти) сработали инструкции как на запись, так и на чтение.   Первая инструкция читает очень часто, вторая редко. В круглых скобках обозначаются количество проскакивающих адресов. Если был выстрел и значение поменялось, то вылезли инструкции записи (все после первых двух).   Код читает в цикле адрес...и если, что поменялось, то запишет в него потом. Это похоже на пункт1, который обсуждали выше, но этот адрес патронов не тот, который нужен. С виду рабочий, но патроны потом не стреляют. Патроны это структуры в памяти, а адрес их как  счетчик структур   Как можно делать   Создаем две группы (скрин ниже). Первая текущая и не замороженная. Вторая с двумя замороженными состояниями, когда стоим и ничего не делаем. Делаем несколько выстрелов. Цвет по +AC нас интересует больше всего, он соответствует логике состояний (стреляю и (не стреляю и не стреляю))   Выделяем и перемещаем адреса этого цвета и морозим в таблице.   Первый праметр это прочность, второй не знаю. Третий счетик патронов. 3 и 5 адреса связанные, если правильно помню, с объектами патронов В Сталкере это не даст беск. патрнов, но в других играх может иметь смысл как прием сравнения структур и групп.   p.s. По Сталкеру Зов Припяти, к сожалению, у меня не было времени взломать патроны или может быть я не умею, не знаю. Какие-то патроны в сталкерах ломал, но не помню как.

MasterGH

MasterGH

 

[Cheat Engine] Dissect Data Scaner 1.0.1 beta

Немного комментариев к этой версии.   1. Исправлены смещения 2. Добавлены также инструкции на запись   На скриноте ниже пример сравнения текущей структуры с координатами в СТАЛКЕРЕ Зов Припяти с копией структуры.  

MasterGH

MasterGH

 

Новости по будущему плагину

Проведено огромное количество опытов над структурами. Много переделок. Очень кратко напишу, что поменялось.   1. Название структуры состоит из адреса, количества адресов в ней и  времени в миллисекундах на один байт в структуре. Подчеркнуто красным   2. Смещения отбираются только те, на которых за X времени не было обнаружено ни одной инструкции на запись. Чем больше та самая чувствительность,  тем точнее результат 3. В именах структур теперь ценная информация. Это смещение, регистр и тип   На скриншоте ниже можно посмотреть пункты 2 и 3. Также на этом скриншоте я заморозил по соседству адрес (поставил Lock) и пару раз пострелял в игре Сталкере Зов Припяти     Выводы, которые я сделал за очень и очень скромное время пользования. За минут 15 и на паре структур оружия в двух разных играх L4D2 и Сталкер Зов Припяти 1. Если править 4-х байтовые значения, то легко можно нарваться на вылет игры. Но подключившись снова, можно продолжить. 2. Правки значений с типом в 1 байт могут заблокировать оружие (в двух играх) или же устроить скорострельность на полную катушку в L4D2. 3. Правки значений с типом float. Можно легко нарваться на вылет в игре, если например поставить нолик. Деление на ноль или какая-то иная причина. Лучше ставить чуть больше нуля, можно положительные или отрицательные значения 4. Частенько бывают адреса в структуре, на которых включаются инструкции записи только после изменения значения. Тут я пока ничего не смог сделать, просто удалить их из структуры как лишние. 5. Для сканера используется 1 аппаратный брейкпоинт, остальные три штуки еще не используются, т.к. сложно их прикрутить. Если использовать все 4 аппаратных бряка, то скорость сканера была бы в 4 раза быстрее. Сейчас на 2К байт по 10 мс, у меня уходит где-то 150 секунд. Если я ставил 20мс, то находилось на 10 смещений больше или какие-то другие смещения пропадали.   Код будущего плагина все еще находится на стадии тестирования. Поэтому пока плагин не выкладываю.   upd1:  инструкции cmp, add, sub, xor, and, not, test, mulss, fsub, fmul, dec, inc, mul; теперь выводятся в имя элемента структуры. На скриншоте случайно вышел на координаты UI таймера. Сделал три скана трех структур в новых окнах     upd2: перемещение структуры   Итог перемещения двух структур в первую    

MasterGH

MasterGH

 

Анализ Dissect Data Structure 2

Охота на структуры и удивительное путешествие в мир структур в L4D2   1. Игру L4D2 в оконный режим 2. Установка плагина (позже) 3. Установка VEH отладчика, иначе вылеты 4. Первая миссия. Ищем адрес патронов. Бряк на адрес. Нашли инструкцию Красным показано, что я не всю структуру проанализирую позже. Долго было ждать. Структура больше 5К байт...   5. Делаем сигнатуру любой инструкции при работе  с патронами на всякий случай, если игра вылетит. server.dll,83 BE 14 14 00 00 00 7F 4D 6. Переходим в код и ищем проскакивающие адреса на инструкции. Там один адрес нашего  пистолета. Клик на него и переносим адрес начала будущей структуры в окно Dissect Window.  Можно не создавать структуру (отказываемся). Кликаем "Scanner" (он будет на всех окнах dissrct data)     7. Далее побежало сканирование.   В игре можно что-то делать, можно ничего не делать. Долго ждать..   Меняю опции. Чувствительность как была так и осталась минимальная (это время ожидания прерывания на адресе умноженное на коэфициент чувсвительности и на 100 мс).  Размер структуры меняю, до 1100   Наконец ~30 секунд дождался без вылетов (иногда бывают,  возможно из-за VEH). Появился результат   Самые интересны это байтовые и float значения. и инструкции чтения. Их определит можно пока только по логам...   Меняю первый байт на 1 и пистолет стал очень быстро стрелять.   Ради чего это все и делалось, чтобы похожие адреса искать...   Если сравнить дефолтную расструктуризацию, она слева     Логи (для меня и для желающих) по определению типа по опкодам   Плагин выложу позже. Надо еще доработать и потестить.   Вот к примеру float распознал как Pointer и там где fst тоже по +42C тоже фигня. Это ошибки. Это быстро поправить, но могут быть еще ошибки.   Не менее интересны еще вложенные структурки, которые удается раскрыть (не все). Вот одна из них и усеяна параметрами, которые можно покрутить   Вложенные структуры пока отдельно можно создавать в окнах, чистить сканером, потом подставлять их в основную структуру по имени. В общем пока рано об этом писать.   Больше всего меня волнует польза, т.е. что можно с этим сделать. Пока только сразу вышел на скорострельность. Еще шесть параметров покрутил байтовых, ничего не дало. Надо еще попробовать выводить только смещения, которые работают на инструкцияъ чтения, а не "чтении и записи". Запись скорее всего не нужна. Значения просто активно перезаписываются  в структуре. А вот оставлять смещения,  с которыми работает только "чтение" скорее всего даст куда больше вероятности найти параметр настройки.

MasterGH

MasterGH

 

Анализ Dissect Data Structure

Конечно не секрет, что типы данных не правильно определяются. Вот пример для 50-ти адресов   Слева как определил данные CE. Справа как определил их я по логу ниже Понравились данные с размером в 1 байт, привлекают в нимание. Как только я переключил на ноль или 1, то персонаж перестал двигаться и не реагировал на движение.   Лог инструкций   Пытаюсь по логам определить алгоритм для Lua, чтобы скрипт сам ставил тип и смещение. Конечно есть сюрпризы, когда регистр перезаписывает сам себя и еще куча опкодов. Чтобы получить такой лог мож попробовать этот скрипт. Он черновой    

MasterGH

MasterGH

×

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.