Перейти к содержанию
  • запись
    71
  • комментариев
    90
  • просмотра
    3 702

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

 

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

Дополненная реальность похоже на спецэффекты в кино, только на экране видим изображение получаемое с видео камеры, которой управляет пользователь.    Что интересно. Камера, которая есть у многих на телефоне и допустим некоторая программа с 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

 

Cheat Engine 6.7 и Lua. Часть 4

Решил попробовать написать CE Lua  скрипт, который прочесывает структуру и в Dissect data/structures окне создавал бы структуру только со смещениями, с которыми код работает, т.е. читает или пишет.   Например, мой персонаж прогуливается по городу, а каждые 200 мс ставится брейкпоинт на смещение +1 до гипотетической N границы структуры (например до 4096).   Я не успел сделать определение типа, но смещения внутри структуры получить я успел.   Итак, находим начало структуры любой. Запускаем Lua скрипт и просто что-то делаем в игре. Потом вылазит текст с дизассемблированными инструкциями и смещениями. Уже по этим логам можно определить вручную 1) к каким смещением было обращение (адреса по ним мы и будем менять или сравнивать структуры между собой позже) 2) по виду инструкции и соседнему смещению уже примерно можно определить тип данных и их размер     Осталось сделать определение типа, а это не так уж долго сделать  и осталось взять код из предыдущих записей в блоге формирования структуры в окне dessect data. Так мы получим структуру только с активными смещениями, (а зачем нам пассивные?) и определим в них тип, я надеюсь определим правильно   Пример кода, который я использовал  

MasterGH

MasterGH

 

Некоторые приемы создания читов

1. Персонаж падает с большой высоты и разбивается   Ищем адрес скорости прыжка прыгая под speedhack. Находим эту скорость. Ставим бряк на доступ. Прыгаем. Инструкции на чтение добавляем в список адресов и там начинаем нопить - Либо по одной - Либо рискнем по половине от половины - Либо рискнем и все сразу занопим   Если повезет, а должно повезти, то инструкция не прочитает то значение скорости, которое уложило бы персонажа на землю и можно будет прыгать на огромную высоту.   2. Как делать супер прыжок Ищем под speedhack скорость float (назовем её velocityZ, Z - вертикальная ось) по вертикальной оси прыгая персонажем. Когда прыгаем. то скорость в один момент увеличивается. Затем, скорость постоянно уменьшается от положительного до отрицательного значения.  Когда на земле, то скорость быстро записывается и равна нулю. Дальше смотрим что это рабочий адрес. Прыгаем и замораживаем значение. Если адрес рабочий, то персонаж зависает в воздухе или движется. Дальше ставим бряк на запись на этот адрес и снимаем speedhack Прыгнули и увидели инструкции. Например одна из них будет movss [rdi+0000010C],xmm0 и работает каждый раз при прыжке по одному разу за прыжок (прыгнули — сработала, прыгнули — сработала). Вот в неё и легко сделать инъекцию с рядом стоящими адресами с умножением на scale величину. Все и персонаж будет с суперпрыжком. Чтобы он не разбивался при прыжке смотрим пункт1   Еще один вариант — не писать инъекцию кода, а искать адрес силы прыжка в структуре. Это можно сделать меняя значения в структуре где-то рядом с [rdi+0000010C] и смотреть что происходит в игре. Можно найти, а можно и не найти, и возможно этот процесс будет долгий. Еще можно в пошаговой отладке пройтись, посмотреть стек, протресить и попробовать найти адрес в структуре (при чем структура не обязательно будет с адресом в rdi) без рандомного поиска в структуре. Но у последнего есть свои плюсы, можно найти разные параметры движения игрока и увидеть изменения в игре.   3. Менять данные в структурах или менять код?   В примере выше пришлось создать два новых поля scaleXY: dd (float)4 scaleZ: dd (float)4 И умножать их на скорости X,Y,Z персонажа.   С одной стороны больше кода писать и добавлять новые поля, а с другой стороны выделить время и найти подход к поиску значения стартовой скорости в структуре. Можно в структуре ничего не искать, а написать скрипт выше и это может быть быстрее чем искать в структуре. С другой стороны если в структуре рандомно ставить параметры в течении времени X на 4К байт, то можно найти: адрес скорости, адрес гравитации, адрес чувствительности и много чего еще.   И еще одно ограничение. Расструктуризация не всегда правильная. Упорно вместо float может видеть 4 байта.  Это в лучшем случае, в худшем разные смешения смержены и выводятся разные типы данных. В общем исследование игровой структуры эта тема интересная. Можно сказать это поиск свойств, по которым будет меняется поведения персонажа в игре. Структуру желательно обследовать какой оффест, что делает и какого он типа (через брейкпоинт). Это всего 4К байт проанализировать. Каждое смещение подписать и сохранить. Сделав это вы скажите себе я исследовал всю структуру и знаю, что делает смещение.   Lua может помочь автоматизировать анализ структур и пока я думаю об этом. Данные структур могут сильно повлиять на поведение персонажа,  на прохождение потоком отладочных инструкций игры по разным условиям — выполнять и не выполнять ответвления кода с разными условиям. В общем есть над чем подумать.   Всегда было приоритетным менять код, но теперь стал задумываться о том чтобы больше смотреть в сторону правки данных структур. Фактически код мы не правим, а меняем данные и код работает уже с другими данными.

MasterGH

MasterGH

×

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

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