• Frostbite API (игровой движок)

    Перенесена Справочники
    1
    0 Голоса
    1 Сообщения
    145 Просмотры
    MasterGHM
    API Frostbite API Блоги [Week 7] A Real Game Engine - Isetta Engine
  • CryEngine API (игрвой движок)

    Перенесена Справочники
    1
    0 Голоса
    1 Сообщения
    151 Просмотры
    MasterGHM
    Изучив API, можно управлять иерархией сущностей, сценами, физикой и т.п. в играх созданных на этом движке. Игровой бинарный код будет состоять из функций игрового движка и функций разработчиков игры. Можно управлять сущностями на основе API движка или же функциями разработчиков.
  • UnrealEngine API (игровой движок)

    Перенесена Справочники
    1
    0 Голоса
    1 Сообщения
    147 Просмотры
    MasterGHM
    UnrealEngine - популярный игровой движок с открытым API. Открытое API должно позволить управлять иерархией сущностей (акторы). Т.е. создать сущности, удалять, менять положение в иерархии. Управлять сценами с этими сущностями, физикой, Meshes, эффектами, звуками... Единственное нужно разобраться в этом API, собрать dll модуль на языке программирования и загрузить его в игру... ну, и возможно, управлять этим модулем извне.
  • Windows API

    Прикреплена Перенесена Справочники
    1
    0 Голоса
    1 Сообщения
    782 Просмотры
    MasterGHM
    API Windows - это пользовательские функции для работы с процессами и памятью. Все программы, приложения, сервисы, в том числе и программа CE используют эти функции и даже игры. Функции что-то делают, что-то вызывают, какие-то результаты возвращают. Смотрим справки Win32.chm - справочник Другие ресурсы: Справочник по Windows API Вызов функций Windows API Основы программирования для Win32 API Софт для работы с API: API Monitor: Spy on API Calls and COM Interfaces (Freeware 32-bit and 64-bit Versions!) | rohitab.com https://sematext.com/blog/api-monitoring-tools/[Win32.chm](/assets/uploads/files/1683990989161-win32.chm) Книги: Книга "[RU] Джефри Рихтер Windows для профессионалов. 4 издание.pdf"
  • ASM API

    Прикреплена Перенесена Справочники
    1
    0 Голоса
    1 Сообщения
    771 Просмотры
    MasterGHM
    Опкоды из Intel-ловской документации Instruction_Set_Reference.pdf 64-ia-32-architectures-software-developer-vol-2a-manual.pdf 64-ia-32-architectures-software-developer-vol-2b-manual.pdf
  • CE Auto Assembler API

    Прикреплена Перенесена Справочники
    1
    0 Голоса
    1 Сообщения
    182 Просмотры
    MasterGHM
    Auto Assembler Auto Assembler - Commands - Cheat Engine (описание команд Autoassebler c примерами). Там же вставки C-языка {$CCODE playerbase=RCX newhealth=RBX} int isplayer=*(*int)(playerbase+0xb8); if (isplayer) ​newhealth=100000; else ​newhealth=0; {$ASM} Руководство по C языку (https://www.geeksforgeeks.org/c-programming-language/) Там же вставки Lua языка {$LUACODE playerbase=RCX newhealth=RBX} if readInteger(playerbase+0xb8)==1 then newhealth=100000 else ​newhealth=0 end {$ASM} Руководство по Lua (https://www.lua.org/manual/5.4/) Lua классы в CE (https://wiki.cheatengine.org/index.php?title=Cheat_Engine:Lua)
  • CE Lua API

    Прикреплена Перенесена Справочники
    1
    0 Голоса
    1 Сообщения
    149 Просмотры
    MasterGHM
    CE 7.5.0.7431 (в репозитории файл с кратким описанием API celua.txt, который можно найти рядом с CE) Wiki: Lua - Cheat Engine (содержит более полное описание классов с примерами)
  • Рубрика "Lua код сегодня" №6 (проверка по md5)

    Перенесена Статьи и видео md5 ce lua speak важно обучалка фишки
    1
    0 Голоса
    1 Сообщения
    301 Просмотры
    MasterGHM
    Получить md5 открытого процесса и записать его в MD5_CHEKING вручную \-- Функция для ручного вывода md5 ранее подключенного процесcа. Для установки 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.' or 'Is not supported version.' if not isSupportedVersion then speakEnglish(lineResult, false) messageDialog('Error', lineResult, mtError, mbClose) end end ce_md5.lua md5 - это алгоритм некоторой суммы байтов exe-шника. Позволит точно идентифицировать exe-шник, для которого будет сделана .CT таблица с указателями или сигнатурами. В случае несоответствия будет показан диалог сообщения и звуковое оповещение проговаривания текста ошибки. Будет необходимо проверять md5, чтобы смещения у структур точно не поменялись.
  • CE Lua ColorPicker (скрытый компонент)

    CE Plugins ce plugin ce lua ce components
    6
    1
    0 Голоса
    6 Сообщения
    396 Просмотры
    PitronicP
    значит не мой случай, мне женька только экзешники скинул, а как я понял нужны полностью исходники.
  • Обзор игры STELLARIS

    Перенесена Не решенные Статьи и видео todo обзор игра
    7
    0 Голоса
    7 Сообщения
    418 Просмотры
    MasterGHM
    Ты можешь через CE ставить брейкпоинт. Читать регистр. Писать в него. Отпускать отладку. Память не будет меняться/палится. Но можно,скорее в его,запалить точеи останова. Перезаписывать память кода и данных через драйвер ce разово или по таймеру. В этом случае память может палиться. Тогда пробовать через CE сделать хуки на чтение памяти и возвращать оригинальные байты. погуглить про скрытие процессов, секций памяти, модулей, хуки на функции (чтение памяти, получение списка процессов...). Хук позволит функцию перенаправить на свою, изменить результат и вернуть его. посмотреть про обработку исключений в исхолниках на примере stealthmode плагина в ce
  • Защита Трейнера

    Перенесена Решенные Вопросы, обсуждения и предложения
    95
    1 Голоса
    95 Сообщения
    19k Просмотры
    MasterGHM
    @Pitronic , я не против
  • Глюки се

    Перенесена Решенные Вопросы, обсуждения и предложения
    7
    1
    0 Голоса
    7 Сообщения
    3k Просмотры
    PitronicP
    Решил вопрос радикальным способом. Пере установил винду. Глюков больше нет. Вопрос решён.
  • Телепорт на 10 слотов и на 3 типа данных (float, double, integer)

    Перенесена Не решенные Статьи и видео ce lua телепорт озвучка шаблоны
    8
    0 Голоса
    8 Сообщения
    555 Просмотры
    PitronicP
    У меня не горит, более того пока не делаю телепорт, просто чтоб знать как, спросил. Будет время расскажешь. Только бы не забыл.
  • Собираем ссылки на разные источники

    Прикреплена Перенесена Статьи и видео todo источники
    7
    1
    0 Голоса
    7 Сообщения
    539 Просмотры
    MasterGHM
    Попробуй другой браузер или кеш браузера почистить. Может поможет. Иногда ссылки кешируются и автоматически подставляются неверные.
  • Заметка. Логи брейкпоинта на структуру размером 0x1000

    Перенесена Вопросы, обсуждения и предложения
    1
    2
    0 Голоса
    1 Сообщения
    117 Просмотры
    MasterGHM
    Примечание. Эти логи мне могут понадобиться для группировки инструкций по типу. Например, булевые типы, по чтению. по записи, по смещениям, локальные структуры по смениям и т.п. В структуре по смещению 0x2C0 находится здоровье персонажа. На начало этой структуры и был поставлен брейкпоинт . Ниже будет большой кусок опкодов, который работает со структурой. Log breakpoint on structure 0x1000.txt Можно посмотреть в каком порядке опкоды исполняются и с какими смещениями, насколько далеко они друг от друга. Некоторые смещения рядом с известными смещениями могут заинтересовать. Одинаковые опкоды в определенном порядке, но по разным RIP тоже могут заинтересовать. Switch-case могут заинтересоваь в виде cmp [x]. число. Инструкции чтения из структуры больше интересуют, т.к. они могут более вероятно, на что-то влиять - из них читается и для чего-то это нужно. Причем последовательность инструкций идет в порядке вызова, но RIP всегда уникальный (RIP не дублируются). Здесь RIP, т.к. CE 64 разрядный Если последовательность к данным структуры примерно сохраняется, то можно обратить внимание на обращение к адресам в структуре рядом со здоровьем по смещению 2с0: до обращения к адресу здоровья, во время и после. Я выделил их стрелками. Эти смещения могут быть связаны со здоровьем Интересные моменты могут быть с так называемыми switch-case операциями. Можно пытаться их подменить
  • Поиск в региона памяти модуля

    Перенесена Статьи и видео фишки ce plugin обучалка
    5
    1
    0 Голоса
    5 Сообщения
    329 Просмотры
    PitronicP
    вот доказательство что старым версиям твой плагин нужен будет.
  • функции трейнера открыть игру и добавление адреса в форму.

    Перенесена Не решенные Вопросы, обсуждения и предложения
    1
    1
    0 Голоса
    1 Сообщения
    182 Просмотры
    PitronicP
    Для начала, чтоб было понятно что мне нужно, скриншот ниже. На первом скриншоте видно что можно запустить игру трейнером(Для этого трейнер должен быть в одной папке с игрой). На втором скрншоте окошки где вписываешь значение. Понятно что в форму трейнера добавлены адреса, которые можно в вести в ручную из значение. Я общался с автором трейнер был написан на сишарп. А можно ли в се это реализовать? Кнопка запуска игры, и окошки для значений адресов привязанные к конкретным адресам?
  • CE 6.8 Обзор нового инструмента поиска по структурам

    Перенесена Статьи и видео ce structure блог compare
    8
    2
    0 Голоса
    8 Сообщения
    390 Просмотры
    MasterGHM
    Пользователь @Pitronic написал в CE 6.8 Обзор нового инструмента поиска по структурам: Разрешаю в этой теме всё что в той дополнить Спасибо, за твое разрешение. Мне, кажется, это две разные статьи и лучше в новой теме. @Pitronic публиковать статьи тоже можешь.. Там еще можно добавлять теги и выбирать раздел.
  • Крафт в StarsOne

    Перенесена Статьи и видео unity dnspy блог
    1
    8
    0 Голоса
    1 Сообщения
    148 Просмотры
    MasterGHM
    В оригинале, если нет всех компонентов рецепта, то нельзя скрафтить вещь. Цель: скрафтить без компонетов по нажатию кнопки Игра на Unity и можно пробовать использовать в dnSpy модифицировать файл Assembly-CSharp.dll Открываем файлик и смотрим на классы связанные с крафтом Так находим кнопку, которая создаст указанное количество вещей крафта в CreateItem Задача скрафтить по имеющемуся рецепту любую вещь. Для этого я добавляю проверку количества вещей и удаляю лишний код. Под сполерами оригинальный и модифицированный код Модифицированный код using System; using System.Collections.Generic; using System.Runtime.CompilerServices; using UnityEngine; public partial class Crafting : MonoBehaviour { public void CreateItem(int curCraft, int craftCount) { if (this.timeBreak >= 0.3f) { // Добавили одну вещь крафта if (craftCount == 0) { craftCount = 1; } if (craftCount != 0) { this.succes = true; CraftRecipe component = this.craftObjects[curCraft].GetComponent<CraftRecipe>(); // Здесь удалили код, который должен расходовать вещи из инвентаря // ... if (this.succes) { this.iks = this.craftObjects[curCraft].GetComponent<CraftRecipe>().countCreate * craftCount; for (int m = 0; m < this.craftObjects[curCraft].GetComponent<CraftRecipe>().countCreate * craftCount; m++) { this.emptyCell = Inventory.inv.FindItemForStack(this.craftObjects[curCraft].name); if (this.emptyCell >= 0) { if (Inventory.inv.items[this.emptyCell].stack + this.iks <= Inventory.inv.items[this.emptyCell].maxStack) { Inventory.inv.items[this.emptyCell].stack += this.iks; break; } this.iks -= Inventory.inv.items[this.emptyCell].maxStack - Inventory.inv.items[this.emptyCell].stack; Inventory.inv.items[this.emptyCell].stack = Inventory.inv.items[this.emptyCell].maxStack; } else { this.emptyCell = Inventory.inv.FindEmptyCell(); if (this.emptyCell >= 0) { this.cloneItem = Inventory.inv.CreateItem(this.craftObjects[curCraft]); if (this.cloneItem.maxStack >= this.iks) { this.cloneItem.stack = this.iks; Inventory.inv.items[this.emptyCell] = this.cloneItem; break; } this.cloneItem.stack = this.cloneItem.maxStack; this.iks -= this.cloneItem.maxStack; Inventory.inv.items[this.emptyCell] = this.cloneItem; } else { if (this.craftObjects[curCraft].GetComponent<Item>().maxStack >= this.iks) { PlayerNetwork.inst.CallCmdCreateItem(this.craftObjects[curCraft].name, Inventory.inv.transform.position - Vector3.forward * 2f + FloatingOrigin.offset, Quaternion.identity, this.iks, this.craftObjects[curCraft].GetComponent<Item>().health); break; } PlayerNetwork.inst.CallCmdCreateItem(this.craftObjects[curCraft].name, Inventory.inv.transform.position - Vector3.forward * 2f + FloatingOrigin.offset, Quaternion.identity, this.craftObjects[curCraft].GetComponent<Item>().maxStack, this.craftObjects[curCraft].GetComponent<Item>().health); this.iks -= this.craftObjects[curCraft].GetComponent<Item>().maxStack; } new WaitForEndOfFrame(); } } } } this.timeBreak = 0f; } } } Оригинальный public void CreateItem(int curCraft, int craftCount) { if (this.timeBreak >= 0.3f) { if (craftCount != 0) { this.succes = true; CraftRecipe component = this.craftObjects[curCraft].GetComponent<CraftRecipe>(); int[] array = new int[7]; int[] array2 = new int[7]; for (int i = 0; i < 7; i++) { if (this.succes && component.ingredients[i] != null) { array2[i] = component.countIngredients[i]; if (array2[i] <= 0) { array2[i] = 1; } array2[i] *= craftCount; for (int j = 0; j < Inventory.inv.items.Length; j++) { if (Inventory.inv.items[j] != null && component.ingredients[i].name == Inventory.inv.items[j].prefName) { array[i] += Inventory.inv.items[j].stack; } } if (array[i] < array2[i]) { this.succes = false; } } } if (this.succes) { for (int k = 0; k < 7; k++) { if (component.ingredients[k] != null) { for (int l = 0; l < Inventory.inv.items.Length; l++) { if (Inventory.inv.items[l] != null && array2[k] > 0 && component.ingredients[k].name == Inventory.inv.items[l].prefName) { this.iks = Inventory.inv.items[l].stack; Inventory.inv.items[l].stack -= array2[k]; array2[k] -= this.iks; if (array2[k] <= 0) { break; } } } } } this.iks = this.craftObjects[curCraft].GetComponent<CraftRecipe>().countCreate * craftCount; for (int m = 0; m < this.craftObjects[curCraft].GetComponent<CraftRecipe>().countCreate * craftCount; m++) { this.emptyCell = Inventory.inv.FindItemForStack(this.craftObjects[curCraft].name); if (this.emptyCell >= 0) { if (Inventory.inv.items[this.emptyCell].stack + this.iks <= Inventory.inv.items[this.emptyCell].maxStack) { Inventory.inv.items[this.emptyCell].stack += this.iks; break; } this.iks -= Inventory.inv.items[this.emptyCell].maxStack - Inventory.inv.items[this.emptyCell].stack; Inventory.inv.items[this.emptyCell].stack = Inventory.inv.items[this.emptyCell].maxStack; } else { this.emptyCell = Inventory.inv.FindEmptyCell(); if (this.emptyCell >= 0) { this.cloneItem = Inventory.inv.CreateItem(this.craftObjects[curCraft]); if (this.cloneItem.maxStack >= this.iks) { this.cloneItem.stack = this.iks; Inventory.inv.items[this.emptyCell] = this.cloneItem; break; } this.cloneItem.stack = this.cloneItem.maxStack; this.iks -= this.cloneItem.maxStack; Inventory.inv.items[this.emptyCell] = this.cloneItem; } else { if (this.craftObjects[curCraft].GetComponent<Item>().maxStack >= this.iks) { PlayerNetwork.inst.CallCmdCreateItem(this.craftObjects[curCraft].name, Inventory.inv.transform.position - Vector3.forward * 2f + FloatingOrigin.offset, Quaternion.identity, this.iks, this.craftObjects[curCraft].GetComponent<Item>().health); break; } PlayerNetwork.inst.CallCmdCreateItem(this.craftObjects[curCraft].name, Inventory.inv.transform.position - Vector3.forward * 2f + FloatingOrigin.offset, Quaternion.identity, this.craftObjects[curCraft].GetComponent<Item>().maxStack, this.craftObjects[curCraft].GetComponent<Item>().health); this.iks -= this.craftObjects[curCraft].GetComponent<Item>().maxStack; } new WaitForEndOfFrame(); } } } } this.timeBreak = 0f; } } Изменяем весь класс или метов в этом окне Если выводит ошибки при компяляции, то скачиваем IlSpy и его код вставляем в код в dnSpy. Или качаем DnSpy 3.2.0 или ранее Изменения сохраняем в модуль, запускаем игру и крафтим. Получить все рецепты (не проверял правда, попробуйте если хотите) Вещи не ломаются. Убрать отнятие "здоровья" у вещи
  • CE рисование через дополнительный поток

    Перенесена Статьи и видео ce thread ce lua ce draw ce видео
    1
    0 Голоса
    1 Сообщения
    121 Просмотры
    MasterGHM
    На видео показано рисование через поток и рисование без потока CE Native Thread Когда происходит рисование без потока, то окно нельзя подвинуть, не работает кнопка и даже не возможно работать с Cheat Engine function FilledWithPixels() while true do ::begin:: UDF1.repaint() for x=1,UDF1.Canvas.Width do for y=1,UDF1.Canvas.Height do local min = math.random(1, 0xFFFF) local max = math.random(0xFFFF, 0x00FFFFFF) UDF1.Canvas.SetPixel(x,y, math.random (min, max)) if(needReUpdate) then needReUpdate = false goto begin end end end t.suspend() end end t = createNativeThreadSuspended(FilledWithPixels) t.name = 'New thread 1' needReUpdate = true UDF1 = createForm() UDF1.Width = 400 UDF1.Height = 200 btn = createButton(UDF1) btn.OnClick = function (sender) needReUpdate = true t.resume() end