Создаем Internal чит без создания потока и лишнего веса

  • Автор темы Автор темы Arkting
  • Дата начала Дата начала
Забаненный
Забаненный
Статус
Оффлайн
Регистрация
2 Мар 2021
Сообщения
1,087
Реакции
406
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.

В данном гайде я расскажу как избавиться от мусорного веса модуля, и создадим собственный чит без использования WinApi функции CreateThread.

Создаем новый проект
динамической библиотеки .dll
Создаем файл .cpp (назовем его Source) и напишем в нем точку входа.
C++:
Expand Collapse Copy
#include <windows.h> // библиотека из которой возьмем некоторые типы данных (например HINSTANCE / HMODULE)

// Сделаем все в одном файле, чтобы вы не запутались.

// Создаем обычный класс, в котором будет хранится информация игровой структуры Cvars
class netvars
{
public:
    // Изменим Field View для нашего локального игрока (FOV)
    void FieldView()
    {
        *(float*)(nCvars() + 0x4) = 100.f; // прибавляя к адресу структуры его смещение, получаем необходимую для перехвата функцию и меняем ее значение
    }
private: // Используем данный тип доступа, так как нам не пригодятся данные из него использовать вне класса
    netvars* nCvars() { return *(netvars**)0x142182330; } // указатель, хранящий в себе адрес игровой стуктуры Cvars
}; netvars pNetvars; // Создаем переменную класса от которой будем отталкиваться в точке входа, заметьте, не указатель.

bool DllMain(HINSTANCE hDll, unsigned long long dDll, void*)
{
    switch (dDll) // С помощью оператора switch "выбираем" нужный нам параметр для переменной dDll
    {
    case 1: // Именно в case 1 мы и будем работать, ведь #define DLL_PROCESS_ATTACH = 1.
        // Используйте бесконечный цикл, если у вас имеются методы, которые отрабатывают не один раз, (используйте while/for)
        // В нашем случае можно не использовать цикл, фов не исчезнет, отработая 1 раз
        pNetvars.FieldView();
        break;
    }
    return true;
}

Мы только что
избавились от ненужной WINAPI CreateThread, которая висела у нас бы в импортах и MRAC ее бы спалил.


Далее, избавимся от
ненужного веса нашего модуля.

1. Заходим в настройки проекта
2. С.С++ ? Optimization ? Maximum Optimization (Favor size)
3. Code generation ? Security Check ? Disable Security Check
4. Linker ? Manifest file ? Generate Manifest ? NO
5. Linker ? Debugging ? Generate Debug Info ? NO
6. Linker ? Advanced ? EntryPoint ? "Ваше название точки входа"
7. Code generation ? Enable String Pooling ? Yes.


Исходный код / скомпилированный проект я прилагать сюда не буду, все прописано в одном файле, просто скопируйте.

 
Неплохо.
DllMain заменяем на то название, которое указали в п6 " inker ? Advanced ? EntryPoint ? "Ваше название точки входа" ".
Так же необходимые винапи для отрисовки ЕСП лучше брать из игры или использовать касомные.
Вместо своей рисовки мы можем использовать игровой ui.
Плюсы такого решения:
Меньший вес
Нету лишних вызовов winapi
Простота в использовании
Хукайте через present (индекс для dx11: 8)
 
switch (dDll) // С помощью оператора switch "выбираем" нужный нам параметр для переменной dDll
А почему не сделать так?
Код:
Expand Collapse Copy
BOOL APIENTRY DllEntryPoint( const HMODULE hModule, const DWORD dwCallReason,
                             [[maybe_unused]] LPVOID lpReserved ) {

    if ( dwCallReason != DLL_PROCESS_ATTACH )
        return FALSE;
        
    // Code...
}
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
В данном гайде я расскажу как избавиться от мусорного веса модуля, и создадим собственный чит без использования WinApi функции CreateThread.

Создаем новый проект
динамической библиотеки .dll
Создаем файл .cpp (назовем его Source) и напишем в нем точку входа.

C++:
Expand Collapse Copy
#include <windows.h> // библиотека из которой возьмем некоторые типы данных (например HINSTANCE / HMODULE)

// Сделаем все в одном файле, чтобы вы не запутались.

// Создаем обычный класс, в котором будет хранится информация игровой структуры Cvars
class netvars
{
public:
    // Изменим Field View для нашего локального игрока (FOV)
    void FieldView()
    {
        *(float*)(nCvars() + 0x4) = 100.f; // прибавляя к адресу структуры его смещение, получаем необходимую для перехвата функцию и меняем ее значение
    }
private: // Используем данный тип доступа, так как нам не пригодятся данные из него использовать вне класса
    netvars* nCvars() { return *(netvars**)0x142182330; } // указатель, хранящий в себе адрес игровой стуктуры Cvars
}; netvars pNetvars; // Создаем переменную класса от которой будем отталкиваться в точке входа, заметьте, не указатель.

bool DllMain(HINSTANCE hDll, unsigned long long dDll, void*)
{
    switch (dDll) // С помощью оператора switch "выбираем" нужный нам параметр для переменной dDll
    {
    case 1: // Именно в case 1 мы и будем работать, ведь #define DLL_PROCESS_ATTACH = 1.
        // Используйте бесконечный цикл, если у вас имеются методы, которые отрабатывают не один раз, (используйте while/for)
        // В нашем случае можно не использовать цикл, фов не исчезнет, отработая 1 раз
        pNetvars.FieldView();
        break;
    }
    return true;
}

Мы только что избавились от ненужной WINAPI CreateThread, которая висела у нас бы в импортах и MRAC ее бы спалил.


Далее, избавимся от
ненужного веса нашего модуля.

1. Заходим в настройки проекта
2. С.С++ ? Optimization ? Maximum Optimization (Favor size)
3. Code generation ? Security Check ? Disable Security Check
4. Linker ? Manifest file ? Generate Manifest ? NO
5. Linker ? Debugging ? Generate Debug Info ? NO
6. Linker ? Advanced ? EntryPoint ? "Ваше название точки входа"
7. Code generation ? Enable String Pooling ? Yes.


Исходный код / скомпилированный проект я прилагать сюда не буду, все прописано в одном файле, просто скопируйте.

Так если использовать бесконечный цикл (while(true)) игра просто намертво зависает после инжекта...
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Возьми тот же самый Render с игры, и воспроизводи своё меню, на игровой визуализации.
Ну и раз так пошло, то точка входа вообще не нужна, можно и без неё обойтись.
да много разных схем и приколюх, но суть в том - надолго ли это)
 
Мы только что избавились от ненужной WINAPI CreateThread, которая висела у нас бы в импортах и MRAC ее бы спалил.
Импорт не палит в этом нет смысла) Палит вызовы уже из допустим кернел32) Толку ты можешь скрыть импорт но будешь использовать функции из кернел тупо через GetProcAdress и вызывать опять же функцию в кернел) Не кто не сканит импорты античиты проверяют ntdll.dll хукаются функции там и не важно скрыл импорт или нет

Да и при создании потока палит не функцию CreateThread а вызов уже в ntdll типо NtCreateUserThread или как она там а потом NtResumeThread и тут обычно происходит детект.

Но в наше время все античиты используею драйвер в драйвере стоит колбэк на создание нитей потоков и проверка доступа и тд и там происходит детект.

Да и детект в основном на моменте инжекта.
гайд по тому как прописать функцию в dllmain
Полностью поддерживаю)

Мрак научили сканить память если все обойти и заинжектиться беспалева дальше идет скан памяти. И тут дело времени как занесут в базу. Скан происход не постоянно а когда допустим в бою с промежутком от 2-5 мин. И не сразу всю память а кусками по секции.
И тут либо патчить скан в мрак либо использовать ектренел.
Так как при любом инжекте длл не важна как реализована но она в памяти.
А если блокировать этот участок памяти чтоб небыло доступа то чит не будет так же пахать.

Короче для норм андетекта надо патчить скан памяти в мрак
 
Назад
Сверху Снизу