admin 发表于 2023-2-1 21:05:40

游戏 透视上色 代码




#include <Windows.h>
#include <d3d9.h>
#include <d3dx9.h>
#include <cstdio>

#pragma comment (lib, "d3d9.lib")
#pragma comment(lib, "d3dx9.lib")
LPDIRECT3DDEVICE9 pDevice;
ID3DXLine *pLine;
IDirect3DTexture9 *texRed;
IDirect3DTexture9 *texGreen;
IDirect3DPixelShader9 *Front,
                     *Back;
bool shangse=true;
bool Xhair=false;
static LPD3DXFONT m_pFont1= NULL;
BOOL FontCreated=false;
int a=10;
bool WallHack=false;
bool zimu=true;
bool hack2=1;
bool hack3=0;
bool hack4=0;
bool xiantiao=false;
HRESULT GenerateTexture(IDirect3DDevice9 *pD3Ddev, IDirect3DTexture9 **ppD3Dtex, DWORD colour32)
{
if( FAILED(pD3Ddev->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;
}
void InitObjects( IDirect3DDevice9 * pDevice )
{
if(!FontCreated){
D3DXCreateFont( pDevice, 12, 0, FW_NORMAL, 1, 0, DEFAULT_CHARSET, OUT_DEVICE_PRECIS, ANTIALIASED_QUALITY, FF_DONTCARE | DEFAULT_PITCH, "Visitor TT2 (BRK)", &m_pFont1 );
FontCreated=true;
}
}
void SetLightChams(float A, float R, float G, float B, IDirect3DDevice9 *pDevice)
{
    D3DMATERIAL9 pMaterial;
    ZeroMemory(&pMaterial, sizeof(D3DMATERIAL9));
pDevice->SetRenderState(D3DRS_LIGHTING, TRUE); //Enable Lighting
//Ambient
pMaterial.Ambient.a   =(A/255);
    pMaterial.Ambient.r   =(R/255);
    pMaterial.Ambient.g   =(G/255);
    pMaterial.Ambient.b   =(B/255);
//Diffuse
pMaterial.Diffuse.a   = (A/255);
    pMaterial.Diffuse.r   = (R/255);
    pMaterial.Diffuse.g   = (G/255);
    pMaterial.Diffuse.b   = (B/255);
//Specular
pMaterial.Specular.a = (A/255);
pMaterial.Specular.r = (R/255);
    pMaterial.Specular.g = (G/255);
    pMaterial.Specular.b = (B/255);
    pDevice->SetMaterial(&pMaterial);
}
void DrawFont (int X, int Y, D3DCOLOR Color, char *format, ...)
{
char buffer;
va_list args;
va_start (args, format);
vsprintf (buffer,format, args);
RECT FontRect = { X, Y, X + 120, Y + 16 };
m_pFont1->DrawText( NULL, buffer, -1, &FontRect, DT_NOCLIP , Color );
va_end (args);
}
void *DetourFunction(BYTE *src, const BYTE *dst, const int len)
{
BYTE *jmp = (BYTE*)malloc(len+5);
DWORD dwBack;
VirtualProtect(src, len, PAGE_EXECUTE_READWRITE, &dwBack);
memcpy(jmp, src, len);
jmp += len;
jmp = 0xE9;
*(DWORD*)(jmp+1) = (DWORD)(src+len - jmp) - 5;
src = 0xE9;
*(DWORD*)(src+1) = (DWORD)(dst - src) - 5;
for (int i=5; i<len; i++)src=0x90;
VirtualProtect(src, len, dwBack, &dwBack);
return (jmp-len);
}
    void FillRGB( int x, int y, int w, int h, D3DCOLOR color, IDirect3DDevice9* pDevice )
{
D3DRECT rec = { x, y, x + w, y + h };
pDevice->Clear( 1, &rec, D3DCLEAR_TARGET, color, 0, 0 );
}
HRESULT CreateMyShader(IDirect3DPixelShader9 **pShader, IDirect3DDevice9 *Device, float red, float green, float blue, float alpha )
{
    ID3DXBuffer *MyBuffer = NULL;
    char MyShader[ 256 ];
    sprintf( MyShader, "ps.1.1\ndef c0, %f, %f, %f, %f\nmov r0,c0", red/255, green/255, blue/255, alpha/255 );
    D3DXAssembleShader( MyShader, sizeof( MyShader ), NULL, NULL, 0, &MyBuffer , NULL );
    if( FAILED( Device->CreatePixelShader((const DWORD*)MyBuffer ->GetBufferPointer(), pShader)) )return E_FAIL;
    return S_OK;
}
DWORD WINAPI dwWaitThread( LPVOID lpArgs );
typedef HRESULT(WINAPI* DrawIndexedPrimitive_)(LPDIRECT3DDEVICE9 pDevice, D3DPRIMITIVETYPE Type, INT BaseVertexIndex, UINT MinIndex, UINT NumVertices, UINT StartIndex, UINT PrimitiveCount);
DrawIndexedPrimitive_ pDrawIndexedPrimitive;
typedef HRESULT ( WINAPI *EndScene_)( IDirect3DDevice9 * pDevice );
EndScene_ pEndScene;
typedef HRESULT ( WINAPI *CreateQuery_)(LPDIRECT3DDEVICE9 pDevice, D3DQUERYTYPE Type,IDirect3DQuery9** ppQuery);
CreateQuery_ pCreateQuery;
HRESULT WINAPI hkCreateQuery(LPDIRECT3DDEVICE9 pDevice, D3DQUERYTYPE Type,IDirect3DQuery9** ppQuery)
{
    if( Type == D3DQUERYTYPE_OCCLUSION )
    {
      Type = D3DQUERYTYPE_TIMESTAMP;
    }

    return pCreateQuery( pDevice, Type, ppQuery );
}
HRESULT WINAPI hkEndScene( IDirect3DDevice9 * pDevice )
{
//HWND hwnd1;
//hwnd1=FindWindow (TEXT("透视程序"),TEXT("透视程序"));
//if(hwnd1==0)
//{
// MessageBox( NULL, "透视EXE程序不存在,调用注意走路掉进下水道!", "", MB_ICONERROR | MB_ICONSTOP );
// ExitProcess(0);
//}
    if (shangse)
    {
GenerateTexture(pDevice, &texRed,D3DCOLOR_ARGB(255,255,0,0));//上色背景 红
GenerateTexture(pDevice, &texGreen,D3DCOLOR_ARGB(255,0,255,0));//上色背景 绿
      shangse=false;
    }
//CreateMyShader( &Front, pDevice,    255,   0,   0,   255 );
    //CreateMyShader( &Back,pDevice,    255,   255,   0,   255 );
    InitObjects( pDevice );
DrawFont ( 3, 10, D3DCOLOR_ARGB(255,238,17,216), "逆战 透视程序" );//238,17,216
// ..........
if(zimu)
{
//DrawFont ( 5, 30, D3DCOLOR_ARGB(255,0,255,0), "" );
DrawFont ( 5, 50, D3DCOLOR_ARGB(255,0,255,0), "1键 完美准星" );
DrawFont ( 5, 70, D3DCOLOR_ARGB(255,0,255,0), "2键 人物透视" );
DrawFont ( 5, 90, D3DCOLOR_ARGB(255,0,255,0), "3键 人物上色" );
DrawFont ( 5, 110, D3DCOLOR_ARGB(255,0,255,0), "透视程序 " );
//DrawFont ( 5, 90, D3DCOLOR_ARGB(255,0,255,0), "4 人物线条" );
DrawFont ( 5, 130, D3DCOLOR_ARGB(255,0,255,0), "END键开启/关闭提示菜单" );
}
//游戏字幕
if (Xhair)
{
   //准星
   D3DVIEWPORT9 gViewPort;
pDevice->GetViewport(&gViewPort);
float ScreenCenterX = ( float )gViewPort.Width / 2;
float ScreenCenterY = ( float )gViewPort.Height / 2;
FillRGB(ScreenCenterX-20, ScreenCenterY, 40, 1,D3DCOLOR_ARGB(255,71,65,64),pDevice);//Purple
FillRGB(ScreenCenterX, ScreenCenterY-20, 1, 40,D3DCOLOR_ARGB(255,71,65,64),pDevice);
FillRGB(ScreenCenterX-17, ScreenCenterY, 34, 1,D3DCOLOR_ARGB(255,0,0,255),pDevice);//Blue
FillRGB(ScreenCenterX, ScreenCenterY-17, 1, 34,D3DCOLOR_ARGB(255,0,0,255),pDevice);
FillRGB(ScreenCenterX-14, ScreenCenterY, 28, 1,D3DCOLOR_ARGB(255,255,240,0),pDevice);//Cyan
FillRGB(ScreenCenterX, ScreenCenterY-14, 1, 28,D3DCOLOR_ARGB(255,255,240,0),pDevice);
FillRGB(ScreenCenterX-11, ScreenCenterY, 22, 1,D3DCOLOR_ARGB(255,0,255,0),pDevice);//Green
FillRGB(ScreenCenterX, ScreenCenterY-11, 1, 22,D3DCOLOR_ARGB(255,0,255,0),pDevice);
FillRGB(ScreenCenterX-9, ScreenCenterY, 18, 1,D3DCOLOR_ARGB(255,255,255,0),pDevice);//Yellow
FillRGB(ScreenCenterX, ScreenCenterY-9, 1, 18,D3DCOLOR_ARGB(255,255,255,0),pDevice);
FillRGB(ScreenCenterX-6, ScreenCenterY, 12, 1,D3DCOLOR_ARGB(255,198,255,0),pDevice);//Orange
FillRGB(ScreenCenterX, ScreenCenterY-6, 1, 12,D3DCOLOR_ARGB(255,198,255,0),pDevice);
FillRGB(ScreenCenterX-3, ScreenCenterY, 6, 1,D3DCOLOR_ARGB(255,255,0,0),pDevice);//Red
FillRGB(ScreenCenterX, ScreenCenterY-3, 1, 6,D3DCOLOR_ARGB(255,255,0,0),pDevice);
}
    return ( *pEndScene )( pDevice );
}
HRESULT WINAPI nDrawIndexedPrimitive(LPDIRECT3DDEVICE9 pDevice, D3DPRIMITIVETYPE Type, INT BaseVertexIndex, UINT MinIndex,UINT NumVertices, UINT StartIndex, UINT PrimitiveCount)
{
IDirect3DVertexBuffer9* pStreamData = NULL;
UINT iOffsetInBytes,iStride;
pDevice->GetStreamSource(0,&pStreamData,&iOffsetInBytes,&iStride);
//if (GetAsyncKeyState (VK_F6)&1)
// {
//a++;
// }
//if (GetAsyncKeyState (VK_F7)&1)
//{
// a--;
// }
DWORD dwOldZEnable = D3DZB_TRUE;
if (hack2)
{
if(iStride==32)
{
   pDevice->SetRenderState(D3DRS_ZENABLE,false);
   pDevice->SetRenderState(D3DRS_ZENABLE,true);
                   DWORD dwOldZEnable;
                pDevice->GetRenderState(D3DRS_ZENABLE,&dwOldZEnable);
                pDevice->SetRenderState(D3DRS_ZENABLE,D3DZB_FALSE);
                pDevice->SetRenderState(D3DRS_ZFUNC,D3DCMP_NEVER);
                pDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE);
                pDrawIndexedPrimitive(pDevice, Type, BaseVertexIndex, MinIndex, NumVertices, StartIndex, PrimitiveCount);
                pDevice->SetRenderState(D3DRS_ZENABLE,dwOldZEnable);
                pDevice->SetRenderState(D3DRS_ZFUNC,D3DCMP_LESSEQUAL);
    pDrawIndexedPrimitive(pDevice, Type, BaseVertexIndex, MinIndex, NumVertices, StartIndex, PrimitiveCount);
}
}
   if (hack3)
{
if(iStride==32)
{
      DWORD dwOldZEnable;
            pDevice->SetTexture(0,NULL);
            pDevice->SetPixelShader( Front );
   pDevice->SetTexture( 0, texGreen);
            pDevice->GetRenderState(D3DRS_ZENABLE,&dwOldZEnable);
            pDevice->SetRenderState(D3DRS_ZENABLE,D3DZB_FALSE);
            pDevice->SetRenderState(D3DRS_ZFUNC,D3DCMP_NEVER);
            pDrawIndexedPrimitive(pDevice, Type, BaseVertexIndex, MinIndex, NumVertices, StartIndex, PrimitiveCount);      
            pDevice->SetRenderState(D3DRS_ZENABLE,dwOldZEnable);
            pDevice->SetRenderState(D3DRS_ZFUNC,D3DCMP_LESSEQUAL);
   pDevice->SetTexture( 0, texRed);
            pDevice->SetPixelShader( Back );
   pDevice->SetRenderState(D3DRS_ZENABLE,false);
   SetLightChams(255,60,73,196, pDevice);
   pDevice->SetTexture( 0, texGreen);
   pDrawIndexedPrimitive(pDevice, Type, BaseVertexIndex, MinIndex, NumVertices, StartIndex, PrimitiveCount);
   pDevice->SetRenderState(D3DRS_ZENABLE,true);
   pDevice->SetTexture( 0, texRed);
   SetLightChams(255,255,0,255, pDevice);
}
}
      if (hack4)
    {
if (iStride==32)
{
      pDevice->SetRenderState( D3DRS_FILLMODE, D3DFILL_WIREFRAME );
pDrawIndexedPrimitive(pDevice, Type, BaseVertexIndex, MinIndex, NumVertices, StartIndex, PrimitiveCount);
      pDevice->SetRenderState( D3DRS_FILLMODE, D3DFILL_WIREFRAME );
}

    }
return pDrawIndexedPrimitive(pDevice, Type, BaseVertexIndex, MinIndex, NumVertices, StartIndex, PrimitiveCount);
}
void InitDevice( DWORD * dwVTable )
{
LPDIRECT3D9 pD3d9 = NULL;
LPDIRECT3DDEVICE9 pD3DDevice = NULL;
pD3d9 = Direct3DCreate9( D3D_SDK_VERSION );
if ( pD3d9 == NULL )
{
MessageBox( NULL, " Direct3DCreate9 Failed", "Fatal Error", MB_ICONERROR | MB_ICONSTOP );
return;
}

D3DPRESENT_PARAMETERS pPresentParms;
ZeroMemory( &pPresentParms, sizeof( pPresentParms ));

pPresentParms.Windowed = TRUE;
pPresentParms.BackBufferFormat = D3DFMT_UNKNOWN;
pPresentParms.SwapEffect = D3DSWAPEFFECT_DISCARD;

if ( FAILED ( pD3d9->CreateDevice ( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, GetDesktopWindow(), D3DCREATE_SOFTWARE_VERTEXPROCESSING, &pPresentParms, &pD3DDevice )))
{
MessageBox( NULL, " CreateDevice Failed", "Fatal Error", MB_ICONERROR | MB_ICONSTOP );
return;
}

DWORD * dwTable = ( DWORD* ) pD3DDevice;
dwTable = ( DWORD* ) dwTable;

dwVTable = dwTable;
    dwVTable = dwTable;
    dwVTable = dwTable;
}
BOOL APIENTRY DllMain( HMODULE hModule, DWORD dwReason, LPVOID lpReserved )
{
if ( dwReason == DLL_PROCESS_ATTACH )
{
//if ()
//{
   //MessageBox( NULL, "没检测到透视综合社区EXE进程,DLL与EXE对接失败.!", "系统提示:", MB_ICONERROR | MB_ICONSTOP );
   //exit(0);//未检测到透视EXE数据验证.
//}
CreateThread( NULL, NULL, &dwWaitThread, NULL, NULL, NULL );
}
    return TRUE;
}
DWORD WINAPI dwWaitThread( LPVOID lpArgs )
{
DWORD dwD3d9 = NULL;
while ( !dwD3d9 )
{
Sleep(1);
dwD3d9 = ( DWORD ) GetModuleHandle( "D3d9.dll" );
}
DWORD dwVTable = {0};
InitDevice( dwVTable );
pDrawIndexedPrimitive=(DrawIndexedPrimitive_) DetourFunction(( PBYTE ) dwVTable, ( PBYTE ) &nDrawIndexedPrimitive,12);
       pEndScene=(EndScene_) DetourFunction(( PBYTE ) dwVTable, ( PBYTE ) &hkEndScene,5);
       pCreateQuery=(CreateQuery_)DetourFunction(( PBYTE ) dwVTable, ( PBYTE ) &hkCreateQuery,5);
    Xhair= !Xhair;
for (;;Sleep (1))
{
if (GetAsyncKeyState (VK_NUMPAD1)&1)
{
   Xhair= !Xhair;//准星
}
if (GetAsyncKeyState (VK_NUMPAD2)&1)   
{
   hack2 = !hack2;//人物透视
}
if (GetAsyncKeyState (VK_NUMPAD3)&1)
{
            hack3 = !hack3;//人物上色
}
if (GetAsyncKeyState (VK_NUMPAD4)&1)
{
   MessageBox( NULL, "此功能暂不开放.", "透视提示:", MB_ICONERROR | MB_ICONSTOP );
   //hack4 = !hack4;//人物线条
}
if (GetAsyncKeyState (VK_END)&1)
{
   zimu = !zimu;//字幕
}
}
return FALSE;
}


页: [1]
查看完整版本: 游戏 透视上色 代码