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

folover

Исследователь
Сообщения
34
Реакции
2
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;
}
 

Darwin

Команда форума
Администратор
Сообщения
954
Реакции
519
Ну так ты компилируешь исполняемый файл а не динамическую библиотеку поэтому не работает
 

folover

Исследователь
Сообщения
34
Реакции
2
Ну так ты компилируешь исполняемый файл а не динамическую библиотеку поэтому не работает
Для простенькой активации проще инжектор Manual-Map туда подкинуть и загрузку моей dll например с pomf.cat добавить Или можно всё так и код этот поправить? думаю что загрузку dll чекнуть можно на изи не безопасно как то это
 

Darwin

Команда форума
Администратор
Сообщения
954
Реакции
519
Для простенькой активации проще инжектор Manual-Map туда подкинуть и загрузку моей dll например с pomf.cat добавить Или можно всё так и код этот поправить? думаю что загрузку dll чекнуть можно на изи не безопасно как то это
Можешь при Attach вывести MessageBox и проверить внедрилась ли она вообще, код правильный я не знаю только что там у тебя выводится в Main

Компилируй код так же под битность игры
 

folover

Исследователь
Сообщения
34
Реакции
2
Можешь при Attach вывести MessageBox и проверить внедрилась ли она вообще, код правильный я не знаю только что там у тебя выводится в Main

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

Для просмотра скрытого содержимого вы должны авторизироваться или зарегистрироваться



Мб игру застопить надо, если даже консоль зпуститься без ошибок то запуск игры продолжится нужна пазуа что бы ввести ключь ну и потом старт
 
Последнее редактирование:

folover

Исследователь
Сообщения
34
Реакции
2
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
   
Получается такой метод инжекта не подходит для русской версии игры так как система защиты у них разная
 
Верх Низ