Вопрос Как Заставить правильно работать консоль

  • Автор темы Автор темы folover
  • Дата начала Дата начала
  • 757

folover

Исследователь
Регистрация
03.08.2022
Сообщения
34
C++:
#include <Windows.h>
#include "auth.hpp"
#include <string>
#include "skStr.h"
std::string tm_to_readable_time(tm ctx);
static std::time_t string_to_timet(std::string timestamp);
static std::tm timet_to_tm(time_t timestamp);

using namespace KeyAuth;

std::string name = ""; // application name. right above the blurred text aka the secret on the licenses tab among other tabs
std::string ownerid = ""; // ownerid, found in account settings. click your profile picture on top right of dashboard and then account settings.
std::string secret = ""; // app secret, the blurred text on licenses tab and other tabs
std::string version = "1.0"; // leave alone unless you've changed version on website
std::string url = "https://keyauth.win/api/1.2/"; // change if you're self-hosting
std::string key;
/*
    Video on what ownerid and secret are https://youtu.be/uJ0Umy_C6Fg

    Video on how to add KeyAuth to your own application https://youtu.be/GB4XW_TsHqA

    Video to use Web Loader (control loader from customer panel) https://youtu.be/9-qgmsUUCK4
*/

api KeyAuthApp(name, ownerid, secret, version, url);

int main()
{
    SetConsoleTitleA(skCrypt("Loader"));
    std::cout << skCrypt("\n\n Connecting..");
    KeyAuthApp.init();

    std::cout << skCrypt("\n Enter license: ");
    std::cin >> key;
    KeyAuthApp.license(key);

    if (!KeyAuthApp.data.success)
    {
        std::cout << skCrypt("\n Status: ") << KeyAuthApp.data.message;
        Sleep(1500);
        exit(0);
    }


    std::cout << skCrypt("\n\n App data:");
    std::cout << skCrypt("\n Number of users: ") << KeyAuthApp.data.numUsers;
    std::cout << skCrypt("\n Number of online users: ") << KeyAuthApp.data.numOnlineUsers;
    std::cout << skCrypt("\n Number of keys: ") << KeyAuthApp.data.numKeys;
    std::cout << skCrypt("\n Application Version: ") << KeyAuthApp.data.version;
    std::cout << skCrypt("\n Customer panel link: ") << KeyAuthApp.data.customerPanelLink;
    std::cout << skCrypt("\n Checking session validation status (remove this if causing your loader to be slow)");
    KeyAuthApp.check();
    std::cout << skCrypt("\n Current Session Validation Status: ") << KeyAuthApp.data.message;

    
    
    std::cout << skCrypt("\n User data:");
    std::cout << skCrypt("\n Username: ") << KeyAuthApp.data.username;
    std::cout << skCrypt("\n IP address: ") << KeyAuthApp.data.ip;
    std::cout << skCrypt("\n Hardware-Id: ") << KeyAuthApp.data.hwid;
    std::cout << skCrypt("\n Create date: ") << tm_to_readable_time(timet_to_tm(string_to_timet(KeyAuthApp.data.createdate)));
    std::cout << skCrypt("\n Last login: ") << tm_to_readable_time(timet_to_tm(string_to_timet(KeyAuthApp.data.lastlogin)));
    std::cout << skCrypt("\n Subscription name(s): ");
    std::string subs;
    for (std::string value : KeyAuthApp.data.subscriptions)subs += value + " ";
    std::cout << subs;
    std::cout << skCrypt("\n Subscription expiry: ") << tm_to_readable_time(timet_to_tm(string_to_timet(KeyAuthApp.data.expiry)));
    std::cout << skCrypt("\n Checking session validation status (remove this if causing your loader to be slow)");
    KeyAuthApp.check();
    std::cout << skCrypt("\n Current Session Validation Status: ") << KeyAuthApp.data.message;

    std::cout << skCrypt("\n\n [1] License key only: ");
    Sleep(10000);
    exit(0);
}


BOOL WINAPI DllMain(HMODULE hModule, DWORD fdwReason, LPVOID lpReserved)
{

    if (fdwReason == DLL_PROCESS_ATTACH) {
        DisableThreadLibraryCalls(hModule);
        CloseHandle(CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)main, NULL, 0, NULL));
    }
    return TRUE;
}

std::string tm_to_readable_time(tm ctx) {
    char buffer[80];

    strftime(buffer, sizeof(buffer), "%a %m/%d/%y %H:%M:%S %Z", &ctx);

    return std::string(buffer);
}

static std::time_t string_to_timet(std::string timestamp) {
    auto cv = strtol(timestamp.c_str(), NULL, 10); // long

    return (time_t)cv;
}

static std::tm timet_to_tm(time_t timestamp) {
    std::tm context;

    localtime_s(&context, &timestamp);

    return context;
}


При инжекте в игру консоль запускается с ошибкой память не может быть read, если на выходе получить Example то всё работает нормально а вот с dll проблемы

Добавил вот такой код для старта main

BOOL WINAPI DllMain(HMODULE hModule, DWORD fdwReason, LPVOID lpReserved)
{

if (fdwReason == DLL_PROCESS_ATTACH) {
DisableThreadLibraryCalls(hModule);
CloseHandle(CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)main, NULL, 0, NULL));
}
return TRUE;
}
 
Ну так ты компилируешь исполняемый файл а не динамическую библиотеку поэтому не работает
 
Ну так ты компилируешь исполняемый файл а не динамическую библиотеку поэтому не работает
Для простенькой активации проще инжектор Manual-Map туда подкинуть и загрузку моей dll например с pomf.cat добавить Или можно всё так и код этот поправить? думаю что загрузку dll чекнуть можно на изи не безопасно как то это
 
Для простенькой активации проще инжектор Manual-Map туда подкинуть и загрузку моей dll например с pomf.cat добавить Или можно всё так и код этот поправить? думаю что загрузку dll чекнуть можно на изи не безопасно как то это
Можешь при Attach вывести MessageBox и проверить внедрилась ли она вообще, код правильный я не знаю только что там у тебя выводится в Main

Компилируй код так же под битность игры
 
Можешь при Attach вывести MessageBox и проверить внедрилась ли она вообще, код правильный я не знаю только что там у тебя выводится в Main

Компилируй код так же под битность игры
MessageBox я вывел значит инжект проходит успешно

Мб игру застопить надо, если даже консоль зпуститься без ошибок то запуск игры продолжится нужна пазуа что бы ввести ключь ну и потом старт
 
Последнее редактирование:
C++:
#include <Windows.h>
#include "auth.hpp"
#include <string>
#include "skStr.h"

#include <iostream>
#include <tlhelp32.h>
#include <fstream>
#include <filesystem>
#include "injector.h"
#include <stdio.h>
#include <string>

std::string tm_to_readable_time(tm ctx);
static std::time_t string_to_timet(std::string timestamp);
static std::tm timet_to_tm(time_t timestamp);

using namespace KeyAuth;
using namespace std;

bool IsCorrectTargetArchitecture(HANDLE hProc) {
    BOOL bTarget = FALSE;
    if (!IsWow64Process(hProc, &bTarget)) {
        printf("Can't confirm target process architecture: 0x%X\n", GetLastError());
        return false;
    }

    BOOL bHost = FALSE;
    IsWow64Process(GetCurrentProcess(), &bHost);

    return (bTarget == bHost);
}

DWORD GetProcessIdByName(const wchar_t* name) {
    PROCESSENTRY32 entry;
    entry.dwSize = sizeof(PROCESSENTRY32);

    HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);

    if (Process32First(snapshot, &entry) == TRUE) {
        while (Process32Next(snapshot, &entry) == TRUE) {
            if (_wcsicmp(entry.szExeFile, name) == 0) {
                return entry.th32ProcessID;
            }
        }
    }

    CloseHandle(snapshot);
    return 0;
}

std::string name = ""; // application name. right above the blurred text aka the secret on the licenses tab among other tabs
std::string ownerid = ""; // ownerid, found in account settings. click your profile picture on top right of dashboard and then account settings.
std::string secret = ""; // app secret, the blurred text on licenses tab and other tabs
std::string version = "1.0"; // leave alone unless you've changed version on website
std::string url = "https://keyauth.win/api/1.2/"; // change if you're self-hosting
std::string key;

api KeyAuthApp(name, ownerid, secret, version, url);

int main()
{
    SetConsoleTitleA(skCrypt("Hack_PB"));
    std::cout << skCrypt("\n\n Connecting..");

    KeyAuthApp.init();

    std::cout << skCrypt("\n Enter license: ");
    std::cin >> key;
    KeyAuthApp.license(key);


    if (!KeyAuthApp.data.success)
    {
        std::cout << skCrypt("\n Status: ") << KeyAuthApp.data.message;
        Sleep(1500);
        exit(0);
    }


    std::cout << skCrypt("\n\n App data:");
    std::cout << skCrypt("\n Number of users: ") << KeyAuthApp.data.numUsers;
    std::cout << skCrypt("\n Number of online users: ") << KeyAuthApp.data.numOnlineUsers;
    std::cout << skCrypt("\n Number of keys: ") << KeyAuthApp.data.numKeys;
    std::cout << skCrypt("\n Application Version: ") << KeyAuthApp.data.version;
    std::cout << skCrypt("\n Customer panel link: ") << KeyAuthApp.data.customerPanelLink;
    std::cout << skCrypt("\n Checking session validation status (remove this if causing your loader to be slow)");
    KeyAuthApp.check();
    std::cout << skCrypt("\n Current Session Validation Status: ") << KeyAuthApp.data.message;

    std::cout << skCrypt("\n User data:");
    std::cout << skCrypt("\n Username: ") << KeyAuthApp.data.username;
    std::cout << skCrypt("\n IP address: ") << KeyAuthApp.data.ip;
    std::cout << skCrypt("\n Hardware-Id: ") << KeyAuthApp.data.hwid;
    std::cout << skCrypt("\n Create date: ") << tm_to_readable_time(timet_to_tm(string_to_timet(KeyAuthApp.data.createdate)));
    std::cout << skCrypt("\n Last login: ") << tm_to_readable_time(timet_to_tm(string_to_timet(KeyAuthApp.data.lastlogin)));
    std::cout << skCrypt("\n Subscription name(s): ");
    std::string subs;
    for (std::string value : KeyAuthApp.data.subscriptions)subs += value + " ";
    std::cout << subs;
    std::cout << skCrypt("\n Subscription expiry: ") << tm_to_readable_time(timet_to_tm(string_to_timet(KeyAuthApp.data.expiry)));
    std::cout << skCrypt("\n Checking session validation status (remove this if causing your loader to be slow)");
    KeyAuthApp.check();
    std::cout << skCrypt("\n Current Session Validation Status: ") << KeyAuthApp.data.message;
   
    std::cout << skCrypt("\n\n License key only");

    std::vector<std::uint8_t> rawData = KeyAuthApp.download("Сдесь индентификатор моей длл"); //.dll fileID here

    wchar_t* dllPath;
    DWORD PID = GetProcessIdByName(L"PointBlank.exe"); //Game.exe here


    if (PID == 0) {
        printf("Process not found\n");
        system("pause");
        return -1;
    }

    printf("Process pid: %d\n", PID);
    HANDLE hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, PID);
    if (!hProc) {
        DWORD Err = GetLastError();
        printf("OpenProcess failed: 0x%X\n", Err);
        system("PAUSE");
        return -2;
    }

    if (!IsCorrectTargetArchitecture(hProc)) {
        printf("Invalid Process Architecture.\n");
        CloseHandle(hProc);
        system("PAUSE");
        return -3;
    }

    printf("Mapping...\n");
    if (!ManualMap(hProc, &rawData[0]))
    {
        CloseHandle(hProc);
        printf("Error while mapping.\n");
        system("PAUSE");
        return -4;
    }

    CloseHandle(hProc);
    printf("OK\n");
    return 0;
   
}

std::string tm_to_readable_time(tm ctx) {
    char buffer[80];

    strftime(buffer, sizeof(buffer), "%a %m/%d/%y %H:%M:%S %Z", &ctx);

    return std::string(buffer);
}

static std::time_t string_to_timet(std::string timestamp) {
    auto cv = strtol(timestamp.c_str(), NULL, 10); // long

    return (time_t)cv;
}

static std::tm timet_to_tm(time_t timestamp) {
    std::tm context;

    localtime_s(&context, &timestamp);

    return context;
}

Перетрёс немного код

Ижектится в Тайландскую версию игры а вот в рускую вылетает такая ошибка

https://disk.yandex.ru/i/y3Q9JdiLFDfjYg

Ошибка выделения памяти целевому процессу (например) 0x5
   
Получается такой метод инжекта не подходит для русской версии игры так как система защиты у них разная
 
насильно мил не будешь
 
Назад
Верх Низ