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

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

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


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

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

C++:
/*
            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++:
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++:
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/

Исходный код проекта -
Пожалуйста, авторизуйтесь для просмотра ссылки.
 
Последнее редактирование:
Модератор форума
Модератор
Статус
Оффлайн
Регистрация
2 Дек 2016
Сообщения
2,387
Реакции[?]
1,881
Поинты[?]
36K
А закрывать соединение не учили ?
 
Забаненный
Статус
Оффлайн
Регистрация
8 Май 2019
Сообщения
51
Реакции[?]
10
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Конечно же веб часть нам не нужна
 
Модератор форума
Модератор
Статус
Оффлайн
Регистрация
19 Май 2018
Сообщения
954
Реакции[?]
1,067
Поинты[?]
20K
Забаненный
Статус
Оффлайн
Регистрация
8 Май 2019
Сообщения
51
Реакции[?]
10
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
может еще фулл чит проект чтобы только скомпилить и продавать за 250р
Смысла от этого гайда тогда нет нихуя. И смысла от того что ты его выкатил нет. Нахуй коннект к веб части, если её тупо нет?
 
Модератор форума
Модератор
Статус
Оффлайн
Регистрация
19 Май 2018
Сообщения
954
Реакции[?]
1,067
Поинты[?]
20K
Забаненный
Статус
Оффлайн
Регистрация
8 Май 2019
Сообщения
51
Реакции[?]
10
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Забаненный
Статус
Оффлайн
Регистрация
9 Янв 2019
Сообщения
701
Реакции[?]
295
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Я то смогу, но ты выкатил тему на форуме где куча пастеров, думаешь они смогут?

upd и не все тут веб разрабы
каво, по-твоему, чел должен спунфидить тебя во всем? тебе дали наводку - действуй, но тебе же нужно все готовое. меня иногда поражает такая манера поведения, причем самое интересное, что в основном все готовое хочет получить русня
 
Модератор форума
Модератор
Статус
Оффлайн
Регистрация
19 Май 2018
Сообщения
954
Реакции[?]
1,067
Поинты[?]
20K
HVHLEGEND
Забаненный
Статус
Оффлайн
Регистрация
13 Май 2018
Сообщения
745
Реакции[?]
121
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
гайд канеш хороший, и хорошо что ты сделал такой гайд так как на форуме и вправду нету подобный гайдов.
но так же согласен с человеком выше плохо что гайд не полный нету привязки по квиду и вебчасти ((
дополни пожалуйста если не трудно )
а так +rep за подобную статью
 
Забаненный
Статус
Оффлайн
Регистрация
14 Дек 2018
Сообщения
86
Реакции[?]
3
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
а где это найти
  1. Средства - Внешние инструменты
 
Чувак из постала
Пользователь
Статус
Оффлайн
Регистрация
16 Май 2017
Сообщения
466
Реакции[?]
110
Поинты[?]
0
Что понадобится:
  1. Visual Studio с установленными в нее компонентами C++ (у меня 2019)
  2. Мозг (хватит половины)
:fffuuu::fffuuu::fffuuu::fffuuu::fffuuu::fffuuu::fffuuu::fffuuu::fffuuu::fffuuu::fffuuu:


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

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

Здесь нету ни одного комментария, думаешь выложив этот код кто-то из новичков поймет что тут написано? А если и поймет, то ему этот пастинг не нужен будет, потому что он уже знает как написать.
C++:
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;
}
Отсутствие веб части это фейс палм просто... Если ты не хочешь обьяснять и делаешь это не что бы кому-то помочь, то зачем вообще за это взялся?
 
HVHLEGEND
Забаненный
Статус
Оффлайн
Регистрация
13 Май 2018
Сообщения
745
Реакции[?]
121
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
:fffuuu::fffuuu::fffuuu::fffuuu::fffuuu::fffuuu::fffuuu::fffuuu::fffuuu::fffuuu::fffuuu:



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


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

Здесь нету ни одного комментария, думаешь выложив этот код кто-то из новичков поймет что тут написано? А если и поймет, то ему этот пастинг не нужен будет, потому что он уже знает как написать.
C++:
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;
}
Отсутствие веб части это фейс палм просто... Если ты не хочешь обьяснять и делаешь это не что бы кому-то помочь, то зачем вообще за это взялся?
прям с языка снял
 
Модератор форума
Модератор
Статус
Оффлайн
Регистрация
19 Май 2018
Сообщения
954
Реакции[?]
1,067
Поинты[?]
20K
Здесь нету ни одного комментария, думаешь выложив этот код кто-то из новичков поймет что тут написано?
а у меня гайд как сделать инжектор? в той части, где идет подключение, есть комментарий практически к каждой функции

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