Гайд Создание лоадера для чита на C++

Статус
В этой теме нельзя размещать новые ответы.
Пользователь форума
Эксперт
Эксперт
Статус
Оффлайн
Регистрация
19 Май 2018
Сообщения
959
Реакции
1,067
Не нашел ни одного гайда как создать лоадер для чита, поэтому решил сделать
В этом гайде будем делать консольный лоадер с авторизацией по логину и паролю через сайт (привязку по HWID придется делать самим по аналогии)

Что понадобится:
  1. Visual Studio с установленными в нее компонентами C++ (у меня 2019)
  2. Мозг (хватит половины)
Установим XorPreProcess:
Пожалуйста, авторизуйтесь для просмотра ссылки.
(не реклама)
Если не желаете регистрироваться на сайте:
Пожалуйста, авторизуйтесь для просмотра ссылки.


Установка:
  1. Средства - Внешние инструменты
  2. Добавить
  3. В название пишем XorPreProcess, команда - путь до файла из архива, аргументы - $(ProjectDir) $(ProjectFileName)
  4. Ставим галочку "Использовать окно вывода"
Должно быть так:
В директорию с проектом VS кидаем файл XorStr.hpp и подключаем его к проекту

Далее открываем свойства решения и ставим набор символов "Многобайтовая кодировка" -
Создаем Main.cpp:

C++:
Expand Collapse Copy
/*
            supported by murkware.xyz
*/
#define _CRT_SECURE_NO_WARNINGS
#include <Windows.h> // WinAPI
#include <Psapi.h>
#include <TlHelp32.h>
#include <urlmon.h> // работа с сетью
#include <WinInet.h> // работа с сетью

#include <iostream>
#include <string>
#include <ctime>
#include <cmath>
#include <comdef.h>
#include <fstream>
using namespace std;

#include "XorStr.hpp" // шифровка строк

#pragma comment(lib, "urlmon.lib") // работа с сетью
#pragma comment(lib, "wininet.lib") // работа с сетью
#pragma comment(lib, "psapi.lib") // работа с сетью

void EncryptString(string& str, string key); // шифровку строк по ключу пишем сами :)

const char* alphabet = "qwertyuiopasdfghjklzxcvbnm0123456789";
Здесь мы подключили все необходимые заголовки и обозначили переменную алфавита

Функции для инжектора (используется LoadLibraryA и вместо CreateRemoteThread используется NtCreateThreadEx):
C++:
Expand Collapse Copy
typedef NTSTATUS(__stdcall* f_NtCreateThreadEx)(HANDLE* pHandle, ACCESS_MASK DesiredAccess, void* pAttr, HANDLE hProc, void* pFunc, void* pArg,
    ULONG Flags, SIZE_T ZeroBits, SIZE_T StackSize, SIZE_T MaxStackSize, void* pAttrListOut);

HANDLE StartRoutine(HANDLE hTargetProc, void* pRoutine, void* pArg)
{
    auto _NtCTE = reinterpret_cast<f_NtCreateThreadEx>(GetProcAddress(GetModuleHandleA("ntdll.dll"), "NtCreateThreadEx"));
    if (!_NtCTE)
        return CreateRemoteThreadEx(hTargetProc, nullptr, 0, reinterpret_cast<LPTHREAD_START_ROUTINE>(pRoutine), pArg, 0, nullptr, nullptr);

    HANDLE hRet = nullptr;
    _NtCTE(&hRet, THREAD_ALL_ACCESS, nullptr, hTargetProc, pRoutine, pArg, 0, 0, 0, 0, nullptr);
    return hRet;
}

int Inject(const char* szDllFile, HANDLE hProc)
{
    if (!hProc)
        return 1;

    ifstream dll(szDllFile);
    if (!dll.is_open())
        return 1;

    auto Len = lstrlenA(szDllFile);

    void* pArg = VirtualAllocEx(hProc, nullptr, Len, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
    if (!pArg)
        return 1;

    if (!WriteProcessMemory(hProc, pArg, szDllFile, Len, nullptr))
    {
        VirtualFreeEx(hProc, pArg, 0, MEM_RELEASE);
        return 1;
    }

    DWORD dwExitCode = 0;
    HANDLE hThread = StartRoutine(hProc, LoadLibraryA, pArg);
    if (!hThread)
    {
        VirtualFreeEx(hProc, pArg, 0, MEM_RELEASE);
        return 1;
    }

    WaitForSingleObject(hThread, INFINITE);
    GetExitCodeThread(hThread, &dwExitCode);
    CloseHandle(hThread);

    VirtualFreeEx(hProc, pArg, 0, MEM_RELEASE);

    if (!dwExitCode)
        return 1;

    return 0;
}
Метод инжекта можете заменить, но этот пока в CS:GO андетект (уже нет)

Функция main:
C++:
Expand Collapse Copy
int main()
{
    setlocale(LC_ALL, "rus"); // ставим русскую локализацию
    srand(time(0)); // обнуляем рандомную генерацию
    SetConsoleTitle("skeet loader");

    string login;
    string pass;
    string key = "          ";

    for (int i = 0; i < 10; i++) // генерируем ключ дешифровки
    {
        key[i] = alphabet[abs(int(rand()) % 36)];
    }

    cout << "Введите логин: ";
    cin >> login;
    EncryptString(login, key); // шифруем логин
    cout << "Введите пароль: ";
    cin >> pass;
    EncryptString(pass, key); // шифруем пароль

    // на стороне сервера данные должны быть расшифрованы по ключу и сравнены с данными БД

    string query = "gamesense.pub/check.php?login=" + login + "&pass=" + pass + "&key=" + key; // адрес нашего запроса

    HINTERNET hInternet = InternetOpen("Agent Name", INTERNET_OPEN_TYPE_PRECONFIG, 0, 0, 0); // инициализируем подключение
    if (!hInternet) { cout << "Ошибка инициализации подключения\n"; system("pause > nul"); InternetCloseHandle(hInternet); return 0; }

    HINTERNET hUrl = InternetOpenUrl(hInternet, query.c_str(), 0, 0, 0, 0); // делаем запрос
    if(!hUrl) { cout << "Ошибка подключения\n"; system("pause > nul"); InternetCloseHandle(hInternet); InternetCloseHandle(hUrl); return 0; }

    char buf[1];
    BOOL result = InternetReadFile(hUrl, LPSTR(buf), 1, 0); // читаем ответ

    if(!result) { cout << "Ошибка получения результата\n"; system("pause > nul"); InternetCloseHandle(hInternet); InternetCloseHandle(hUrl); return 0; }

    // сравниваем результат
    // для положительного ответа должно вывести 1
    if (strcmp((const char*)buf[0], "1")) { cout << "Неверный логин или пароль\n"; system("pause > nul"); InternetCloseHandle(hInternet); InternetCloseHandle(hUrl); return 0; }

    string EndFile = getenv("APPDATA");
    for (int i = 0; i < 12; i++)
    {
        EndFile += alphabet[abs(int(rand()) % 36)];
    }
    EndFile += ".dll";

    cout << "Загрузка Dll\n";

    DeleteUrlCacheEntry("gamesense.pub/skeet.dll"); // очищаем кэш
    // скачиваем dll
    if(URLDownloadToFile(0, "gamesense.pub/skeet.dll", EndFile.c_str(), 0, 0) != S_OK) { cout << "Ошибка загрузки Dll\n"; system("pause > nul"); InternetCloseHandle(hInternet); InternetCloseHandle(hUrl); return 0; }

    cout << "Инжект\n";

    HANDLE hProc = GetProcessByName("csgo.exe");
    if(!hProc || hProc == 0) { cout << "CS:GO не запущена\n"; system("pause > nul"); InternetCloseHandle(hInternet); InternetCloseHandle(hUrl); return 0; }

    if (Inject(EndFile.c_str(), hProc)) { cout << "Ошибка инжекта\n"; system("pause > nul"); InternetCloseHandle(hInternet); InternetCloseHandle(hUrl); return 0; }

    InternetCloseHandle(hInternet);
    InternetCloseHandle(hUrl);

    cout << "Чит запущен, можете играть\n";
    Sleep(60000);

    return 0;
}

В конце вам нужно зашифровать строки:
  1. Оборачиваем каждую строку (все что в кавычках), которую считаете нужной зашифровать, в _xor_
  2. Сохраняем файл
  3. Средства - XorPreProcess
  4. Если где-то подчеркивает красным, то после новой зашифрованной строки добавляем .c_str()

p.s. EncryptString - эту функцию вам нужно сделать самим, чтобы шифровка происходила по ключу и сервер при помощи этого ключа мог расшифровать данные. Также можете скачивать с сайта шифрованную Dll, расшифровывать и инжектить уже ее

После компиляции протектим наш лоадер - https://yougame.biz/threads/24963/

Исходный код проекта -
Пожалуйста, авторизуйтесь для просмотра ссылки.
 
Последнее редактирование:
дефолт LLA?
 
А закрывать соединение не учили ?
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Конечно же веб часть нам не нужна
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
может еще фулл чит проект чтобы только скомпилить и продавать за 250р
Смысла от этого гайда тогда нет нихуя. И смысла от того что ты его выкатил нет. Нахуй коннект к веб части, если её тупо нет?
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Я то смогу, но ты выкатил тему на форуме где куча пастеров, думаешь они смогут?

upd и не все тут веб разрабы
каво, по-твоему, чел должен спунфидить тебя во всем? тебе дали наводку - действуй, но тебе же нужно все готовое. меня иногда поражает такая манера поведения, причем самое интересное, что в основном все готовое хочет получить русня
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
гайд канеш хороший, и хорошо что ты сделал такой гайд так как на форуме и вправду нету подобный гайдов.
но так же согласен с человеком выше плохо что гайд не полный нету привязки по квиду и вебчасти ((
дополни пожалуйста если не трудно )
а так +rep за подобную статью
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
а где это найти
  1. Средства - Внешние инструменты
 
Что понадобится:
  1. Visual Studio с установленными в нее компонентами C++ (у меня 2019)
  2. Мозг (хватит половины)
:fffuuu::fffuuu::fffuuu::fffuuu::fffuuu::fffuuu::fffuuu::fffuuu::fffuuu::fffuuu::fffuuu:


каво, по-твоему, чел должен спунфидить тебя во всем? тебе дали наводку - действуй, но тебе же нужно все готовое. меня иногда поражает такая манера поведения, причем самое интересное, что в основном все готовое хочет получить русня
Если человек взялся кого-то научить, то уже делать нормально, а не "Привет, сегодня мы научимся делать лоадер для чита. Откройте визуалуку, вставте это, ну всё дальше сами я пошел"

гайды придуманы чтобы учиться, а не пастить
Это не гайд, это "слив исходника". Если ты пишешь гайд, то внём должен быть:
1. Описание задачи и метод её реализации в текстовой форме
2. Описание функций которые будут использоваться и их описание
3. Решение задачи в виде кода и возможно пометки

Здесь нету ни одного комментария, думаешь выложив этот код кто-то из новичков поймет что тут написано? А если и поймет, то ему этот пастинг не нужен будет, потому что он уже знает как написать.
C++:
Expand Collapse Copy
typedef NTSTATUS(__stdcall* f_NtCreateThreadEx)(HANDLE* pHandle, ACCESS_MASK DesiredAccess, void* pAttr, HANDLE hProc, void* pFunc, void* pArg,
    ULONG Flags, SIZE_T ZeroBits, SIZE_T StackSize, SIZE_T MaxStackSize, void* pAttrListOut);

HANDLE StartRoutine(HANDLE hTargetProc, void* pRoutine, void* pArg)
{
    auto _NtCTE = reinterpret_cast<f_NtCreateThreadEx>(GetProcAddress(GetModuleHandleA("ntdll.dll"), "NtCreateThreadEx"));
    if (!_NtCTE)
        return CreateRemoteThreadEx(hTargetProc, nullptr, 0, reinterpret_cast<LPTHREAD_START_ROUTINE>(pRoutine), pArg, 0, nullptr, nullptr);

    HANDLE hRet = nullptr;
    _NtCTE(&hRet, THREAD_ALL_ACCESS, nullptr, hTargetProc, pRoutine, pArg, 0, 0, 0, 0, nullptr);
    return hRet;
}

int Inject(const char* szDllFile, HANDLE hProc)
{
    if (!hProc)
        return 1;

    ifstream dll(szDllFile);
    if (!dll.is_open())
        return 1;

    auto Len = lstrlenA(szDllFile);

    void* pArg = VirtualAllocEx(hProc, nullptr, Len, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
    if (!pArg)
        return 1;

    if (!WriteProcessMemory(hProc, pArg, szDllFile, Len, nullptr))
    {
        VirtualFreeEx(hProc, pArg, 0, MEM_RELEASE);
        return 1;
    }

    DWORD dwExitCode = 0;
    HANDLE hThread = StartRoutine(hProc, LoadLibraryA, pArg);
    if (!hThread)
    {
        VirtualFreeEx(hProc, pArg, 0, MEM_RELEASE);
        return 1;
    }

    WaitForSingleObject(hThread, INFINITE);
    GetExitCodeThread(hThread, &dwExitCode);
    CloseHandle(hThread);

    VirtualFreeEx(hProc, pArg, 0, MEM_RELEASE);

    if (!dwExitCode)
        return 1;

    return 0;
}

Отсутствие веб части это фейс палм просто... Если ты не хочешь обьяснять и делаешь это не что бы кому-то помочь, то зачем вообще за это взялся?
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
:fffuuu::fffuuu::fffuuu::fffuuu::fffuuu::fffuuu::fffuuu::fffuuu::fffuuu::fffuuu::fffuuu:



Если человек взялся кого-то научить, то уже делать нормально, а не "Привет, сегодня мы научимся делать лоадер для чита. Откройте визуалуку, вставте это, ну всё дальше сами я пошел"


Это не гайд, это "слив исходника". Если ты пишешь гайд, то внём должен быть:
1. Описание задачи и метод её реализации в текстовой форме
2. Описание функций которые будут использоваться и их описание
3. Решение задачи в виде кода и возможно пометки

Здесь нету ни одного комментария, думаешь выложив этот код кто-то из новичков поймет что тут написано? А если и поймет, то ему этот пастинг не нужен будет, потому что он уже знает как написать.
C++:
Expand Collapse Copy
typedef NTSTATUS(__stdcall* f_NtCreateThreadEx)(HANDLE* pHandle, ACCESS_MASK DesiredAccess, void* pAttr, HANDLE hProc, void* pFunc, void* pArg,
    ULONG Flags, SIZE_T ZeroBits, SIZE_T StackSize, SIZE_T MaxStackSize, void* pAttrListOut);

HANDLE StartRoutine(HANDLE hTargetProc, void* pRoutine, void* pArg)
{
    auto _NtCTE = reinterpret_cast<f_NtCreateThreadEx>(GetProcAddress(GetModuleHandleA("ntdll.dll"), "NtCreateThreadEx"));
    if (!_NtCTE)
        return CreateRemoteThreadEx(hTargetProc, nullptr, 0, reinterpret_cast<LPTHREAD_START_ROUTINE>(pRoutine), pArg, 0, nullptr, nullptr);

    HANDLE hRet = nullptr;
    _NtCTE(&hRet, THREAD_ALL_ACCESS, nullptr, hTargetProc, pRoutine, pArg, 0, 0, 0, 0, nullptr);
    return hRet;
}

int Inject(const char* szDllFile, HANDLE hProc)
{
    if (!hProc)
        return 1;

    ifstream dll(szDllFile);
    if (!dll.is_open())
        return 1;

    auto Len = lstrlenA(szDllFile);

    void* pArg = VirtualAllocEx(hProc, nullptr, Len, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
    if (!pArg)
        return 1;

    if (!WriteProcessMemory(hProc, pArg, szDllFile, Len, nullptr))
    {
        VirtualFreeEx(hProc, pArg, 0, MEM_RELEASE);
        return 1;
    }

    DWORD dwExitCode = 0;
    HANDLE hThread = StartRoutine(hProc, LoadLibraryA, pArg);
    if (!hThread)
    {
        VirtualFreeEx(hProc, pArg, 0, MEM_RELEASE);
        return 1;
    }

    WaitForSingleObject(hThread, INFINITE);
    GetExitCodeThread(hThread, &dwExitCode);
    CloseHandle(hThread);

    VirtualFreeEx(hProc, pArg, 0, MEM_RELEASE);

    if (!dwExitCode)
        return 1;

    return 0;
}

Отсутствие веб части это фейс палм просто... Если ты не хочешь обьяснять и делаешь это не что бы кому-то помочь, то зачем вообще за это взялся?
прям с языка снял
 
Здесь нету ни одного комментария, думаешь выложив этот код кто-то из новичков поймет что тут написано?
а у меня гайд как сделать инжектор? в той части, где идет подключение, есть комментарий практически к каждой функции

Отсутствие веб части это фейс палм просто
в гайде делаю лоадер, ЛОАДЕР БЛЯТЬ, А НЕ ЕБУЧУЮ ВЕБ ЧАСТЬ. ЧЕ ВЫ К НЕЙ ПРИЕБАЛИСЬ ТО ТАК
если бы я в гайде затронул как делать веб часть, то половина посмотревших его людей спастила и все
все хотят только готовое, а не учиться, потом смотрят гайды и жалуются что нет того, другого
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху Снизу