Подкатегории

  • Игровой движок

    2 Темы
    2 Сообщения
    MasterGHM
    В этом разделе находятся темы связанные с игровым движком Unity3d. В основном я буду писать темы по работе с этим движком.
  • Программирование и отладка

    9 Темы
    9 Сообщения
    MasterGHM
    API
  • Программирование плагинов, примеров, инфо

    17 Темы
    55 Сообщения
    MasterGHM
    Вот детальный анализ недочетов текущего подхода, направления для улучшений и инновационные способы интеграции ИИ: --- 1. Что не учли в текущей реализации 1.1 Динамическое изменение структур - Проблема: Игры с procedural generation (например, Starfield) могут менять расположение полей во время выполнения. - Решение: Добавить мониторинг паттернов доступа: function TrackStructureChanges(baseAddr) while true do local newLayout = AnalyzeStructure(baseAddr) CompareLayouts(lastLayout, newLayout) -- Алерт при изменениях sleep(1000) end end 1.2 Мультиплатформенная поддержка - Упущение: Нет оптимизации под ARM (Android/iOS) и консоли (PS5/Xbox). - Исправление: Добавить детектор ABI: function GetPlatformType() if readMemory(0x10000, 4) == 0x7F454C46 then return "ELF" -- Android/Linux elseif readString(0, 4) == "XBOX" then return "XBOX" end end 1.3 Обработка сетевых структур - Пробел: Не анализируются пакеты сетевого протокола, хотя они часто дублируют игровые структуры. - Доработка: Интеграция сниффера пакетов: function HookNetworkPackets() -- Фильтрация пакетов, содержащих координаты игроков PacketSniffer.filter("PlayerPosition", "xx xx ?? ?? xx FF") end --- 2. Ключевые направления для улучшений 2.1 Гибридный статико-динамический анализ - Идея: Комбинировать результаты CE с Ghidra: graph LR CE[Динамический анализ в CE] -->|Экспорт| Ghidra Ghidra[Статический анализ] -->|Импорт паттернов| CE 2.2 Система предсказания смещений - Метод: Использовать статистику обращений для предсказания важных полей: function PredictImportantOffsets() local stats = CollectAccessStats() return { health = stats.mostAccessed[1].offset, ammo = stats.mostWritten[3].offset } end 2.3 Визуализация в 3D - Инновация: Отображение структур как графа в 3D-пространстве (используя Cheat Engine's OpenGL): function Draw3DStructureGraph() for addr, links in pairs(graph) do RenderNode(addr, links, GetStructureColor(addr)) end end --- 3. Интеграция ИИ: конкретные применения 3.1 Классификация типов данных через ML - Подход: Нейросеть анализирует паттерны памяти: # Образец модели PyTorch class TypeClassifier(nn.Module): def forward(self, x): # x: [значения памяти, контекст инструкций] return torch.softmax(self.layers(x), dim=1) # Вероятности типов - Использование в Lua: function AIDetectType(address) local tensor = MemoryToTensor(address, 64) local result = ExecutePyScript("model.predict", tensor) return {"float", "int", "pointer"}[result] end 3.2 Генерация эксплойтов через ИИ - Пример: Автоматический поиск уязвимостей: function FindVulnerabilities() local patterns = AI_GenerateCrashPatterns() for _, pattern in ipairs(patterns) do if TryCorruptMemory(pattern) then LogExploit(pattern) end end end 3.3 NLP для анализа игрового кода - Применение: Автоматическое комментирование структур: function GenerateComments() local code = Disassemble(0x123456, 50) local comment = AI_AnalyzeCode(code) SetComment(0x123456, comment) -- Например: "Рендеринг частиц, цикл из 12 итераций" end --- 4. Практические примеры улучшений 4.1 Для читеров - Авто-определение уязвимостей: -- ИИ ищет паттерны для телепортации local teleportCheat = AI_FindMemoryPattern({ "float x,y,z", "write frequency > 1Hz", "range -1000..1000" }) 4.2 Для моддеров - Генерация SDK для модов: GenerateModSDK({ structures = analyzed_graph, hooks = FindCodeHooks(), api = AI_GenerateAPI() }) 4.3 Для разработчиков - Детектор багов: -- ИИ находит некорректные указатели local bugReports = AI_ScanFor( "dangling pointers", memory_ranges, expected_patterns ) --- 5. Что еще можно улучшить? 5.1 Оптимизация Проблема Решение Медленный поиск Кэширование + параллельные потоки Ложные срабатывания Ансамбли ИИ-моделей 5.2 Безопасность function AntiAntiCheat() -- Маскировка брейкпоинтов под легитимные вызовы HideDebugger({ stealth_mode = "SYSTEM_CALL", fake_patterns = GetNormalTrafficSamples() }) end 5.3 Пользовательский опыт \-- Голосовое управление читами RegisterVoiceCommand("дай бессмертие", function() SetGodMode(true) end) --- Итог: дорожная карта улучшений Срочные доработки (1-2 недели): Динамический трекинг структур ARM/консольная поддержка Среднесрочные (1-3 месяца): Интеграция ИИ для классификации 3D-визуализация Долгосрочные (6+ месяцев): Полный AI-ассистент для реверса Генерация читов через NLP Пример коммита для начала работ: \+ function AI_Integration() { \+ // Добавляем вызов Python ML-модели \+ local result = ExecutePython("predict_type.py", memoryDump) \+ } Готов реализовать любое из этих улучшений в вашем форке. Какое направление наиболее приоритетно?
  • Среды разработки, программы, утилиты и т.п.

    2 Темы
    2 Сообщения
    MasterGHM
    Программа Cheat Engine 7.5 --- Назначение: для создания читов (поиска и изменения игровых значений в памяти и др.) для обучения программированию. Ссылка на сайт для скачивания. Ссылка на официально руководство (только для опытных) Для тех, кто только начал обучаться программированию с помощью Cheat Engine рекомендуется читать темы на этом форуме или искать простые примеры и руководства. Также можно задать вопросы по Cheat Engine здесь на форуме
  • Конспекты, заметки, руководства, описания, faq

    3 Темы
    3 Сообщения
    MasterGHM
    Инфа по совместной работе с гитом. Может быть пригодится кому, а может и нет. Такую систему я использую на работе недавно. Можно совместно работать над одним большим проектом через git-flow. Возможно, кто-то из форумчан тоже использует git flow на работе. git-flow — это набор расширений git предоставляющий высокоуровневые операции над репозиторием для поддержки модели ветвления Vincent Driessen. Кратко. Модель контроля версии построена на 4 ветках master - релизы develop - разработка feature - фичи hotfix - исравления С develop начинается разработка через копирования в ветку feature. Над фичей идет работа, а после завершения feature мержится с develop и feature сразу удаляется. После запланированных изменений develop мержится с master уходя в релиз. Если возникли баги, то от master создается ветвь на hotfix . После фиксов hotfix мержится с master. Доступ к мастер ветки может иметь один человек или его доверенные лица. Ветка Develop открыта для разработчиков. Это значит, что множество разработчиков колдуют в Develop ветке, а мержит изменения с master уже главный разработчик или несколько главных разработчиков. В мастере создаются теги с обозначением версии. Учитывая номер версии МАЖОРНАЯ.МИНОРНАЯ.ПАТЧ, следует увеличивать: МАЖОРНУЮ версию, когда сделаны обратно несовместимые изменения API. МИНОРНУЮ версию, когда вы добавляете новый функционал, не нарушая обратной совместимости. ПАТЧ-версию, когда вы делаете обратно совместимые исправления. Дополнительные обозначения для предрелизных и билд-метаданных возможны как дополнения к МАЖОРНАЯ.МИНОРНАЯ.ПАТЧ формату. git-flow заметки Семантическое версионирование
  • 11 Темы
    17 Сообщения
    MasterGHM
    Шаблон скрипта для проверки MD5 в Cheat Engine с авто-активацией чита Сначала дается краткий сжатый код. function onOpenProcess(processid) reinitializeSymbolhandler() local md5Process = GetMd5Process(processid) PrintMd5Process(process, md5Process) local isSupportedVersion = CheckingMd5CurrentProcess(md5Process) local lineResult = isSupportedVersion and 'Is supported version. Activating cheat...' or 'Is not supported version.' if not isSupportedVersion then speakEnglish(lineResult, false) messageDialog('Error', lineResult, mtError, mbClose) else speakEnglish(lineResult, true) -- Активация простого чита: поиск и заморозка адреса здоровья autoAssemble([[ alloc(newmem,2048) label(code) label(return) "Base.exe"+123456: code: mov [eax],(int)999 return: jmp return newmem: jmp "Base.exe"+123456 nop jmp return ]]) messageDialog('Success', 'Cheat activated for health: 999', mtInformation, mbOK) end end А потом дается объяснение. Все нужно в формате nodebb ce_md5_cheat.lua md5 - это алгоритм хэширования exe-файла, который позволяет точно идентифицировать версию игры или приложения. Это критично для .CT таблиц в Cheat Engine, чтобы избежать ошибок из-за обновлений, меняющих смещения структур памяти. В случае несоответствия MD5 версии показывается диалог ошибки и звуковое оповещение. Если версия поддерживается, скрипт автоматически активирует простой чит (в примере - заморозка здоровья на 999 по смещению "Base.exe"+123456; замените на реальные значения для вашей игры). Обязательно проверяйте MD5 перед использованием таблиц, чтобы смещения структур не сдвинулись из-за патчей! Получить md5 открытого процесса и записать его в MD5_CHEKING вручную \-- Функция для ручного вывода md5 ранее подключенного процесса. Для установки MD5_CHEKING PrintMd5CurrentProcess() Пример проверки md5 с авто-активацией function onOpenProcess(processid) reinitializeSymbolhandler() local md5Process = GetMd5Process(processid) PrintMd5Process(process, md5Process) local isSupportedVersion = CheckingMd5CurrentProcess(md5Process) local lineResult = isSupportedVersion and 'Is supported version. Activating cheat...' or 'Is not supported version.' if not isSupportedVersion then speakEnglish(lineResult, false) messageDialog('Error', lineResult, mtError, mbClose) else speakEnglish(lineResult, true) -- Активация простого чита: поиск и заморозка адреса здоровья autoAssemble([[ alloc(newmem,2048) label(code) label(return) "Base.exe"+123456: code: mov [eax],(int)999 return: jmp return newmem: jmp "Base.exe"+123456 nop jmp return ]]) messageDialog('Success', 'Cheat activated for health: 999', mtInformation, mbOK) end end
  • Cheat Engine и Lua. Старт

    Прикреплена Перенесена ce lua
    1
    0 Голоса
    1 Сообщения
    207 Просмотры
    Нет ответов
  • Создать структуру программно

    ce structure ce lua
    2
    2
    0 Голоса
    2 Сообщения
    89 Просмотры
    MasterGHM
    Решил попробовать написать CE Lua скрипт, который прочесывает структуру и в Dissect data/structures окне создавал бы структуру только со смещениями, с которыми код работает, т.е. читает или пишет. Например, мой персонаж прогуливается по городу, а каждые 200 мс ставится брейкпоинт на смещение +1 до гипотетической N границы структуры (например до 4096). Я не успел сделать определение типа, но смещения внутри структуры получить я успел. Итак, находим начало структуры любой. Запускаем Lua скрипт и просто что-то делаем в игре. Потом вылазит текст с дизассемблированными инструкциями и смещениями. Уже по этим логам можно определить вручную к каким смещением было обращение (адреса по ним мы и будем менять или сравнивать структуры между собой позже) по виду инструкции и соседнему смещению уже примерно можно определить тип данных и их размер Осталось сделать определение типа, а это не так уж долго сделать и осталось взять код из предыдущих записей в блоге формирования структуры в окне dessect data. Так мы получим структуру только с активными смещениями, (а зачем нам пассивные?) и определим в них тип, я надеюсь определим правильно Пример кода, который я использовал addressStructure1 = 0x412E0200 --> адрес начала структуры в любой игре sizeStructure = 100 --> гипототический размер структуры 100 для быстрых поисков, по умолчанию 4096 indexStructure = 0 --> индекс внутри структуры, который будет перемещаться вместе с breakPointAddress breakPointAddress = 0 --> адрес, на который сейчас постален брейкпоинт waitTimeTillBreak = 300 --> частота активности смещеиня resultText = '' --> конкатенация частей текста в этой переменной \-- Функция пытается поставить брейкпоинт на следующий байт в структуре function TryNextSetBreakPointToAddress() debug_removeBreakpoint(breakPointAddress) indexStructure = indexStructure + 1 if indexStructure > sizeStructure then debugTimer.Interval = 1000 debugTimer.Enabled = false debugTimer.destroy() debug_continueFromBreakpoint(co_run) print(resultText) --> вывод результата с завершением отладки return end breakPointAddress = addressStructure1 + indexStructure debug_setBreakpoint(breakPointAddress, 1, bptAccess, bpmDebugRegister) debug_continueFromBreakpoint(co_run) end \-- Любимая функция снятия отладочных данных function debugger_onBreakpoint() -- проверить обращение к структуре prevAddress = getPreviousOpcode(RIP) resultText = resultText..string.format('Offset: + %X : %s', indexStructure, disassemble(prevAddress)) .. '\r\n' TryNextSetBreakPointToAddress() return 1 end \-- Простой таймер debugTimer = createTimer(nil, false) debugTimer.OnTimer = function(timer) TryNextSetBreakPointToAddress() end debugTimer.Interval = waitTimeTillBreak debugTimer.Enabled = true breakPointAddress = addressStructure1 + indexStructure debug_setBreakpoint(breakPointAddress, 1, bptAccess, bpmDebugRegister)
  • Часть2. Lua простые регулярные выражения

    lua regular ce lua
    1
    0 Голоса
    1 Сообщения
    53 Просмотры
    Нет ответов
  • Часть1. Lua простые регулярные выражения

    ce lua regular
    1
    1
    0 Голоса
    1 Сообщения
    120 Просмотры
    Нет ответов
  • Как контролировать включение и выключение скриптов в таблице

    ce lua условие управление
    1
    0 Голоса
    1 Сообщения
    59 Просмотры
    Нет ответов
  • Visual Studio. Топ 10 часто используемых горячих клавиш

    vs hotkey
    1
    0 Голоса
    1 Сообщения
    1k Просмотры
    Нет ответов