Open Source Xıgncode3 Full Bypass & Emulator & Source

  • Konuyu Başlatan Konuyu Başlatan Hexist
  • Başlangıç tarihi Başlangıç tarihi

Hexist

Banned
Katılım
9 Kas 2024
Mesajlar
592
Beğeniler
233
Yaş
29
İletişim
bu hesabımın farkında değildim konuyu tekrar açıyorum ve tekrar belirtiyorum ,
bir adet dll yazıyoruz gelen recv paketlerini dinleyebilelim , dinlediğimiz recv paketlerini yazdığımız fake x3 ' e yolluyoruz fake x3'e bunu imzalatıp geri gönderiyoruz aynı şekilde sunucuya kendi send fonkumuz ile yolluyoruz ki bizim bilgisayarımızda x3 açık olmasa bile açıkmış ve temizmişiz gibi tepki gösteriyor bu forumda paylaşılan salak salak vanguard bypasslara benzemez hakiki bypasstır :D




dll code :
C++:
#define _CRT_SECURE_NO_WARNINGS

#include <windows.h>
#include <iostream>
#include <cstdint>
#include "hook.h"
#include "memory.h"
#include "pointer.h"
#include "userRun.h"
#include "3d.h"
#include "inv.h"
#include "otopointer.h"
#include <thread>
#include "pipe.h"
#include "otoLogin.h"
#include "OTPGenerator.h"
#include <sstream>
#include <string>
#include <vector>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <optional>
#include <map>
#include <fstream>
#include <chrono>
#include <ctime>
#include "global.h"
#include "mobselect.h"
#include "logic.h" 
#include "Functions.h"
#include "SendSkill.h"
#include <set>
#include <winsock2.h>
#include <ws2tcpip.h>

#pragma comment(lib, "ws2_32.lib")
std::vector<BYTE> g_A0_Buffer;
std::chrono::steady_clock::time_point g_LastPacketTime;
std::mutex g_BufferMutex;
bool g_TimerActive = false;


void YazHataLogu(const std::string& mesaj) {
    std::ofstream dosya("C:\\hata.txt", std::ios::app);
    if (dosya.is_open()) {
        time_t simdi = time(0);
        char* dt = ctime(&simdi);
        if (dt) dt[strlen(dt) - 1] = '\0';

        dosya << "[" << dt << "] " << mesaj << std::endl;
        dosya.close();
    }
}
std::string PaketToHexString(BYTE* pData, int nSize) {
    std::stringstream ss;
    for (int i = 0; i < nSize; i++) {
        ss << std::hex << std::uppercase << std::setw(2) << std::setfill('0') << (int)pData[i] << " ";
    }
    return ss.str();
}



//HOOK SEND
typedef int(__thiscall* CAPISocketSend)(DWORD* socket, BYTE* pData, int nSize);
CAPISocketSend oCAPISocketSend = nullptr;
BYTE g_lastPacket[256];
int  g_lastPacketSize = 0;
bool g_gameStart = false;
bool g_otp = false;
BYTE g_Login[1024]; //tampon
int  g_CapturedF3Size = 0;   
bool g_LoginOK = false;
bool g_bulcanQuest = false;
int __fastcall HookedSendPacketMethod(DWORD* socket, void* Unknown, BYTE* pData, int nSize)
{
    if (pData && nSize > 0 && pData[0] == 0xA0)
    {
        std::string hexStr = PaketToHexString(pData, nSize);
        YazHataLogu("[LEGAL SEND] Size=" + std::to_string(nSize) + " | Data: " + hexStr);

      
        printf("[LEGAL SEND] Size=%d | Data: ", nSize);
        for (int i = 0; i < nSize; i++)
        {
            printf("%02X ", pData[i]);
        }
        printf("\n");
    }
    if (pData && nSize > 300 )
    {
        std::string hexStr = PaketToHexString(pData, nSize);
        YazHataLogu("[LEGAL SEND] Size=" + std::to_string(nSize) + " | Data: " + hexStr);

        
        printf("[LEGAL SEND] Size=%d | Data: ", nSize);
        for (int i = 0; i < nSize; i++)
        {
            printf("%02X ", pData[i]);
        }
        printf("\n");
    }


    return oCAPISocketSend(socket, pData, nSize);
}
const uintptr_t HookSize = 5;
bool IsSendPacketHooked = false;
void HookSendPacketMethod() {


    BYTE* src = reinterpret_cast<BYTE*>(KO_SND_FNC);
    if (!src) {

        return;
    }


    oCAPISocketSend = reinterpret_cast<CAPISocketSend>(
        TrampHook32(reinterpret_cast<BYTE*>(KO_SND_FNC),
            reinterpret_cast<BYTE*>(HookedSendPacketMethod),
            HookSize));

    if (!oCAPISocketSend) {

        return;
    }

    IsSendPacketHooked = true;

}
//end of send hook


//X3 BYPASS
//RECV HOOK
DWORD KO_PTR_GameProcMain_orginalProcessPacketFuncAdr = 0x0;
DWORD KO_PTR_GameProcIntro_orginalProcessPacketFuncAdr = 0x0;
bool IsRecvPacketHooked = false;

typedef BYTE(__fastcall* tProcessPacket)(DWORD* pointer, void* Unknown, DWORD pDataPack, int& iOffset);
inline bool disableDeathAnimation = true;
std::atomic<bool> needSolve(false);
DWORD lastCaptchaRequestTime = 0;



// HOOK RECV PAKET

void SendToGameServer(BYTE* pBuf, int len) {
    DWORD pktPtr = *(DWORD*)KO_PTR_PKT;
    if (pktPtr == 0) return;

    __asm {
        MOV ECX, pktPtr    // Oyunun Socket Nesnesi (this)
        PUSH len           // Boyut
        PUSH pBuf          // Veri
        MOV EAX, KO_SND_FNC
        CALL EAX           // Oyunun orijinal Send fonksiyonu
    }
}
BYTE originalBytes[5];



void HexLog(const char* label, BYTE* data, int size) {
    printf("%s [%d bytes]: ", label, size);
    for (int i = 0; i < size; i++) {
        printf("%02X ", data[i]);
    }
    printf("\n");
}

void LogToConsole(const char* format, ...) {
    char buffer[1024];
    va_list args;
    va_start(args, format);
    vsprintf_s(buffer, format, args);
    printf("%s\n", buffer);
    OutputDebugStringA(buffer);
    va_end(args);
}


// Global veya static kalsın
static SOCKET g_MasterSock = INVALID_SOCKET;

bool EnsureConnection() {
    if (g_MasterSock != INVALID_SOCKET) return true;

    WSADATA wsa; WSAStartup(MAKEWORD(2, 2), &wsa);
    g_MasterSock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    if (g_MasterSock == INVALID_SOCKET) return false;

    int timeout = 5000;
    setsockopt(g_MasterSock, SOL_SOCKET, SO_RCVTIMEO, (char*)&timeout, sizeof(timeout));

    sockaddr_in addr;
    addr.sin_family = AF_INET;
    addr.sin_port = htons(8888);
    inet_pton(AF_INET, "127.0.0.1", &addr.sin_addr);

    if (connect(g_MasterSock, (sockaddr*)&addr, sizeof(addr)) == SOCKET_ERROR) {
        g_MasterSock = INVALID_SOCKET;
        return false;
    }

    // HANDSHAKE GÖNDER
    unsigned char hs[2] = { 0x31, 0x80 };
    send(g_MasterSock, (char*)hs, 2, 0);

    // CEVAP BEKLE
    char dummy[10];
    int r = recv(g_MasterSock, dummy, sizeof(dummy), 0);
    if (r <= 0) {
        YazHataLogu("[ERROR] Handshake cevabi gelmedi, soket kapatiliyor.");
        closesocket(g_MasterSock);
        g_MasterSock = INVALID_SOCKET;
        return false;
    }

    YazHataLogu("[OK] Handshake basarili.");
    return true;
}

std::mutex g_EmuLock;

int GetHBFromMaster(BYTE* pData, int pSize, BYTE* pOutBuffer, int& outSize) {
    if (g_MasterSock == INVALID_SOCKET) {
        WSADATA wsa; WSAStartup(MAKEWORD(2, 2), &wsa);
        g_MasterSock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);


        u_long mode = 1;
        ioctlsocket(g_MasterSock, FIONBIO, &mode);

        sockaddr_in addr = { AF_INET, htons(8888) };
        inet_pton(AF_INET, "127.0.0.1", &addr.sin_addr);
        connect(g_MasterSock, (sockaddr*)&addr, sizeof(addr));
    }

    // 2. Paketi hazırla
    BYTE sBuf[1024];
    sBuf[0] = (pSize >> 24) & 0xFF; sBuf[1] = (pSize >> 16) & 0xFF;
    sBuf[2] = (pSize >> 8) & 0xFF;  sBuf[3] = pSize & 0xFF;
    memcpy(&sBuf[4], pData, pSize);

    send(g_MasterSock, (char*)sBuf, pSize + 4, 0);

 
    return 2;
}

void X3_WorkerThread(BYTE* data, int len) {
    BYTE outBuf[515];
    int outSize = 0;

    int result = GetHBFromMaster(data, len, outBuf, outSize);

    if (result == 1 && outSize > 0) {
        YazHataLogu("[SUCCESS] Emu imzayi uretti, SUNUCUYA BASILIYOR.");

        SendToGameServer(outBuf, outSize);
    }
    else {
        YazHataLogu("[INFO] Emu su an cevap uretmedi (Paket yutuldu).");
    }
}

std::string ToHexString(BYTE* data, int size) {
    std::stringstream ss;
    ss << std::hex << std::setfill('0');
    for (int i = 0; i < size; ++i) {
        ss << std::setw(2) << static_cast<int>(data[i]) << " ";
    }
    return ss.str();
}

BYTE __fastcall HookedProcessPacket(DWORD* pointer, void* Unknown, DWORD pDataPack, int& iOffset) {
    BYTE* pData = *(BYTE**)(pDataPack + 0x8);
    int pSize = *(int*)(pDataPack + 0x4);

    if (pData != nullptr && pSize >= 515 && pData[0] == 0xA0) {

        std::thread([=]() {
            BYTE temp[515];
            memcpy(temp, pData, 515);
            X3_WorkerThread(temp, 515);
            }).detach();
    }


    DWORD jumpBack = KO_PTR_GameProcMain_orginalProcessPacketFuncAdr + 5;
    __asm {
        mov ecx, pointer
        mov edx, Unknown
        push iOffset
        push pDataPack
        jmp jumpBack
    }
}
//end of recv


void HookProcessPacket() {
    if (IsRecvPacketHooked) return;


    DWORD checkInstance = *(DWORD*)0x10F6094;
    if (checkInstance == 0) {
        std::cout << "[WAIT] Oyun henuz hazir degil, bekleniyor..." << std::endl;
        return;
    }

    DWORD targetFunc = 0x00847170;
    KO_PTR_GameProcMain_orginalProcessPacketFuncAdr = targetFunc;

    DWORD newValue = (DWORD)&HookedProcessPacket;
    BYTE jmp[5] = { 0xE9, 0x00, 0x00, 0x00, 0x00 };
    DWORD relativeAddr = newValue - (targetFunc + 5);
    memcpy(&jmp[1], &relativeAddr, 4);

    DWORD oldProtect;
    if (VirtualProtect((LPVOID)targetFunc, 5, PAGE_EXECUTE_READWRITE, &oldProtect)) {
    
        memcpy(originalBytes, (LPVOID)targetFunc, 5);
        
        // Hooku yerleştir
        memcpy((LPVOID)targetFunc, jmp, 5);
        
        VirtualProtect((LPVOID)targetFunc, 5, oldProtect, &oldProtect);
        IsRecvPacketHooked = true;
        std::cout << "[SUCCESS] Hook Aktif: 0x" << std::hex << targetFunc << std::endl;
    }
}

x3 emul code :
C++:
#define _WINSOCK_DEPRECATED_NO_WARNINGS
#include <winsock2.h>
#include <windows.h>
#include <iostream>

#pragma comment(lib, "ws2_32.lib")

typedef int(__stdcall* _XignCode_probe_t)(void* pContext, BYTE* pInput, BYTE* pOutput, unsigned int* pOutSz, unsigned int reserved);

void* g_X3Context = nullptr;
_XignCode_probe_t _XignCode_Feed = nullptr;
_XignCode_probe_t _XignCode_Prepare = nullptr;
_XignCode_probe_t _XignCode_Pull = nullptr;

int main() {
    printf("--- X3 EMU: FINAL FIXED VERSION ---\n");

    HMODULE x3Mod = LoadLibraryA("C:\\NTTGame\\KnightOnlineEn\\XIGNCODE\\x3.xem");
    auto dispatch = (int(__stdcall*)(void**, int))GetProcAddress(x3Mod, (LPCSTR)1);

    dispatch(&g_X3Context, 1);
    ((bool(__stdcall*)(const wchar_t*, const wchar_t*, int))g_X3Context)(L"gA1cjrxctNry", L"C:\\NTTGame\\KnightOnlineEn\\XIGNCODE", 0);

    void* p;
    dispatch(&p, 5); _XignCode_Feed = (_XignCode_probe_t)p;
    dispatch(&p, 4); _XignCode_Prepare = (_XignCode_probe_t)p;
    dispatch(&p, 2); _XignCode_Pull = (_XignCode_probe_t)p;
    dispatch(&p, 3); ((bool(__stdcall*)())p)();

    WSADATA wsa; WSAStartup(MAKEWORD(2, 2), &wsa);
    SOCKET listenSock = socket(AF_INET, SOCK_STREAM, 0);
    sockaddr_in addr = { AF_INET, htons(8888), INADDR_ANY };
    bind(listenSock, (sockaddr*)&addr, sizeof(addr));
    listen(listenSock, 5);

    printf("[OK] Emu hazir. Bekleniyor...\n");

    __declspec(align(16)) BYTE alignedIn[8192];
    __declspec(align(16)) BYTE dummyOut[8192];

    while (true) {
        SOCKET gameSock = accept(listenSock, NULL, NULL);
        if (gameSock == INVALID_SOCKET) continue;
        printf("[CONN] Baglanti geldi.\n");

        while (true) {
            unsigned char buffer[16384];
            int bytes = recv(gameSock, (char*)buffer, sizeof(buffer), 0);
            if (bytes <= 0) break;

      
            if (bytes == 2 && buffer[0] == 0x31) continue;

            for (int i = 0; i + 519 <= bytes; i += 519) {
                memcpy(alignedIn, &buffer[i + 4], 515);

                unsigned int outSz = 4096;
                _XignCode_Feed(g_X3Context, alignedIn, dummyOut, &outSz, 0);

                outSz = 4096;
                _XignCode_Prepare(g_X3Context, alignedIn, dummyOut, &outSz, 0);

                BYTE pullBuf[1024];
                unsigned int pullSz = 1024;
                int res = _XignCode_Pull(g_X3Context, alignedIn, pullBuf, &pullSz, 0);

                if (res == 0 && pullBuf[0] != 0) {
                    printf("[SUCCESS] IMZA URETILDI!\n");
                }
                else {
                    printf("[INFO] Beslendi. (Res: %d)\n", res);
                }
            }
        }
    }
    return 0;
}

 
şunun bi dbd versiyonunu yapta kullanak babacum ya
 
şunun bi dbd versiyonunu yapta kullanak babacum ya
babacum komple kod verdim
C++:
    void* p;
    dispatch(&p, 5); _XignCode_Feed = (_XignCode_probe_t)p;
    dispatch(&p, 4); _XignCode_Prepare = (_XignCode_probe_t)p;
    dispatch(&p, 2); _XignCode_Pull = (_XignCode_probe_t)p;
    dispatch(&p, 3); ((bool(__stdcall*)())p)();

burada olan parametreler x3 ün güncel versionunun gelen veriyi çözmesi işlemesi kabul etmesi ve geri göndermesi ile ilgili aynı kodu istediğin x3 versionunda yada istediğin x3 oyununda deneyebilirsin direk bypasslayacak çünkü zaten var olan x3 kodunu kullanıyoruz , forumda 18 yaşında veletlerin paylaştığı xxx bypass huuu tamamen bypassla karıştırma , burada belli bir asm revers'ü var , aramızda knightçı varsa çıkıp söyleyebilir .d bunun her hangi bir kod olmadığını
 
bu hesabımın farkında değildim konuyu tekrar açıyorum ve tekrar belirtiyorum ,
bir adet dll yazıyoruz gelen recv paketlerini dinleyebilelim , dinlediğimiz recv paketlerini yazdığımız fake x3 ' e yolluyoruz fake x3'e bunu imzalatıp geri gönderiyoruz aynı şekilde sunucuya kendi send fonkumuz ile yolluyoruz ki bizim bilgisayarımızda x3 açık olmasa bile açıkmış ve temizmişiz gibi tepki gösteriyor bu forumda paylaşılan salak salak vanguard bypasslara benzemez hakiki bypasstır :D




dll code :
C++:
#define _CRT_SECURE_NO_WARNINGS

#include <windows.h>
#include <iostream>
#include <cstdint>
#include "hook.h"
#include "memory.h"
#include "pointer.h"
#include "userRun.h"
#include "3d.h"
#include "inv.h"
#include "otopointer.h"
#include <thread>
#include "pipe.h"
#include "otoLogin.h"
#include "OTPGenerator.h"
#include <sstream>
#include <string>
#include <vector>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <optional>
#include <map>
#include <fstream>
#include <chrono>
#include <ctime>
#include "global.h"
#include "mobselect.h"
#include "logic.h"
#include "Functions.h"
#include "SendSkill.h"
#include <set>
#include <winsock2.h>
#include <ws2tcpip.h>

#pragma comment(lib, "ws2_32.lib")
std::vector<BYTE> g_A0_Buffer;
std::chrono::steady_clock::time_point g_LastPacketTime;
std::mutex g_BufferMutex;
bool g_TimerActive = false;


void YazHataLogu(const std::string& mesaj) {
    std::ofstream dosya("C:\\hata.txt", std::ios::app);
    if (dosya.is_open()) {
        time_t simdi = time(0);
        char* dt = ctime(&simdi);
        if (dt) dt[strlen(dt) - 1] = '\0';

        dosya << "[" << dt << "] " << mesaj << std::endl;
        dosya.close();
    }
}
std::string PaketToHexString(BYTE* pData, int nSize) {
    std::stringstream ss;
    for (int i = 0; i < nSize; i++) {
        ss << std::hex << std::uppercase << std::setw(2) << std::setfill('0') << (int)pData[i] << " ";
    }
    return ss.str();
}



//HOOK SEND
typedef int(__thiscall* CAPISocketSend)(DWORD* socket, BYTE* pData, int nSize);
CAPISocketSend oCAPISocketSend = nullptr;
BYTE g_lastPacket[256];
int  g_lastPacketSize = 0;
bool g_gameStart = false;
bool g_otp = false;
BYTE g_Login[1024]; //tampon
int  g_CapturedF3Size = 0;  
bool g_LoginOK = false;
bool g_bulcanQuest = false;
int __fastcall HookedSendPacketMethod(DWORD* socket, void* Unknown, BYTE* pData, int nSize)
{
    if (pData && nSize > 0 && pData[0] == 0xA0)
    {
        std::string hexStr = PaketToHexString(pData, nSize);
        YazHataLogu("[LEGAL SEND] Size=" + std::to_string(nSize) + " | Data: " + hexStr);

     
        printf("[LEGAL SEND] Size=%d | Data: ", nSize);
        for (int i = 0; i < nSize; i++)
        {
            printf("%02X ", pData[i]);
        }
        printf("\n");
    }
    if (pData && nSize > 300 )
    {
        std::string hexStr = PaketToHexString(pData, nSize);
        YazHataLogu("[LEGAL SEND] Size=" + std::to_string(nSize) + " | Data: " + hexStr);

       
        printf("[LEGAL SEND] Size=%d | Data: ", nSize);
        for (int i = 0; i < nSize; i++)
        {
            printf("%02X ", pData[i]);
        }
        printf("\n");
    }


    return oCAPISocketSend(socket, pData, nSize);
}
const uintptr_t HookSize = 5;
bool IsSendPacketHooked = false;
void HookSendPacketMethod() {


    BYTE* src = reinterpret_cast<BYTE*>(KO_SND_FNC);
    if (!src) {

        return;
    }


    oCAPISocketSend = reinterpret_cast<CAPISocketSend>(
        TrampHook32(reinterpret_cast<BYTE*>(KO_SND_FNC),
            reinterpret_cast<BYTE*>(HookedSendPacketMethod),
            HookSize));

    if (!oCAPISocketSend) {

        return;
    }

    IsSendPacketHooked = true;

}
//end of send hook


//X3 BYPASS
//RECV HOOK
DWORD KO_PTR_GameProcMain_orginalProcessPacketFuncAdr = 0x0;
DWORD KO_PTR_GameProcIntro_orginalProcessPacketFuncAdr = 0x0;
bool IsRecvPacketHooked = false;

typedef BYTE(__fastcall* tProcessPacket)(DWORD* pointer, void* Unknown, DWORD pDataPack, int& iOffset);
inline bool disableDeathAnimation = true;
std::atomic<bool> needSolve(false);
DWORD lastCaptchaRequestTime = 0;



// HOOK RECV PAKET

void SendToGameServer(BYTE* pBuf, int len) {
    DWORD pktPtr = *(DWORD*)KO_PTR_PKT;
    if (pktPtr == 0) return;

    __asm {
        MOV ECX, pktPtr    // Oyunun Socket Nesnesi (this)
        PUSH len           // Boyut
        PUSH pBuf          // Veri
        MOV EAX, KO_SND_FNC
        CALL EAX           // Oyunun orijinal Send fonksiyonu
    }
}
BYTE originalBytes[5];



void HexLog(const char* label, BYTE* data, int size) {
    printf("%s [%d bytes]: ", label, size);
    for (int i = 0; i < size; i++) {
        printf("%02X ", data[i]);
    }
    printf("\n");
}

void LogToConsole(const char* format, ...) {
    char buffer[1024];
    va_list args;
    va_start(args, format);
    vsprintf_s(buffer, format, args);
    printf("%s\n", buffer);
    OutputDebugStringA(buffer);
    va_end(args);
}


// Global veya static kalsın
static SOCKET g_MasterSock = INVALID_SOCKET;

bool EnsureConnection() {
    if (g_MasterSock != INVALID_SOCKET) return true;

    WSADATA wsa; WSAStartup(MAKEWORD(2, 2), &wsa);
    g_MasterSock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    if (g_MasterSock == INVALID_SOCKET) return false;

    int timeout = 5000;
    setsockopt(g_MasterSock, SOL_SOCKET, SO_RCVTIMEO, (char*)&timeout, sizeof(timeout));

    sockaddr_in addr;
    addr.sin_family = AF_INET;
    addr.sin_port = htons(8888);
    inet_pton(AF_INET, "127.0.0.1", &addr.sin_addr);

    if (connect(g_MasterSock, (sockaddr*)&addr, sizeof(addr)) == SOCKET_ERROR) {
        g_MasterSock = INVALID_SOCKET;
        return false;
    }

    // HANDSHAKE GÖNDER
    unsigned char hs[2] = { 0x31, 0x80 };
    send(g_MasterSock, (char*)hs, 2, 0);

    // CEVAP BEKLE
    char dummy[10];
    int r = recv(g_MasterSock, dummy, sizeof(dummy), 0);
    if (r <= 0) {
        YazHataLogu("[ERROR] Handshake cevabi gelmedi, soket kapatiliyor.");
        closesocket(g_MasterSock);
        g_MasterSock = INVALID_SOCKET;
        return false;
    }

    YazHataLogu("[OK] Handshake basarili.");
    return true;
}

std::mutex g_EmuLock;

int GetHBFromMaster(BYTE* pData, int pSize, BYTE* pOutBuffer, int& outSize) {
    if (g_MasterSock == INVALID_SOCKET) {
        WSADATA wsa; WSAStartup(MAKEWORD(2, 2), &wsa);
        g_MasterSock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);


        u_long mode = 1;
        ioctlsocket(g_MasterSock, FIONBIO, &mode);

        sockaddr_in addr = { AF_INET, htons(8888) };
        inet_pton(AF_INET, "127.0.0.1", &addr.sin_addr);
        connect(g_MasterSock, (sockaddr*)&addr, sizeof(addr));
    }

    // 2. Paketi hazırla
    BYTE sBuf[1024];
    sBuf[0] = (pSize >> 24) & 0xFF; sBuf[1] = (pSize >> 16) & 0xFF;
    sBuf[2] = (pSize >> 8) & 0xFF;  sBuf[3] = pSize & 0xFF;
    memcpy(&sBuf[4], pData, pSize);

    send(g_MasterSock, (char*)sBuf, pSize + 4, 0);

 
    return 2;
}

void X3_WorkerThread(BYTE* data, int len) {
    BYTE outBuf[515];
    int outSize = 0;

    int result = GetHBFromMaster(data, len, outBuf, outSize);

    if (result == 1 && outSize > 0) {
        YazHataLogu("[SUCCESS] Emu imzayi uretti, SUNUCUYA BASILIYOR.");

        SendToGameServer(outBuf, outSize);
    }
    else {
        YazHataLogu("[INFO] Emu su an cevap uretmedi (Paket yutuldu).");
    }
}

std::string ToHexString(BYTE* data, int size) {
    std::stringstream ss;
    ss << std::hex << std::setfill('0');
    for (int i = 0; i < size; ++i) {
        ss << std::setw(2) << static_cast<int>(data[i]) << " ";
    }
    return ss.str();
}

BYTE __fastcall HookedProcessPacket(DWORD* pointer, void* Unknown, DWORD pDataPack, int& iOffset) {
    BYTE* pData = *(BYTE**)(pDataPack + 0x8);
    int pSize = *(int*)(pDataPack + 0x4);

    if (pData != nullptr && pSize >= 515 && pData[0] == 0xA0) {

        std::thread([=]() {
            BYTE temp[515];
            memcpy(temp, pData, 515);
            X3_WorkerThread(temp, 515);
            }).detach();
    }


    DWORD jumpBack = KO_PTR_GameProcMain_orginalProcessPacketFuncAdr + 5;
    __asm {
        mov ecx, pointer
        mov edx, Unknown
        push iOffset
        push pDataPack
        jmp jumpBack
    }
}
//end of recv


void HookProcessPacket() {
    if (IsRecvPacketHooked) return;


    DWORD checkInstance = *(DWORD*)0x10F6094;
    if (checkInstance == 0) {
        std::cout << "[WAIT] Oyun henuz hazir degil, bekleniyor..." << std::endl;
        return;
    }

    DWORD targetFunc = 0x00847170;
    KO_PTR_GameProcMain_orginalProcessPacketFuncAdr = targetFunc;

    DWORD newValue = (DWORD)&HookedProcessPacket;
    BYTE jmp[5] = { 0xE9, 0x00, 0x00, 0x00, 0x00 };
    DWORD relativeAddr = newValue - (targetFunc + 5);
    memcpy(&jmp[1], &relativeAddr, 4);

    DWORD oldProtect;
    if (VirtualProtect((LPVOID)targetFunc, 5, PAGE_EXECUTE_READWRITE, &oldProtect)) {
   
        memcpy(originalBytes, (LPVOID)targetFunc, 5);
       
        // Hooku yerleştir
        memcpy((LPVOID)targetFunc, jmp, 5);
       
        VirtualProtect((LPVOID)targetFunc, 5, oldProtect, &oldProtect);
        IsRecvPacketHooked = true;
        std::cout << "[SUCCESS] Hook Aktif: 0x" << std::hex << targetFunc << std::endl;
    }
}

x3 emul code :
C++:
#define _WINSOCK_DEPRECATED_NO_WARNINGS
#include <winsock2.h>
#include <windows.h>
#include <iostream>

#pragma comment(lib, "ws2_32.lib")

typedef int(__stdcall* _XignCode_probe_t)(void* pContext, BYTE* pInput, BYTE* pOutput, unsigned int* pOutSz, unsigned int reserved);

void* g_X3Context = nullptr;
_XignCode_probe_t _XignCode_Feed = nullptr;
_XignCode_probe_t _XignCode_Prepare = nullptr;
_XignCode_probe_t _XignCode_Pull = nullptr;

int main() {
    printf("--- X3 EMU: FINAL FIXED VERSION ---\n");

    HMODULE x3Mod = LoadLibraryA("C:\\NTTGame\\KnightOnlineEn\\XIGNCODE\\x3.xem");
    auto dispatch = (int(__stdcall*)(void**, int))GetProcAddress(x3Mod, (LPCSTR)1);

    dispatch(&g_X3Context, 1);
    ((bool(__stdcall*)(const wchar_t*, const wchar_t*, int))g_X3Context)(L"gA1cjrxctNry", L"C:\\NTTGame\\KnightOnlineEn\\XIGNCODE", 0);

    void* p;
    dispatch(&p, 5); _XignCode_Feed = (_XignCode_probe_t)p;
    dispatch(&p, 4); _XignCode_Prepare = (_XignCode_probe_t)p;
    dispatch(&p, 2); _XignCode_Pull = (_XignCode_probe_t)p;
    dispatch(&p, 3); ((bool(__stdcall*)())p)();

    WSADATA wsa; WSAStartup(MAKEWORD(2, 2), &wsa);
    SOCKET listenSock = socket(AF_INET, SOCK_STREAM, 0);
    sockaddr_in addr = { AF_INET, htons(8888), INADDR_ANY };
    bind(listenSock, (sockaddr*)&addr, sizeof(addr));
    listen(listenSock, 5);

    printf("[OK] Emu hazir. Bekleniyor...\n");

    __declspec(align(16)) BYTE alignedIn[8192];
    __declspec(align(16)) BYTE dummyOut[8192];

    while (true) {
        SOCKET gameSock = accept(listenSock, NULL, NULL);
        if (gameSock == INVALID_SOCKET) continue;
        printf("[CONN] Baglanti geldi.\n");

        while (true) {
            unsigned char buffer[16384];
            int bytes = recv(gameSock, (char*)buffer, sizeof(buffer), 0);
            if (bytes <= 0) break;

     
            if (bytes == 2 && buffer[0] == 0x31) continue;

            for (int i = 0; i + 519 <= bytes; i += 519) {
                memcpy(alignedIn, &buffer[i + 4], 515);

                unsigned int outSz = 4096;
                _XignCode_Feed(g_X3Context, alignedIn, dummyOut, &outSz, 0);

                outSz = 4096;
                _XignCode_Prepare(g_X3Context, alignedIn, dummyOut, &outSz, 0);

                BYTE pullBuf[1024];
                unsigned int pullSz = 1024;
                int res = _XignCode_Pull(g_X3Context, alignedIn, pullBuf, &pullSz, 0);

                if (res == 0 && pullBuf[0] != 0) {
                    printf("[SUCCESS] IMZA URETILDI!\n");
                }
                else {
                    printf("[INFO] Beslendi. (Res: %d)\n", res);
                }
            }
        }
    }
    return 0;
}

valo?
 
bu hesabımın farkında değildim konuyu tekrar açıyorum ve tekrar belirtiyorum ,
bir adet dll yazıyoruz gelen recv paketlerini dinleyebilelim , dinlediğimiz recv paketlerini yazdığımız fake x3 ' e yolluyoruz fake x3'e bunu imzalatıp geri gönderiyoruz aynı şekilde sunucuya kendi send fonkumuz ile yolluyoruz ki bizim bilgisayarımızda x3 açık olmasa bile açıkmış ve temizmişiz gibi tepki gösteriyor bu forumda paylaşılan salak salak vanguard bypasslara benzemez hakiki bypasstır :D




dll code :
C++:
#define _CRT_SECURE_NO_WARNINGS

#include <windows.h>
#include <iostream>
#include <cstdint>
#include "hook.h"
#include "memory.h"
#include "pointer.h"
#include "userRun.h"
#include "3d.h"
#include "inv.h"
#include "otopointer.h"
#include <thread>
#include "pipe.h"
#include "otoLogin.h"
#include "OTPGenerator.h"
#include <sstream>
#include <string>
#include <vector>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <optional>
#include <map>
#include <fstream>
#include <chrono>
#include <ctime>
#include "global.h"
#include "mobselect.h"
#include "logic.h"
#include "Functions.h"
#include "SendSkill.h"
#include <set>
#include <winsock2.h>
#include <ws2tcpip.h>

#pragma comment(lib, "ws2_32.lib")
std::vector<BYTE> g_A0_Buffer;
std::chrono::steady_clock::time_point g_LastPacketTime;
std::mutex g_BufferMutex;
bool g_TimerActive = false;


void YazHataLogu(const std::string& mesaj) {
    std::ofstream dosya("C:\\hata.txt", std::ios::app);
    if (dosya.is_open()) {
        time_t simdi = time(0);
        char* dt = ctime(&simdi);
        if (dt) dt[strlen(dt) - 1] = '\0';

        dosya << "[" << dt << "] " << mesaj << std::endl;
        dosya.close();
    }
}
std::string PaketToHexString(BYTE* pData, int nSize) {
    std::stringstream ss;
    for (int i = 0; i < nSize; i++) {
        ss << std::hex << std::uppercase << std::setw(2) << std::setfill('0') << (int)pData[i] << " ";
    }
    return ss.str();
}



//HOOK SEND
typedef int(__thiscall* CAPISocketSend)(DWORD* socket, BYTE* pData, int nSize);
CAPISocketSend oCAPISocketSend = nullptr;
BYTE g_lastPacket[256];
int  g_lastPacketSize = 0;
bool g_gameStart = false;
bool g_otp = false;
BYTE g_Login[1024]; //tampon
int  g_CapturedF3Size = 0;  
bool g_LoginOK = false;
bool g_bulcanQuest = false;
int __fastcall HookedSendPacketMethod(DWORD* socket, void* Unknown, BYTE* pData, int nSize)
{
    if (pData && nSize > 0 && pData[0] == 0xA0)
    {
        std::string hexStr = PaketToHexString(pData, nSize);
        YazHataLogu("[LEGAL SEND] Size=" + std::to_string(nSize) + " | Data: " + hexStr);

     
        printf("[LEGAL SEND] Size=%d | Data: ", nSize);
        for (int i = 0; i < nSize; i++)
        {
            printf("%02X ", pData[i]);
        }
        printf("\n");
    }
    if (pData && nSize > 300 )
    {
        std::string hexStr = PaketToHexString(pData, nSize);
        YazHataLogu("[LEGAL SEND] Size=" + std::to_string(nSize) + " | Data: " + hexStr);

       
        printf("[LEGAL SEND] Size=%d | Data: ", nSize);
        for (int i = 0; i < nSize; i++)
        {
            printf("%02X ", pData[i]);
        }
        printf("\n");
    }


    return oCAPISocketSend(socket, pData, nSize);
}
const uintptr_t HookSize = 5;
bool IsSendPacketHooked = false;
void HookSendPacketMethod() {


    BYTE* src = reinterpret_cast<BYTE*>(KO_SND_FNC);
    if (!src) {

        return;
    }


    oCAPISocketSend = reinterpret_cast<CAPISocketSend>(
        TrampHook32(reinterpret_cast<BYTE*>(KO_SND_FNC),
            reinterpret_cast<BYTE*>(HookedSendPacketMethod),
            HookSize));

    if (!oCAPISocketSend) {

        return;
    }

    IsSendPacketHooked = true;

}
//end of send hook


//X3 BYPASS
//RECV HOOK
DWORD KO_PTR_GameProcMain_orginalProcessPacketFuncAdr = 0x0;
DWORD KO_PTR_GameProcIntro_orginalProcessPacketFuncAdr = 0x0;
bool IsRecvPacketHooked = false;

typedef BYTE(__fastcall* tProcessPacket)(DWORD* pointer, void* Unknown, DWORD pDataPack, int& iOffset);
inline bool disableDeathAnimation = true;
std::atomic<bool> needSolve(false);
DWORD lastCaptchaRequestTime = 0;



// HOOK RECV PAKET

void SendToGameServer(BYTE* pBuf, int len) {
    DWORD pktPtr = *(DWORD*)KO_PTR_PKT;
    if (pktPtr == 0) return;

    __asm {
        MOV ECX, pktPtr    // Oyunun Socket Nesnesi (this)
        PUSH len           // Boyut
        PUSH pBuf          // Veri
        MOV EAX, KO_SND_FNC
        CALL EAX           // Oyunun orijinal Send fonksiyonu
    }
}
BYTE originalBytes[5];



void HexLog(const char* label, BYTE* data, int size) {
    printf("%s [%d bytes]: ", label, size);
    for (int i = 0; i < size; i++) {
        printf("%02X ", data[i]);
    }
    printf("\n");
}

void LogToConsole(const char* format, ...) {
    char buffer[1024];
    va_list args;
    va_start(args, format);
    vsprintf_s(buffer, format, args);
    printf("%s\n", buffer);
    OutputDebugStringA(buffer);
    va_end(args);
}


// Global veya static kalsın
static SOCKET g_MasterSock = INVALID_SOCKET;

bool EnsureConnection() {
    if (g_MasterSock != INVALID_SOCKET) return true;

    WSADATA wsa; WSAStartup(MAKEWORD(2, 2), &wsa);
    g_MasterSock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    if (g_MasterSock == INVALID_SOCKET) return false;

    int timeout = 5000;
    setsockopt(g_MasterSock, SOL_SOCKET, SO_RCVTIMEO, (char*)&timeout, sizeof(timeout));

    sockaddr_in addr;
    addr.sin_family = AF_INET;
    addr.sin_port = htons(8888);
    inet_pton(AF_INET, "127.0.0.1", &addr.sin_addr);

    if (connect(g_MasterSock, (sockaddr*)&addr, sizeof(addr)) == SOCKET_ERROR) {
        g_MasterSock = INVALID_SOCKET;
        return false;
    }

    // HANDSHAKE GÖNDER
    unsigned char hs[2] = { 0x31, 0x80 };
    send(g_MasterSock, (char*)hs, 2, 0);

    // CEVAP BEKLE
    char dummy[10];
    int r = recv(g_MasterSock, dummy, sizeof(dummy), 0);
    if (r <= 0) {
        YazHataLogu("[ERROR] Handshake cevabi gelmedi, soket kapatiliyor.");
        closesocket(g_MasterSock);
        g_MasterSock = INVALID_SOCKET;
        return false;
    }

    YazHataLogu("[OK] Handshake basarili.");
    return true;
}

std::mutex g_EmuLock;

int GetHBFromMaster(BYTE* pData, int pSize, BYTE* pOutBuffer, int& outSize) {
    if (g_MasterSock == INVALID_SOCKET) {
        WSADATA wsa; WSAStartup(MAKEWORD(2, 2), &wsa);
        g_MasterSock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);


        u_long mode = 1;
        ioctlsocket(g_MasterSock, FIONBIO, &mode);

        sockaddr_in addr = { AF_INET, htons(8888) };
        inet_pton(AF_INET, "127.0.0.1", &addr.sin_addr);
        connect(g_MasterSock, (sockaddr*)&addr, sizeof(addr));
    }

    // 2. Paketi hazırla
    BYTE sBuf[1024];
    sBuf[0] = (pSize >> 24) & 0xFF; sBuf[1] = (pSize >> 16) & 0xFF;
    sBuf[2] = (pSize >> 8) & 0xFF;  sBuf[3] = pSize & 0xFF;
    memcpy(&sBuf[4], pData, pSize);

    send(g_MasterSock, (char*)sBuf, pSize + 4, 0);

 
    return 2;
}

void X3_WorkerThread(BYTE* data, int len) {
    BYTE outBuf[515];
    int outSize = 0;

    int result = GetHBFromMaster(data, len, outBuf, outSize);

    if (result == 1 && outSize > 0) {
        YazHataLogu("[SUCCESS] Emu imzayi uretti, SUNUCUYA BASILIYOR.");

        SendToGameServer(outBuf, outSize);
    }
    else {
        YazHataLogu("[INFO] Emu su an cevap uretmedi (Paket yutuldu).");
    }
}

std::string ToHexString(BYTE* data, int size) {
    std::stringstream ss;
    ss << std::hex << std::setfill('0');
    for (int i = 0; i < size; ++i) {
        ss << std::setw(2) << static_cast<int>(data[i]) << " ";
    }
    return ss.str();
}

BYTE __fastcall HookedProcessPacket(DWORD* pointer, void* Unknown, DWORD pDataPack, int& iOffset) {
    BYTE* pData = *(BYTE**)(pDataPack + 0x8);
    int pSize = *(int*)(pDataPack + 0x4);

    if (pData != nullptr && pSize >= 515 && pData[0] == 0xA0) {

        std::thread([=]() {
            BYTE temp[515];
            memcpy(temp, pData, 515);
            X3_WorkerThread(temp, 515);
            }).detach();
    }


    DWORD jumpBack = KO_PTR_GameProcMain_orginalProcessPacketFuncAdr + 5;
    __asm {
        mov ecx, pointer
        mov edx, Unknown
        push iOffset
        push pDataPack
        jmp jumpBack
    }
}
//end of recv


void HookProcessPacket() {
    if (IsRecvPacketHooked) return;


    DWORD checkInstance = *(DWORD*)0x10F6094;
    if (checkInstance == 0) {
        std::cout << "[WAIT] Oyun henuz hazir degil, bekleniyor..." << std::endl;
        return;
    }

    DWORD targetFunc = 0x00847170;
    KO_PTR_GameProcMain_orginalProcessPacketFuncAdr = targetFunc;

    DWORD newValue = (DWORD)&HookedProcessPacket;
    BYTE jmp[5] = { 0xE9, 0x00, 0x00, 0x00, 0x00 };
    DWORD relativeAddr = newValue - (targetFunc + 5);
    memcpy(&jmp[1], &relativeAddr, 4);

    DWORD oldProtect;
    if (VirtualProtect((LPVOID)targetFunc, 5, PAGE_EXECUTE_READWRITE, &oldProtect)) {
   
        memcpy(originalBytes, (LPVOID)targetFunc, 5);
       
        // Hooku yerleştir
        memcpy((LPVOID)targetFunc, jmp, 5);
       
        VirtualProtect((LPVOID)targetFunc, 5, oldProtect, &oldProtect);
        IsRecvPacketHooked = true;
        std::cout << "[SUCCESS] Hook Aktif: 0x" << std::hex << targetFunc << std::endl;
    }
}

x3 emul code :
C++:
#define _WINSOCK_DEPRECATED_NO_WARNINGS
#include <winsock2.h>
#include <windows.h>
#include <iostream>

#pragma comment(lib, "ws2_32.lib")

typedef int(__stdcall* _XignCode_probe_t)(void* pContext, BYTE* pInput, BYTE* pOutput, unsigned int* pOutSz, unsigned int reserved);

void* g_X3Context = nullptr;
_XignCode_probe_t _XignCode_Feed = nullptr;
_XignCode_probe_t _XignCode_Prepare = nullptr;
_XignCode_probe_t _XignCode_Pull = nullptr;

int main() {
    printf("--- X3 EMU: FINAL FIXED VERSION ---\n");

    HMODULE x3Mod = LoadLibraryA("C:\\NTTGame\\KnightOnlineEn\\XIGNCODE\\x3.xem");
    auto dispatch = (int(__stdcall*)(void**, int))GetProcAddress(x3Mod, (LPCSTR)1);

    dispatch(&g_X3Context, 1);
    ((bool(__stdcall*)(const wchar_t*, const wchar_t*, int))g_X3Context)(L"gA1cjrxctNry", L"C:\\NTTGame\\KnightOnlineEn\\XIGNCODE", 0);

    void* p;
    dispatch(&p, 5); _XignCode_Feed = (_XignCode_probe_t)p;
    dispatch(&p, 4); _XignCode_Prepare = (_XignCode_probe_t)p;
    dispatch(&p, 2); _XignCode_Pull = (_XignCode_probe_t)p;
    dispatch(&p, 3); ((bool(__stdcall*)())p)();

    WSADATA wsa; WSAStartup(MAKEWORD(2, 2), &wsa);
    SOCKET listenSock = socket(AF_INET, SOCK_STREAM, 0);
    sockaddr_in addr = { AF_INET, htons(8888), INADDR_ANY };
    bind(listenSock, (sockaddr*)&addr, sizeof(addr));
    listen(listenSock, 5);

    printf("[OK] Emu hazir. Bekleniyor...\n");

    __declspec(align(16)) BYTE alignedIn[8192];
    __declspec(align(16)) BYTE dummyOut[8192];

    while (true) {
        SOCKET gameSock = accept(listenSock, NULL, NULL);
        if (gameSock == INVALID_SOCKET) continue;
        printf("[CONN] Baglanti geldi.\n");

        while (true) {
            unsigned char buffer[16384];
            int bytes = recv(gameSock, (char*)buffer, sizeof(buffer), 0);
            if (bytes <= 0) break;

     
            if (bytes == 2 && buffer[0] == 0x31) continue;

            for (int i = 0; i + 519 <= bytes; i += 519) {
                memcpy(alignedIn, &buffer[i + 4], 515);

                unsigned int outSz = 4096;
                _XignCode_Feed(g_X3Context, alignedIn, dummyOut, &outSz, 0);

                outSz = 4096;
                _XignCode_Prepare(g_X3Context, alignedIn, dummyOut, &outSz, 0);

                BYTE pullBuf[1024];
                unsigned int pullSz = 1024;
                int res = _XignCode_Pull(g_X3Context, alignedIn, pullBuf, &pullSz, 0);

                if (res == 0 && pullBuf[0] != 0) {
                    printf("[SUCCESS] IMZA URETILDI!\n");
                }
                else {
                    printf("[INFO] Beslendi. (Res: %d)\n", res);
                }
            }
        }
    }
    return 0;
}

Çok güzel bir çalışma olmuş.
Anlayan elbette vardır ama anlamayan için söylüyorum normalde para ile bile zor bulunacak kod bu.
 
koxp ile deneme şansın oldumu hiç, minark falan koxp dolu bi yan bilgisayarlardan multi client yapmayı düşünüyorum bende, bazı bypasslarda x3 error atıyordu oyundayken.
 
Kodlar çok dağınık temize cekmemisim projeyi içinde 5 farklı l0g alma fonku var yeni gördüm ayrıca ilgilenenler için recv ve send hookta var içerisinde geçen hafta guncelledim . X3 bu aralar 3 günde bir ara patch verip guncelliyor kendini bu haller oldu bunlara
 
bu hesabımın farkında değildim konuyu tekrar açıyorum ve tekrar belirtiyorum ,
bir adet dll yazıyoruz gelen recv paketlerini dinleyebilelim , dinlediğimiz recv paketlerini yazdığımız fake x3 ' e yolluyoruz fake x3'e bunu imzalatıp geri gönderiyoruz aynı şekilde sunucuya kendi send fonkumuz ile yolluyoruz ki bizim bilgisayarımızda x3 açık olmasa bile açıkmış ve temizmişiz gibi tepki gösteriyor bu forumda paylaşılan salak salak vanguard bypasslara benzemez hakiki bypasstır :D




dll code :
C++:
#define _CRT_SECURE_NO_WARNINGS

#include <windows.h>
#include <iostream>
#include <cstdint>
#include "hook.h"
#include "memory.h"
#include "pointer.h"
#include "userRun.h"
#include "3d.h"
#include "inv.h"
#include "otopointer.h"
#include <thread>
#include "pipe.h"
#include "otoLogin.h"
#include "OTPGenerator.h"
#include <sstream>
#include <string>
#include <vector>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <optional>
#include <map>
#include <fstream>
#include <chrono>
#include <ctime>
#include "global.h"
#include "mobselect.h"
#include "logic.h"
#include "Functions.h"
#include "SendSkill.h"
#include <set>
#include <winsock2.h>
#include <ws2tcpip.h>

#pragma comment(lib, "ws2_32.lib")
std::vector<BYTE> g_A0_Buffer;
std::chrono::steady_clock::time_point g_LastPacketTime;
std::mutex g_BufferMutex;
bool g_TimerActive = false;


void YazHataLogu(const std::string& mesaj) {
    std::ofstream dosya("C:\\hata.txt", std::ios::app);
    if (dosya.is_open()) {
        time_t simdi = time(0);
        char* dt = ctime(&simdi);
        if (dt) dt[strlen(dt) - 1] = '\0';

        dosya << "[" << dt << "] " << mesaj << std::endl;
        dosya.close();
    }
}
std::string PaketToHexString(BYTE* pData, int nSize) {
    std::stringstream ss;
    for (int i = 0; i < nSize; i++) {
        ss << std::hex << std::uppercase << std::setw(2) << std::setfill('0') << (int)pData[i] << " ";
    }
    return ss.str();
}



//HOOK SEND
typedef int(__thiscall* CAPISocketSend)(DWORD* socket, BYTE* pData, int nSize);
CAPISocketSend oCAPISocketSend = nullptr;
BYTE g_lastPacket[256];
int  g_lastPacketSize = 0;
bool g_gameStart = false;
bool g_otp = false;
BYTE g_Login[1024]; //tampon
int  g_CapturedF3Size = 0;  
bool g_LoginOK = false;
bool g_bulcanQuest = false;
int __fastcall HookedSendPacketMethod(DWORD* socket, void* Unknown, BYTE* pData, int nSize)
{
    if (pData && nSize > 0 && pData[0] == 0xA0)
    {
        std::string hexStr = PaketToHexString(pData, nSize);
        YazHataLogu("[LEGAL SEND] Size=" + std::to_string(nSize) + " | Data: " + hexStr);

     
        printf("[LEGAL SEND] Size=%d | Data: ", nSize);
        for (int i = 0; i < nSize; i++)
        {
            printf("%02X ", pData[i]);
        }
        printf("\n");
    }
    if (pData && nSize > 300 )
    {
        std::string hexStr = PaketToHexString(pData, nSize);
        YazHataLogu("[LEGAL SEND] Size=" + std::to_string(nSize) + " | Data: " + hexStr);

       
        printf("[LEGAL SEND] Size=%d | Data: ", nSize);
        for (int i = 0; i < nSize; i++)
        {
            printf("%02X ", pData[i]);
        }
        printf("\n");
    }


    return oCAPISocketSend(socket, pData, nSize);
}
const uintptr_t HookSize = 5;
bool IsSendPacketHooked = false;
void HookSendPacketMethod() {


    BYTE* src = reinterpret_cast<BYTE*>(KO_SND_FNC);
    if (!src) {

        return;
    }


    oCAPISocketSend = reinterpret_cast<CAPISocketSend>(
        TrampHook32(reinterpret_cast<BYTE*>(KO_SND_FNC),
            reinterpret_cast<BYTE*>(HookedSendPacketMethod),
            HookSize));

    if (!oCAPISocketSend) {

        return;
    }

    IsSendPacketHooked = true;

}
//end of send hook


//X3 BYPASS
//RECV HOOK
DWORD KO_PTR_GameProcMain_orginalProcessPacketFuncAdr = 0x0;
DWORD KO_PTR_GameProcIntro_orginalProcessPacketFuncAdr = 0x0;
bool IsRecvPacketHooked = false;

typedef BYTE(__fastcall* tProcessPacket)(DWORD* pointer, void* Unknown, DWORD pDataPack, int& iOffset);
inline bool disableDeathAnimation = true;
std::atomic<bool> needSolve(false);
DWORD lastCaptchaRequestTime = 0;



// HOOK RECV PAKET

void SendToGameServer(BYTE* pBuf, int len) {
    DWORD pktPtr = *(DWORD*)KO_PTR_PKT;
    if (pktPtr == 0) return;

    __asm {
        MOV ECX, pktPtr    // Oyunun Socket Nesnesi (this)
        PUSH len           // Boyut
        PUSH pBuf          // Veri
        MOV EAX, KO_SND_FNC
        CALL EAX           // Oyunun orijinal Send fonksiyonu
    }
}
BYTE originalBytes[5];



void HexLog(const char* label, BYTE* data, int size) {
    printf("%s [%d bytes]: ", label, size);
    for (int i = 0; i < size; i++) {
        printf("%02X ", data[i]);
    }
    printf("\n");
}

void LogToConsole(const char* format, ...) {
    char buffer[1024];
    va_list args;
    va_start(args, format);
    vsprintf_s(buffer, format, args);
    printf("%s\n", buffer);
    OutputDebugStringA(buffer);
    va_end(args);
}


// Global veya static kalsın
static SOCKET g_MasterSock = INVALID_SOCKET;

bool EnsureConnection() {
    if (g_MasterSock != INVALID_SOCKET) return true;

    WSADATA wsa; WSAStartup(MAKEWORD(2, 2), &wsa);
    g_MasterSock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    if (g_MasterSock == INVALID_SOCKET) return false;

    int timeout = 5000;
    setsockopt(g_MasterSock, SOL_SOCKET, SO_RCVTIMEO, (char*)&timeout, sizeof(timeout));

    sockaddr_in addr;
    addr.sin_family = AF_INET;
    addr.sin_port = htons(8888);
    inet_pton(AF_INET, "127.0.0.1", &addr.sin_addr);

    if (connect(g_MasterSock, (sockaddr*)&addr, sizeof(addr)) == SOCKET_ERROR) {
        g_MasterSock = INVALID_SOCKET;
        return false;
    }

    // HANDSHAKE GÖNDER
    unsigned char hs[2] = { 0x31, 0x80 };
    send(g_MasterSock, (char*)hs, 2, 0);

    // CEVAP BEKLE
    char dummy[10];
    int r = recv(g_MasterSock, dummy, sizeof(dummy), 0);
    if (r <= 0) {
        YazHataLogu("[ERROR] Handshake cevabi gelmedi, soket kapatiliyor.");
        closesocket(g_MasterSock);
        g_MasterSock = INVALID_SOCKET;
        return false;
    }

    YazHataLogu("[OK] Handshake basarili.");
    return true;
}

std::mutex g_EmuLock;

int GetHBFromMaster(BYTE* pData, int pSize, BYTE* pOutBuffer, int& outSize) {
    if (g_MasterSock == INVALID_SOCKET) {
        WSADATA wsa; WSAStartup(MAKEWORD(2, 2), &wsa);
        g_MasterSock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);


        u_long mode = 1;
        ioctlsocket(g_MasterSock, FIONBIO, &mode);

        sockaddr_in addr = { AF_INET, htons(8888) };
        inet_pton(AF_INET, "127.0.0.1", &addr.sin_addr);
        connect(g_MasterSock, (sockaddr*)&addr, sizeof(addr));
    }

    // 2. Paketi hazırla
    BYTE sBuf[1024];
    sBuf[0] = (pSize >> 24) & 0xFF; sBuf[1] = (pSize >> 16) & 0xFF;
    sBuf[2] = (pSize >> 8) & 0xFF;  sBuf[3] = pSize & 0xFF;
    memcpy(&sBuf[4], pData, pSize);

    send(g_MasterSock, (char*)sBuf, pSize + 4, 0);

 
    return 2;
}

void X3_WorkerThread(BYTE* data, int len) {
    BYTE outBuf[515];
    int outSize = 0;

    int result = GetHBFromMaster(data, len, outBuf, outSize);

    if (result == 1 && outSize > 0) {
        YazHataLogu("[SUCCESS] Emu imzayi uretti, SUNUCUYA BASILIYOR.");

        SendToGameServer(outBuf, outSize);
    }
    else {
        YazHataLogu("[INFO] Emu su an cevap uretmedi (Paket yutuldu).");
    }
}

std::string ToHexString(BYTE* data, int size) {
    std::stringstream ss;
    ss << std::hex << std::setfill('0');
    for (int i = 0; i < size; ++i) {
        ss << std::setw(2) << static_cast<int>(data[i]) << " ";
    }
    return ss.str();
}

BYTE __fastcall HookedProcessPacket(DWORD* pointer, void* Unknown, DWORD pDataPack, int& iOffset) {
    BYTE* pData = *(BYTE**)(pDataPack + 0x8);
    int pSize = *(int*)(pDataPack + 0x4);

    if (pData != nullptr && pSize >= 515 && pData[0] == 0xA0) {

        std::thread([=]() {
            BYTE temp[515];
            memcpy(temp, pData, 515);
            X3_WorkerThread(temp, 515);
            }).detach();
    }


    DWORD jumpBack = KO_PTR_GameProcMain_orginalProcessPacketFuncAdr + 5;
    __asm {
        mov ecx, pointer
        mov edx, Unknown
        push iOffset
        push pDataPack
        jmp jumpBack
    }
}
//end of recv


void HookProcessPacket() {
    if (IsRecvPacketHooked) return;


    DWORD checkInstance = *(DWORD*)0x10F6094;
    if (checkInstance == 0) {
        std::cout << "[WAIT] Oyun henuz hazir degil, bekleniyor..." << std::endl;
        return;
    }

    DWORD targetFunc = 0x00847170;
    KO_PTR_GameProcMain_orginalProcessPacketFuncAdr = targetFunc;

    DWORD newValue = (DWORD)&HookedProcessPacket;
    BYTE jmp[5] = { 0xE9, 0x00, 0x00, 0x00, 0x00 };
    DWORD relativeAddr = newValue - (targetFunc + 5);
    memcpy(&jmp[1], &relativeAddr, 4);

    DWORD oldProtect;
    if (VirtualProtect((LPVOID)targetFunc, 5, PAGE_EXECUTE_READWRITE, &oldProtect)) {
   
        memcpy(originalBytes, (LPVOID)targetFunc, 5);
       
        // Hooku yerleştir
        memcpy((LPVOID)targetFunc, jmp, 5);
       
        VirtualProtect((LPVOID)targetFunc, 5, oldProtect, &oldProtect);
        IsRecvPacketHooked = true;
        std::cout << "[SUCCESS] Hook Aktif: 0x" << std::hex << targetFunc << std::endl;
    }
}

x3 emul code :
C++:
#define _WINSOCK_DEPRECATED_NO_WARNINGS
#include <winsock2.h>
#include <windows.h>
#include <iostream>

#pragma comment(lib, "ws2_32.lib")

typedef int(__stdcall* _XignCode_probe_t)(void* pContext, BYTE* pInput, BYTE* pOutput, unsigned int* pOutSz, unsigned int reserved);

void* g_X3Context = nullptr;
_XignCode_probe_t _XignCode_Feed = nullptr;
_XignCode_probe_t _XignCode_Prepare = nullptr;
_XignCode_probe_t _XignCode_Pull = nullptr;

int main() {
    printf("--- X3 EMU: FINAL FIXED VERSION ---\n");

    HMODULE x3Mod = LoadLibraryA("C:\\NTTGame\\KnightOnlineEn\\XIGNCODE\\x3.xem");
    auto dispatch = (int(__stdcall*)(void**, int))GetProcAddress(x3Mod, (LPCSTR)1);

    dispatch(&g_X3Context, 1);
    ((bool(__stdcall*)(const wchar_t*, const wchar_t*, int))g_X3Context)(L"gA1cjrxctNry", L"C:\\NTTGame\\KnightOnlineEn\\XIGNCODE", 0);

    void* p;
    dispatch(&p, 5); _XignCode_Feed = (_XignCode_probe_t)p;
    dispatch(&p, 4); _XignCode_Prepare = (_XignCode_probe_t)p;
    dispatch(&p, 2); _XignCode_Pull = (_XignCode_probe_t)p;
    dispatch(&p, 3); ((bool(__stdcall*)())p)();

    WSADATA wsa; WSAStartup(MAKEWORD(2, 2), &wsa);
    SOCKET listenSock = socket(AF_INET, SOCK_STREAM, 0);
    sockaddr_in addr = { AF_INET, htons(8888), INADDR_ANY };
    bind(listenSock, (sockaddr*)&addr, sizeof(addr));
    listen(listenSock, 5);

    printf("[OK] Emu hazir. Bekleniyor...\n");

    __declspec(align(16)) BYTE alignedIn[8192];
    __declspec(align(16)) BYTE dummyOut[8192];

    while (true) {
        SOCKET gameSock = accept(listenSock, NULL, NULL);
        if (gameSock == INVALID_SOCKET) continue;
        printf("[CONN] Baglanti geldi.\n");

        while (true) {
            unsigned char buffer[16384];
            int bytes = recv(gameSock, (char*)buffer, sizeof(buffer), 0);
            if (bytes <= 0) break;

     
            if (bytes == 2 && buffer[0] == 0x31) continue;

            for (int i = 0; i + 519 <= bytes; i += 519) {
                memcpy(alignedIn, &buffer[i + 4], 515);

                unsigned int outSz = 4096;
                _XignCode_Feed(g_X3Context, alignedIn, dummyOut, &outSz, 0);

                outSz = 4096;
                _XignCode_Prepare(g_X3Context, alignedIn, dummyOut, &outSz, 0);

                BYTE pullBuf[1024];
                unsigned int pullSz = 1024;
                int res = _XignCode_Pull(g_X3Context, alignedIn, pullBuf, &pullSz, 0);

                if (res == 0 && pullBuf[0] != 0) {
                    printf("[SUCCESS] IMZA URETILDI!\n");
                }
                else {
                    printf("[INFO] Beslendi. (Res: %d)\n", res);
                }
            }
        }
    }
    return 0;
}

Projeyi komple paylaşırmısın ?
 

Şuanda konuyu görüntüleyen kullanıcılar

Geri
Üst Alt