Добро пожаловать! Игровой форум WLUX.NET - Игры, Читы, Скрипты, Статьи, Софт, Курсы.

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

Добро пожаловать гость!

Приветствуем вас на нашем форуме! Мы очень рады вас видеть и с большим удовольствием поделимся всей информацией нашего форума!

Мы уважаем своих пользователей и так же ждем от вас приятного общения.

Система наград, ежедневное пополнения тем!

Общайся, получай награды.

Статьи, гайды, софт

У нас вы можете скачать бесплатно читы для игр. Полезные гайды на любые темы и схемы заработка. Есть раздел халявы!

FAQ по форуму

Не понимаю, как и что тут работает у вас?!Как создавать темы, писать сообщения, как получать реакции. Почему не засчитывает сообщения. Все ответы здесь

  • Добро пожаловать на сайт - wlux.net!

    FAQ по форуму

    1. Все сообщения до группы местный проходят модерацию от 1 минуты до 24 часа

    2. Сообщения учитываються в следующих разделах: Читать

    3.Что-бы скачать вложение нужно 2 сообщения.

    4.Личные переписки работают только с Администрацией форума

    5. Запрещено: Просить скрытый текст , спам, реклама, скам, ддос, кардинг и другая чернуха, нарушать любые законы РФ/СНГ = бан аккаунта

    6. Внимание! Мы не удаляем аккаунты с форума! Будьте внимательны ДО регистрации! Как удалить аккаунт на форуме?!

    5.Не понимаю, как и что тут работает у вас?!Как создавать темы, писать сообщения, как получать реакции. Почему не засчитывает сообщения. Все ответы здесь

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

wlux.net Оффлайн

wlux.net

Где волчьи уши, там волчьи зубы.
Команда форума
LV
7
 
20.06.2022
23 845
218
36
Награды
10
Пол
Муж.

Репутация:

  • Автор темы
  • Администратор
  • Модератор
  • Команда форума
  • #1
В этом гайде будем делать консольный лоадер с авторизацией по логину и паролю через сайт (привязку по HWID придется делать самим по аналогии)

Давайте начнём с того, что нам нужен сайт / форум. Я выбрал XorPreProces, ведь там есть удобный установщик.
Установить XenForo:

Пожалуйста, войдите или зерегистрируйтесь, чтобы увидеть скрытый текст.



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

Далее открываем свойства решения и ставим набор символов "Многобайтовая кодировка" -
Создаем Main.cpp:
Код:
/*
            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):
Код:
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 андетект (хз я в неё не играл 2 года...)

Функция main:
Код:
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 - эту функцию вам нужно сделать самим, чтобы шифровка происходила по ключу и сервер при помощи этого ключа мог расшифровать данные.
 

Вложения

  • XorPreProcess.zip
    XorPreProcess.zip
    158,4 КБ · Просмотры: 11
S Оффлайн

slowtema

Участник
LV
0
 
16.09.2024
17
0
7
Награды
1
32

Репутация:

Хороший гайд. Ещё бы привести пример шифрования, чтобы люди велосипед не изобретали. Обычный AES подойдёт, думаю.
 
N Оффлайн

Numenorec

Участник
LV
2
 
28.09.2024
13
0
10
Награды
2
24

Репутация:

Полезная инфо, благодарю. Сохранил
 

Поиск по форуму

shape1
shape2
shape3
shape4
shape7
shape8
Верх