Source Code Model Logger C++

Posts 1–15 of 42 · Page 1 of 3
Source Code Model Logger C++
This is a useful source code in blackshot you need to modified this code to make it work in game

here my example image in blackshot







It work in few games but i don't tested it what games is that be




Code:

Code:
#include <vector>
#include <windows.h>
#include <detours.h>
#include <iostream>
#include <d3d9.h>
#include <d3dx9.h>

#pragma comment(lib, "detours.lib")
#pragma comment(lib, "d3d9.lib")
#pragma comment(lib, "d3dx9.lib")

#pragma intrinsic(_ReturnAddress)

#define TEXT_POS_X 500.0f
#define TEXT_POS_Y 280.0f

typedef HRESULT(WINAPI *Prototype_Present)(LPDIRECT3DDEVICE9, CONST RECT*, CONST RECT*, HWND, CONST RGNDATA*);
typedef HRESULT(WINAPI *Prototype_Reset)(LPDIRECT3DDEVICE9, D3DPRESENT_PARAMETERS*);
typedef HRESULT (WINAPI* Prototype_DrawIndexedPrimitive)(LPDIRECT3DDEVICE9, D3DPRIMITIVETYPE, INT, UINT, UINT, UINT, UINT);

Prototype_Present Orginal_Present;
Prototype_Reset Orginal_Reset;
Prototype_DrawIndexedPrimitive Orginal_DrawIndexedPrimitive;

HRESULT WINAPI Hooked_Present(LPDIRECT3DDEVICE9 Device, CONST RECT *pSrcRect, CONST RECT *pDestRect, HWND hDestWindow, CONST RGNDATA *pDirtyRegion);
HRESULT WINAPI Hooked_Reset(LPDIRECT3DDEVICE9 Device, D3DPRESENT_PARAMETERS *pp);
HRESULT WINAPI Hooked_DrawIndexedPrimitive(LPDIRECT3DDEVICE9 Device, D3DPRIMITIVETYPE PrimType, INT BaseVertexIndex, UINT MinVertexIndex, UINT NumVertices, UINT startIndex, UINT primCount);

ID3DXFont*                            g_Font                    = NULL;
bool                                g_Init                    = false;
int                                    g_Index                    = -1;
HMODULE                                g_HModule                = 0;
std::vector<void*>                    g_Vector;
char                                g_Text[128]                = {'\0'};
void*                                g_SelectedAddress        = NULL;
LPDIRECT3DTEXTURE9                    g_Blue                    = NULL,
                                    g_Green                    = NULL;

namespace Drawing
{
    void Line(LPDIRECT3DDEVICE9 pDevice, float X, float Y, float Width, float Height, D3DCOLOR Color)
    {
        struct Vertex2D
        {
            float m_X, m_Y, m_Z, m_T;
            DWORD m_Color;
        };
        Vertex2D Vertex[4];
        Vertex[0].m_Color = Vertex[1].m_Color = Vertex[2].m_Color = Vertex[3].m_Color = Color;
        Vertex[0].m_Z = Vertex[1].m_Z = Vertex[2].m_Z = Vertex[3].m_Z = 0;
        Vertex[0].m_T = Vertex[1].m_T = Vertex[2].m_T = Vertex[3].m_T = 0;
        Vertex[0].m_X = Vertex[2].m_X = X;
        Vertex[0].m_Y = Vertex[1].m_Y = Y;
        Vertex[1].m_X = Vertex[3].m_X = X + Width;
        Vertex[2].m_Y = Vertex[3].m_Y = Y + Height;
        pDevice->SetTexture(0, NULL);
        pDevice->SetFVF(D3DFVF_XYZRHW|D3DFVF_DIFFUSE|D3DFVF_TEX1);
        pDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP, 2, Vertex, sizeof(Vertex2D));
    }

    void Box(LPDIRECT3DDEVICE9 pDevice, float X, float Y, float Width, float Height, float Thickness, D3DCOLOR Color)
    {
        Line(pDevice, X + Thickness, Y + Height - Thickness, Width - (Thickness * 2), Thickness, Color);
        Line(pDevice, X, Y, Thickness, Height, Color);
        Line(pDevice, X + Thickness, Y, Width - (Thickness * 2), Thickness, Color);
        Line(pDevice, X + Width - Thickness, Y, Thickness, Height, Color);
    }

    void DrawString(ID3DXFont *Font, float PosX, float PosY, DWORD Color, char *Text)
    {
        if(Font == NULL)
            return;
        static RECT FontRect;
        SetRect(&FontRect, 0, 0, 0, 0);
        Font->DrawTextA(0, Text, -1, &FontRect, DT_CALCRECT, Color);
        int Width = FontRect.right - FontRect.left;
        int Height = FontRect.bottom - FontRect.top;
        FontRect.right = FontRect.left + Width;
        FontRect.bottom = FontRect.top + Height;
        FontRect.left = (LONG)PosX;
        FontRect.top = (LONG)PosY;
        Font->DrawTextA(0, Text, -1, &FontRect, DT_NOCLIP, Color);
    }
}

DWORD FindDevice(DWORD Len)
{
     DWORD dwObjBase = 0;
        
     dwObjBase = (DWORD)LoadLibrary("d3d9.dll");
     while (dwObjBase++ < dwObjBase + Len)
     {
         if ( (*(WORD*)(dwObjBase + 0x00)) == 0x06C7
           && (*(WORD*)(dwObjBase + 0x06)) == 0x8689
           && (*(WORD*)(dwObjBase + 0x0C)) == 0x8689
           ) { dwObjBase += 2; break; }
     }
     return( dwObjBase );
}

DWORD GetDeviceAddress(int VTableIndex)
{
    PDWORD VTable;
    *(DWORD*)&VTable = *(DWORD*)FindDevice(0x128000);
    return VTable[VTableIndex];
}

void HookThread()
{
    Orginal_Present = (Prototype_Present)DetourFunction((PBYTE)GetDeviceAddress(17), (PBYTE)Hooked_Present);
    Orginal_Reset = (Prototype_Reset)DetourFunction((PBYTE)GetDeviceAddress(16), (PBYTE)Hooked_Reset);
    Orginal_DrawIndexedPrimitive = (Prototype_DrawIndexedPrimitive)DetourFunction((PBYTE)GetDeviceAddress(82), (PBYTE)Hooked_DrawIndexedPrimitive);

    while(true)
    {
        if(GetAsyncKeyState(VK_PAUSE) &1)
        {
            FreeLibraryAndExitThread(g_HModule, 0);
            return;
        }
        else if(GetAsyncKeyState(VK_RIGHT) &1)
        {
            if(g_Index != g_Vector.size() - 1)
            {
                g_Index++;
                g_SelectedAddress = g_Vector[g_Index];
            }
        }
        else if(GetAsyncKeyState(VK_LEFT) &1)
        {
            if(g_Index >= 0)
            {
                g_Index--;
                g_SelectedAddress = g_Vector[g_Index];
                if(g_Index == -1)
                    g_SelectedAddress = NULL;
            }
        }
        Sleep(100);
    }
}

BOOL WINAPI DllMain(HINSTANCE hInsatnce, DWORD dwReason, LPVOID lpReserved)
{
    if(dwReason == DLL_PROCESS_ATTACH)
    {
        g_HModule = hInsatnce;
        EXECUTETHREADHEREPLS(0, 0, (LPTHREAD_START_ROUTINE)HookThread, 0, 0, 0);
    }
    else if(dwReason == DLL_PROCESS_DETACH)
    {
        if(g_Font != NULL)
        {
            g_Font->OnLostDevice();
            g_Font->OnResetDevice();
            g_Font->Release();
            g_Font = NULL;
        }
        DetourRemove((PBYTE)Orginal_Present, (PBYTE)Hooked_Present);
        DetourRemove((PBYTE)Orginal_Reset, (PBYTE)Hooked_Reset);
        DetourRemove((PBYTE)Orginal_DrawIndexedPrimitive, (PBYTE)Hooked_DrawIndexedPrimitive);
    }
    return TRUE;
}

bool IsAddressPresent(void* Address)
{
    for(auto it = g_Vector.begin(); it != g_Vector.end(); ++it)
    {
        if(*it == Address)
            return true;
    }
    return false;
}

HRESULT GenerateTexture(LPDIRECT3DDEVICE9 pDevice, IDirect3DTexture9 **ppD3Dtex, DWORD colour32)
{
    if( FAILED(pDevice->CreateTexture(8, 8, 1, 0, D3DFMT_A4R4G4B4, D3DPOOL_MANAGED, ppD3Dtex, NULL)) )
        return E_FAIL;
    
    WORD colour16 =    ((WORD)((colour32>>28)&0xF)<<12)
            |(WORD)(((colour32>>20)&0xF)<<8)
            |(WORD)(((colour32>>12)&0xF)<<4)
            |(WORD)(((colour32>>4)&0xF)<<0);

    D3DLOCKED_RECT d3dlr;    
    (*ppD3Dtex)->LockRect(0, &d3dlr, 0, 0);
    WORD *pDst16 = (WORD*)d3dlr.pBits;

    for(int xy=0; xy < 8*8; xy++)
        *pDst16++ = colour16;

    (*ppD3Dtex)->UnlockRect(0);

    return S_OK;
}

HRESULT WINAPI Hooked_Present(LPDIRECT3DDEVICE9 Device, CONST RECT *pSrcRect, CONST RECT *pDestRect, HWND hDestWindow, CONST RGNDATA *pDirtyRegion)
{
    if(!g_Init)
    {
        if(g_Font == NULL)
            D3DXCreateFontA(Device, 21, 0, true, 1, false, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, ANTIALIASED_QUALITY, DEFAULT_PITCH | FF_DONTCARE, "Arial", &g_Font);
        memset(g_Text, 0, sizeof(g_Text));
        GenerateTexture(Device, &g_Blue, D3DCOLOR_ARGB(255, 0, 0, 255));
        GenerateTexture(Device, &g_Green, D3DCOLOR_ARGB(255, 0, 255, 0));
        g_Init = !g_Init;
    }

    D3DVIEWPORT9 VP;
    memset(&VP, 0, sizeof(D3DVIEWPORT9));
    Device->GetViewport(&VP);
    float X = (float)VP.Width / 800;
    float Y = (float)VP.Height / 600;

    Drawing::Box(Device, X * TEXT_POS_X - 10.0f, Y * TEXT_POS_Y + 23.0f, 300.0f, 82.0f, 4.0f, D3DCOLOR_ARGB(200, 255, 0, 0));
    Drawing::DrawString(g_Font, X * TEXT_POS_X, Y * TEXT_POS_Y, D3DCOLOR_ARGB(200, 255, 0, 0), "Momo5000's Return Address Logger");

    memset(g_Text, 0, sizeof(g_Text));
    sprintf_s(g_Text, sizeof(g_Text), "Vector size: %d", g_Vector.size());
    Drawing::DrawString(g_Font, X * TEXT_POS_X, Y * TEXT_POS_Y + 25.0f, D3DCOLOR_ARGB(200, 0, 0, 255), g_Text);

    memset(g_Text, 0, sizeof(g_Text));
    sprintf_s(g_Text, sizeof(g_Text), "Selected Index: %d", g_Index);
    Drawing::DrawString(g_Font, X * TEXT_POS_X, Y * TEXT_POS_Y + 50.0f, D3DCOLOR_ARGB(200, 0, 0, 255), g_Text);

    memset(g_Text, 0, sizeof(g_Text));
    sprintf_s(g_Text, sizeof(g_Text), "Selected Address: [0x%X]", g_SelectedAddress);
    Drawing::DrawString(g_Font, X * TEXT_POS_X, Y * TEXT_POS_Y + 75.0f, D3DCOLOR_ARGB(200, 0, 0, 255), g_Text);

    return Orginal_Present(Device, pSrcRect, pDestRect, hDestWindow, pDirtyRegion);
}

HRESULT WINAPI Hooked_Reset(LPDIRECT3DDEVICE9 Device, D3DPRESENT_PARAMETERS *pp)
{
    if(g_Font != NULL)
    {
        g_Font->OnLostDevice();
        g_Font->OnResetDevice();
    }
    return Orginal_Reset(Device, pp);
}

HRESULT WINAPI Hooked_DrawIndexedPrimitive(LPDIRECT3DDEVICE9 Device, D3DPRIMITIVETYPE PrimType, INT BaseVertexIndex, UINT MinVertexIndex, UINT NumVertices, UINT startIndex, UINT primCount)
{
    void* ReturnAddress = _ReturnAddress();
    if(!IsAddressPresent(ReturnAddress))
        g_Vector.push_back(ReturnAddress);

     if(ReturnAddress != NULL && g_SelectedAddress != NULL && ReturnAddress == g_SelectedAddress)
     {
         Device->SetRenderState(D3DRS_ZENABLE, FALSE);
         Device->SetTexture(0, g_Blue);
         Orginal_DrawIndexedPrimitive(Device, PrimType, BaseVertexIndex, MinVertexIndex, NumVertices, startIndex, primCount);
        Device->SetRenderState(D3DRS_ZENABLE, TRUE);
        Device->SetTexture(0, g_Green);
     }

    return Orginal_DrawIndexedPrimitive(Device, PrimType, BaseVertexIndex, MinVertexIndex, NumVertices, startIndex, primCount);

}




credit in source code
This is like the 5th model logger you have posted in this section.
Quote Originally Posted by Caezer99 View Post
This is like the 5th model logger you have posted in this section.
there is a lot of code in model logger not one but many......
all you need is strike code of any game then just and in code
Quote Originally Posted by COD3RIN View Post

there is a lot of code in model logger not one but many......
Have you had any idea what caezar was talking about, dumba$$ -.-
-
Help me, I have c + +, but I know how to put WIN32 DLL and, most do not know where I should put the code, you have tutorial or can someone give me a help?
Quote Originally Posted by guilherme1234 View Post
Help me, I have c + +, but I know how to put WIN32 DLL and, most do not know where I should put the code, you have tutorial or can someone give me a help?
youtube it easy to watch a tutorial
wait i fix it and do it public
Quote Originally Posted by Gamez-Zero_Batman View Post
wait i fix it and do it public
depend in you
just wait ^^ im patching garena becouse im from eu :P but i know how i can play
Quote Originally Posted by Gamez-Zero_Batman View Post
just wait ^^ im patching garena becouse im from eu :P but i know how i can play
try in eu maybe it work
Sir Can YOU Add Me Skype i Send you my skype Sorrykid12
this no need bypass game guard or hook game guard?
Nice .
Posts 1–15 of 42 · Page 1 of 3
This thread is closed for replies.

Similar Threads

Tags for this Thread

None

Need help?