Перейти к содержанию

MasterGH

Ветераны
  • Постов

    2 999
  • Зарегистрирован

  • Победитель дней

    129

Записи блога, опубликованные MasterGH

  1. MasterGH
    Почти месяц ковыряюсь со сборкой апк, которая не запускается на инструментальном тестировании в Firebase
     

    Рис.1 Сборка апк на инструментальное тестирование TestLab  от Firebase. Окно AirTest IDE
     
    Две апк-шки создается.
    1. В Unity, с иvпортом Poco SDK 
    2. В Плагине как на рисунке
     
    Затем обе апк-шки отправляются на инструметальное тестирование в Firebase 

    Запускаю тест. Шесть секунд видео со стандартной заставкой и конец теста.
     
    На данный момент тестирование проводим через GameLoop тест, а не через инструментальный тест от AirTest IDE. Продолжаю искать решение, пока не понятно.
    Также в AirTest IDE еще не закончили свою документацию и в Firebase ничего не сказано про этот инструмент. Однако, известно что этот замечательный инструмент тестирования будет участвовать в FireBase TestLab. В 2018 году китайские разработчики официально договорились с гуглом об участии их продукта в тестировании на удаленных устройствах сервиса TestLab
  2. 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 может помочь автоматизировать анализ структур и пока я думаю об этом. Данные структур могут сильно повлиять на поведение персонажа,  на прохождение потоком отладочных инструкций игры по разным условиям — выполнять и не выполнять ответвления кода с разными условиям. В общем есть над чем подумать.
     
    Всегда было приоритетным менять код, но теперь стал задумываться о том чтобы больше смотреть в сторону правки данных структур. Фактически код мы не правим, а меняем данные и код работает уже с другими данными.
  3. 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: перемещение структуры



     
    Итог перемещения двух структур в первую

     
     
  4. MasterGH
    Unity + ARKit 2.0 + Apple Device + iOS > 12.x  позволят сканировать через визуальную одометрию реальный мир и расставлять в нем виртуальные объекты и загружать их в точные места, куда раньше поставили. Особенность в том, что чем больше информации собрали физической камерой из разных положений и углов, тем больше шансов, что увидим объекты именно там куда их поставили. Это еще классно тем, что карту мира можно расширять, сохранять, загружать, передавать в реальном времени на разные устройства в мультиплеере. Далее ArKit похож на ArCore и Vuforia, EasyAR и т.п. сканируя изображения - маркеры, 3d-фигуры, сканирование плоскостей... И короче говоря,  могу добавить, что ARKit интересная штука. 
     
    Шлем и система виртуальной реальности + Unity. Стоит такая штука за 100К в России. Хотя цены бывают разные. На работе есть такая система и в ней очень круто. Манипуляторами как реальными руками можно делать много интересных вещей в 3д-комнате, при чем отфотканной с высоким качеством. Брать 3д-вещи в руки как реальные. Вращать, менять положение, бросать и так далее. Также было интересно на крыше в демке  "человека-паука". Это пейзаж с крыши, надевание маски, стрельба, звуки. В общем можно в шлеме путешествовать просто сидя дома. Если на Unity шаришь, можешь что хочешь сделать с этим шлемом. 3д- двери открывать,  делать механику разную, делать игры, так и что-то с пользой придумать, если конечно придумать.
     
    HaloLens - очки смешанной реальность. Стоят за 300К.  Они интересны тем можно связать обучение работы с приборами (с 30-той секунды). Сейчас тут взрослые люди обучаются, а могут так обучаться и дети, и студенты и взрослые.  Можно придумать:
    1) куда идти в аэропорте, могут показать очки (а это для смартфонов, а не для очков, таскаться с ними еще)
    1) как пользоваться плитой, стиральной машиной. телевизором... и другой техникой
    3) как приготовить еду
    4) ну и так далее... 
    Обучение программируется судя по видео
    С выставки. Самое интересное где-то с пятой минуты
     
    Все идет к тому, что у всех вместо телефонов могут быть очки, а передвигаться мы будем все на колесе, самокате или летающей машине, или индивидуальном пропеллере. Если сейчас можно видеть как все гоняют на самокатах и некоторые на колесе, то может лет через 100-300 люди могут летать на работу на пропеллерах за спиной.  Также все идет к том, что работа будет для большинства становится удаленной или роботы будут заменять людей, или люди будут управлять роботами как аватарами. Ну а путешествовать на пропеллере лучше на отдыхе чем на работу)
  5. MasterGH
    Прошлая точка входа запускающая активирующий скрипт не хотела работать, если запустить гигантский трейнер (сгенеренный на CE), а потом игру.
     
    Для работы трейнера точка входа теперь  задается вот таким образом после генерации кода трейнера
     
    Подробнее в исходниках (лучше смотреть позже, после просмотра видео, которое еще готовится)
    gta3.CT
     
    У версии CE 7.2 есть к сожалению баги.
    1. При генерации трейнера нужно вручную править высоту надписей —  надписи срезаются.
    2. Количество нопов, если прописывать как "nop 7"в  АА, вроде,  на  x64 совсем не работает, только на x32 так можно писать нопы.
     
    Что получилось сделать.
    Сгенерить гиганский трейнер. При подключении к процессу автоматически включается главный скрипт. Работает он с часто обращаемой инструкцией. Извлекает поинтер на главного игрока. И далее по значениям меток может выполнять читы. А сопряженные скрипты могут в метки записывать активацию или использовать поинтер на главного персонажа на инструкциях урона для, например, onehit kill. В активирующем скрипте предполагается работа с оффсетами структуры персонажа и регистрируемыми метками. Например, в структуре можно еще штук 10  оффсетов найти через большой бряк на всю структуру. Значит еще +10 новых меток можно завести в активирующем скрипте и +10 АА скриптов, которые по этим меткам что-то включают....
     
    Переносимость на разные игры.
    В принципе "скелет" АА скриптов показан в исходниках и ожидается, что в этом основная фишка.
    По идее меняется: процесс,  оффсеты, сигнатуры, регистры, инструкции, иконка, заголовок. Для иной игры придется модифицировать  CT таблицу и сгенерировать трейнер.
     
    Если сравнивать, например, с созданием трейнеров на C++. Оффсеты — самое главное и поинтер на структуру, и сигнатура, которая поинтер вытащит. И трейнер получится меньший по размеру. Но на CE уже готово много, а результат фактически один и тот же — запись по оффестам с разным user interface или вообще без него.

  6. MasterGH
     
     
     
     
    Репозиторий
     
    1. На адрес устанавливается брейкпоинт.
    2. Идем в игру делаем или не делаем что-то
    3. Начинают срабатывать инструкции на брейкпоинте
    4. От каждой инструкции начинается трейслог, подобный тому, который есть у CE, но менее тормозной
    5. Заканчивается трейслог на инструкции, на 100-ом счетчике после ret-а (об этом пункте будет уточнение). Здесь выходим на коневой цикл
    6. Трейслог останавливается и ожидание следующей инструкции, которая сработает на брейкпоинте, она должна быть отличной
     
    В итоге мы имеем кучу трейслогов начинающихся с адреса работающего с параметром (например, кол-во патронов в обойме) и заканчивающихся на корневом цикле. Также мы собираем данные об адресах с рет-ами и счетчиками.
    По этим данным можно нарисовать схему, где ret-ы меняют направление пути прохождения потоком дизассемблерного кода
     
    На скриншотах ниже
    Вертикальные линии со кружками -— это ветвь трейслога
    Белый кружок — адрес ret-a, который не повторялся
    Пунктирный кружок — адрес ret-а, который повторялся. Стрелка от такого пунктирного круга будет указывать на белый круг.
     
    По схеме видим, где ret-ы меняют свое направление поднимаясь по рутине в корневом цикле
     
     
     
     
    По плану по визуальной части:
    1. Клик на кружок — переход на код
    2. Придумать что-то, чтобы стрелки не накладывались друг на друга
    3. Установка брейкпоинтов на кружках — становиться красными
    4. Легенда. Номер ветви, связанная инструкция, состояние брейкпоинтов. Комментарий к ветви
    5. Загрузка/сохранение легенды
     
    Для чего нужно. Для поиска условий, которые включают и выключают ветви кода. Т.е. чтобы можно было это условие быстро найти и изменив его, повторить выполнение кода ветви, которая "пробьётся" из корневого цикла. Таким образом попытаться повторить действие в игре, а если не получаться повторить, то определить дополнительные условия.
  7. MasterGH
    Новые директивы try/except в AA доступны Cheat Engine 6.8 Beta2
     
    Задача  try/except в AA обработать исключение, не допустить crash. Чтобы игра продолжалась, а чит в лучшем случае не закрыл бы процесс.
    В теории возможно определить, что был crash и что-то сделать. Например, отправить логи в свой или иной удаленный сервис аналитики, что такой-то чит не сработал...
     
    Пример от DarkByte для  try/except с счетчиком crashes
     
     
  8. MasterGH
    pcall() функция может вызывать функцию, которая может вызывать исключение.
    Возвращает статус в виде булевой о том, есть ли исключение или нет и возвращает текст исключения. 
     
    Источник
     
    Как этим пользоваться? Если вдруг знаем, что может произойти ошибка, то можно её обработать и выполнить правильное действие не останавливая работу Lua скрипта.
    Или например если  не выполняется условие, то можем сами создать ошибку с помощью функции error, что остановит скрипт.
  9. MasterGH
    Есть инструкции, которые добавляют мусора больше чем другие.
     
    Показываем объем памяти мусора
    print(string.format('Lua memory usage %.1f MiB',collectgarbage('count')/1024)) Ниже код того как попробовать узнать сколько мусора добавил код при парсинге ассемблерной строки двумя способами
     
    Пример результатов могут отличаться. Фиг его знает почему. Возможно работает сборщик мусора в разные моменты времени
    Lua memory usage 1.8 MiB Lua memory usage 1.8 MiB Lua memory usage 1.8 MiB 1.49 Lua memory usage 1.8 MiB Lua memory usage 2.3 MiB Lua memory usage 2.3 MiB 1.47 Lua memory usage 2.3 MiB Lua memory usage 2.8 MiB Lua memory usage 2.8 MiB 1.49  
  10. MasterGH
    Пример, который показывает как снять стек вызовов функций
    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 (как на скриншоте) и  пройти по шагам
  11. MasterGH
    Плагин ведет историю поиска, отсева, отмены. Логи выглядят следующим образом
    Для чего может применятся
    На шаге отсева посмотреть в логах, какое значение искали до этого и какой способ поиска использовали. При неудачных поисках мы просматриваем как и что мы сканировали раньше. Если вообще ничего не получается при сканировании, то логами можно обмениваться. Горячие клавиши, которые настраиваются из окна настроек CE работают и в логах.  
    Установка: скопировать GHL_log.lua в директорию "/autorun" Lua скрипт: 
    В комментариях можно написать про ошибки или про идеи улучшения плагина.
  12. MasterGH
    Открываем Lua консоль из дизассемблера
    Пишем Lua скрипт
    Дальше по шагам как на картинке

     
    Сколько я не пользовался CE я никогда не знал об этом отладчике. Когда я случайно узнал, то был приятно удивлен.
    Если мы пишем какую-то функцию и она дает сбой, то её можно отладить как на скриншоте. Это может быть и не функция.
    Например, код прочитал какой-то файл с текстом сохраненных параметров и подсмотрели в пошаговой Lua отладке что происходит дальше.
     
    *Действуют горячие клавиши. Например, F7— шаг, F9 — запуск без остановки.
  13. MasterGH
    Функция loadstring позволяет исполнять текст как код. Попробуем генерировать числа, сравнения чисел и логику И, ИЛИ.
    Цель: просто пример.
     
    Создать пары случайных чисел А и Б.
    Случайно сравнить попарно.
    Создать случайно логику  "И, ИЛИ" и сравнить результаты сравнения до тех пор, пока не будут истинны
     
     
    Пример вывода в Cheat Engine:
    >= or a = 83, b = 75, result = true a = 18, b = 86, result = false a = true, b = false, result = true Т.е.
    (83 >= 75 or 18 >= 86) == true, т.к. первое условие верное 83 >= 75 83 >= 75 = true 18 >= 86 = false  
  14. MasterGH
    Отличная книга по изучению паттернов проектирования. Ее можно читать со шпаргалкой по паттернам (иллюстрацию по паттернам можно загуглить).
    Перед этим еще загуглить SOLID + Unity .
    До кучи еще алгоритмы и структуры данных. 
    Все это  пригодится, чтобы пойти работать на программиста игр или приложений с разными типами реальности: дополненная, виртуальная и смешанная. А так же сейчас можно встретить вакансии по программированию не только Android, iOS устройств, шлемов и очков, но различных устройств и дронов.
    Об алгоритмах может быть позже напишу
  15. MasterGH
    Инфа по совместной работе с гитом. Может быть пригодится кому, а может и нет. Такую систему я использую на работе недавно.
     
    Можно совместно работать над одним большим проектом через git-flow. Возможно, кто-то из форумчан тоже использует git flow на работе.
     
     
    Кратко. Модель контроля версии построена на 4 ветках
     
    master - релизы
    develop - разработка
    feature - фичи
    hotfix - исравления
     
    С develop начинается разработка через копирования в ветку feature.
    Над фичей идет работа, а после завершения feature мержится с develop и feature сразу удаляется.
    После запланированных изменений develop мержится с master уходя в релиз.
    Если возникли баги, то от master создается ветвь на hotfix . После фиксов hotfix мержится с master.
     
    Доступ к мастер ветки может иметь один человек или его доверенные лица. Ветка Develop открыта для разработчиков. Это значит, что множество разработчиков колдуют в Develop ветке, а мержит изменения с master уже главный разработчик или несколько главных разработчиков.
     
    В мастере создаются теги с обозначением версии.
     
    Шпаргалка по git-flow: ссылка
    Семантическое версионирование : ссылка
  16. MasterGH
    Планируется улучшать и дорабатывать плагины, показать как с ними работать.
     
    1. Вывод данных в окно логов: сканирование, подключение к процессу, опции сканирования, состояния активации и деактивации записией в таблице CE и другие 
    2. Запись действий из пункта 1, сохранение этих действий и воспроизведение по кнопке или горячим клавишам
    3. Показ в дизассемблере CE ветвлений кода при проходе потоками разными цветами (можно видеть код, который не был пройден в разных ситуациях)
    4. Дополнительное окно дизассемблера с опциями подсветки инструкций по типу в градации черно-белых цветов: математические инструкции, логические инструкции, инструкции ветвления, на чтение и запись. 
    5. Улучшение плагина "Dessect Data Scanner" с DBVM или на 4-HW брекйпоинта. В случае DBVM количество брейкпоинтов не ограничено и можно определить тип данных одновременно для каждого байта в структуре по смещениям, а в случае 4-х байтов это в режиме без DBVM одновременно задействуются все 4 hw брейкпоинта, а не 1 hw как сейчас.
     
    Extensions: 
  17. MasterGH
    В общем хорошо взялся за регулярки на Lua!  Всё подряд прогоняю через них, что под руку попадется, любые задачи.
     
    Случайный пример задачи. Пронумеровать список
     
    Тут же написал
     
     
    И получил ответ. В следующий раз только вызывать "EnumerateText([[ текст со строками]])"
     
    Тут в буфер текст улетит и выведет в мессагу. После закрытия мессаги через CTRL+V вставит текст, куда хотим
    Пронумерованные функции — функции работы со строками последней версии Lua 5.3.x из документации
     
    На что стоит обратить внимание при регулярках:
    1. Работа с пробелами и не пробелами: "%s" и "%S"
    2. Работа с символами разделяющие строки и не разделяющими строки: "%с" и "%С"
    3. Захват строк "(.+)", "(.-)", "(.*)", а также без захвата, т.е. пропуск других символов ".+",".-",".*"
    4. Узнать как и какая функция из выше перечисленных работает, какая используется с регуляторами.
     
    Хотим к примеру вывести слово, которое закончится на пробеле (пишу просто "на пробеле" без учета других символов). Это уже "(%w+)", а если хотим второе слово, то это "%W+%w+" (не выводить первое и вывести второе слово) или "%s(%w+)" (после пробела, но чтобы было без пробела, то захватить в круглые скобки), или "^.+%s(%w+)"(начинать с первого символа до пробела и захват до конца слова).
     
    Если писать на CE Lua, то регулярки знать не обязательно. Но, их желательно знать, чтобы читать чужой код и писать свой. Да и вообще это интересно. Очень короткие выражения позволяют решить некоторую задачу за быстрое время. Основные задачи: поиск текста и замена текста.
  18. MasterGH
    Дополненная реальность похоже на спецэффекты в кино, только на экране видим изображение получаемое с видео камеры, которой управляет пользователь. 
     
    Что интересно. Камера, которая есть у многих на телефоне и допустим некоторая программа с API(какой-нибудь дополненной реальности написанная вами) определяет, что происходит на изображении и по этим данным можно
     
    1) определить плоскости реальные в нашем мире
    2) определить положение объектов относительно друг друга в нашем мире
    3) определить уникальные маркеры и изображения
     
    Это было чтение данных, затем идет запись данных. На изображение накладывается поверх другое.
     
    Чтение данных с реального мира и запись данных поверх изображения по данным чтения это основные процессы.
     
    Что меня заинтересовало. Так это, что можно что-то делать в реальности, а камера будет писать программу. Самый простой пример. Берем маркер - бумагу с рисунком. Камера увидела и поставила на нем 3д-дом или светофор. Резко убираем маркер и дом остается в этом месте. Таким образом можно построить виртуальный город. Есть на Ютубе.
     
    Теперь можно взять вместо 3д-дома, 3д-светофоров маркеры для выстраивания алгоритма программы. Таким образом направив камеру можно что-то подхватывать из дополненной реальности, вытаскивать,  размещать таким образом программируя действия без строчки кода.
     
    Берем маркер А и рядом с ним ставим маркер S. Означает, чтобы запомнилось положение макера А в пространстве. Убираем маркер S. Далее ставим маркер R, означает запись движения. Далее перемещаем А на точку2. Убираем маркер R, что означает остановку слежеия за маркеромА. Далее ставим маркер P, который запускает движение 3д объекта связанного с маркером А.
     
    Ну и так далее. Это очень интересно в плане программирования маркерами...
     
    Видео по построению объектов в городе
     
  19. MasterGH
    Для тех кому интересно, вопрос к ним. Какие критерии можно добавить спрашивая оценку плагина?
    Например, по 5-ти бальной шкале спрашивать оценку у пользователей:
     
    Необходимость плагина в Cheat Engine Работает без ошибок                            Понятно как пользоваться Интерфейс плагина Удобство плагина Нравится Простая установка  
    Думаю, прикрутить аналитику прямо в плагины. Там будет как аналитика использования плагина, так и будет опросник выше.
    Ну и пользовательское соглашение об анонимном сборе данных для улучшения качества приложения. Чтобы можно было улучшать только те плагины, которые устанавливают и которыми пользуются.
  20. MasterGH
    Функции:
    1) Три типа данных: float, double, integer
    2)  10 слотов сохранений
    3) Управление горячими клавишами. ctrl+X - где X от 0 до 9 сохраняет позицию, shift + X загружает ранее сохраненную позицию
    4) Озвучивание загрузки или сохранения

    Как пользоваться:
    1. Подключаемся к процессу игры любым способом (хоть вручную, хоть на Lua, чем угодно)
    2. В CE вставляем Lua скрипт
     
    3. Меняем адрес teleport_address = "03D2C6DC"   на тот который нужно.
    Здесь может быть указатель например  -"[[address+XX]+XX]" или через registersymbol() в АА скриптах.
    Не тестировалось если адрес еще невалидный, т.е. не существует в памяти. По идее слоты проинициализируются с нулевыми координатами по умолчанию. Поэтому лучше Lua скрипт запускать в момент существования адреса. Проверка на существование адреса - getAddressSafe(string, local OPTIONAL, shallow OPTIONAL): returns the address of a symbol, or nil if not found. Similar to getAddress when errorOnLookup is false, but returns nil instead. Проверку можно делать по таймеру. Запуск скрипта это последняя строка 
     
    4.Меняем тип данных type_data = 'INTEGER'            -- FLOAT, DOUBLE, INTEGER

    Данный скрипт предоставляется как есть. Сделан для всех пользователей форума и можно использовать его в любых целях: в образовательных, в коммерческих. Если что-то не работает, то придется править вам самим. У меня к сожалению нет времени на оказание помощи. Справочник по луа функциям в файле"celua.txt"
  21. MasterGH

     
    На скриншоте 22 ветви трассеровки от адреса патронов не входя в call-ы до корневого цикла. Корневой цикл определяется, когда поиск происходит более трех секунд и не находит ничего. Вполне хватает этого времени. Буду еще повторно тестить и проверять доходит ли он цикла или надо еще что-то придумывать.
    Желтым выделяется точка, вертикальная полоса ветви и связи с такими же узлами. Узел это адрес выхода из ret
    Внизу ряд счетчиков от 00 до 99. Если более 99 то отсчет заного. Показывает дианамику обращения к ветвям после нахождения корневого цикла
    Есть еще несколько функций, которых не видно на скриншоте — в контекстном меню.
    Анализ можно запустить из окна CE из главной таблицы, выделив адрес и опцию либо на чтение, либо на доступ.
     
    При тестах увидел, что логи неполные. Например, первый кружок это инструкция читающая патроны очень часто. От этой инструкции идут вверх множество вариантов ветвей,а  у меня один вариант — вертикальная полоска с кружками. От первого круга надо сделать ветвление влево и вправо.
     
    Занялся модернизацией этого рисования и оптимизацией. Например, чтобы определить является ли проход по ret, то не нужен дизассемблер. Залез в доки и посмотрел опкоды
     
    function IsRet(address) local value = readBytes(address,1, false) return value == 0xC3 or value == 0xCB or value == 0xC2 or value == 0xCA end Скорость трассеровки должна в несколько раз увеличиться. К сожалению, смогу это узнать, когда перепишу текущий плагин.
    Там были уже сделаны изменения (все еще сырое для публикации плагина, пока не публикую)
     
     
  22. MasterGH
    В архиве два файла. Функции
    1. Контекстное меню. Компактное/ не компактное окно CE
    2. Сохранение и загрузка положения и размера формы CE
    3. Сохранение и загрузка компактного состояния формы или не компактного
     
    Сделано на энтузиазме после написания класса сохранения и загрузки параметров.
    После запуска, CE будет там, где её (CE) закрыли с позицией, размерами и с состоянием "Компактны режим", если последний был включен.
     
    Параметры сохраняются на жесткий диск в файл "..\autorun\userdata.txt"
    CompactView.rar
×
×
  • Создать...

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

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