Code:
//==================================================================
// This file is part of Qmobase D3D
// Creadit Qmoainx 2006
//==================================================================
#include <windows.h>
#include <mmsystem.h>
#include <stdio.h>
#include <fstream>
#include <d3d9.h>
#include <d3dx9.h>
#include <time.h>
#include "mPizza.h"
//==========pragma comment========
#pragma comment(lib, "d3d9.lib")
#pragma comment(lib, "d3dx9.lib")
#pragma warning(disable:4996 4244)
#pragma warning(disable:4700)
//===========Gamemaster===========
int Qmo = 0;
int Qmo1 = 0;
int Qmo2 = 0;
int Qmo3 = 0;
int Qmo4 = 0;
int Qmo5 = 0;
int Qmo6 = 0;
int Qmo7 = 0;
int Qmo8 = 0;
int MENUPIZZA=0;
int PIZZA=0;
bool hooked=false;
bool CekHook=false;
bool Gamemaster=true;
//--------------------------------define HOOK & UNHOOK--------------------------------------------------------------------------------------------------
#define HOOK(func,addy) o##func = (t##func)CreateDetour((DWORD)hk##func,(DWORD)addy,Detour_Type_0xB8,7)
#define UNHOOK(func,addy) o##func = (t##func)CreateDetour((DWORD)o##func,(DWORD)addy,Detour_Type_0xB8,7)
LPDIRECT3DTEXTURE9 Megaze, Blooderz, Nightmarez, Avenged, Sevenfold, TujuhX, Bondan, Fadetoblack;
#define ES 0
#define DIP 1
#define RES 2
#define E8 2
#define ZE 3
#define DrawIndex 0x002B
#define EndS 0x0023
#define PI 3.14159265
using namespace std;
ofstream infile;
ofstream myfile;
ID3DXLine *g_pLine;
LPD3DXFONT g_pFont = NULL;
LPD3DXFONT g_pFont2 = NULL;
D3DVIEWPORT9 g_ViewPort;
DWORD dwProcessID;
HANDLE hProcess;
LPDIRECT3DDEVICE9 npDevice;
LPDIRECT3DTEXTURE9 txHeader;
D3DXVECTOR3 pHeader;
HMODULE dwD3D9 = GetModuleHandle("d3d9.dll");
DWORD BaseD3D= NULL;
//---------------------------------------define Stride-------------------------------------------------------------------------------------------
#define SMOKE ( Stride == 24 && NumVertices == 256 ||(Stride == 24 && NumVertices == 192))
#define Dino ((primCount == 57) || (primCount == 161) || (primCount == 186) || (primCount == 197) || (primCount == 349) || (primCount == 495) || (primCount == 955) || (NumVertices == 2517 && primCount == 57) || (NumVertices == 3721 && primCount == 275) || (NumVertices == 0 && primCount == 52) || (NumVertices == 0 && primCount == 105) || (NumVertices ==0 && primCount == 186) || (NumVertices == 0 && primCount == 197) || (primCount == 579) || (primCount == 488))
#define K400 ((NumVertices == 1002 && primCount == 980))
#define C5 ((NumVertices == 772 && primCount == 849))
#define Police ( NumVertices == 490 || NumVertices == 221 || NumVertices == 611|| NumVertices == 102 ||(primCount == 526) || (primCount == 84) || (primCount == 64) || NumVertices == 67 || NumVertices == 92 || NumVertices == 95 || NumVertices == 114 || NumVertices == 504 || NumVertices == 108 || NumVertices == 398 || NumVertices == 520 || NumVertices == 684 || (primCount == 56) || (primCount == 93) )
#define Boddy ((primCount == 16 || primCount == 28 || primCount == 50 || primCount == 52 || primCount == 76 || primCount == 130))
#define Teroris ((NumVertices == 88 && primCount == 130) || (NumVertices == 142 && primCount == 266)|| (NumVertices == 472 && primCount == 304) || (NumVertices == 384 && primCount == 346) || (NumVertices == 348 && primCount == 520) || (NumVertices == 596 && primCount == 590)|| (NumVertices == 628 && primCount == 748) || (NumVertices == 3487 && primCount == 1737)|| (NumVertices == 3487 && primCount == 1766) || (NumVertices == 262 && primCount == 196) || (NumVertices == 142 && primCount == 266) || (NumVertices == 244 && primCount == 406) || (NumVertices == 1846 && primCount == 414) || (NumVertices == 528 && primCount == 540) || (NumVertices == 520 && primCount == 593) || (NumVertices == 2728 && primCount == 1344) || (NumVertices == 1091 && primCount == 1390) || (NumVertices == 1095 && primCount == 1460) || (NumVertices == 1846 && primCount == 2090) || (NumVertices == 2263 && primCount == 45) || (NumVertices == 370 && primCount == 278) || (NumVertices == 482 && primCount == 390) || (NumVertices == 734 && primCount == 688) || (NumVertices == 2263 && primCount == 1023) || (NumVertices == 812 && primCount == 1246) || (NumVertices == 2263 && primCount == 1434) || (NumVertices == 2041 && primCount == 1561) || (NumVertices == 1530 && primCount == 1534) || (NumVertices == 749 && primCount == 1374) || (NumVertices == 1831 && primCount == 1267) || (NumVertices == 2010 && primCount == 426) || (NumVertices == 287 && primCount == 396) || (NumVertices == 1831 && primCount == 341) || (NumVertices == 1831 && primCount == 278) || (NumVertices == 185 && primCount == 254) || (NumVertices == 74 && primCount == 66) || (NumVertices == 56 && primCount == 40) || (NumVertices == 185 && primCount == 271) || (NumVertices == 45 && primCount == 56) || (NumVertices == 92 && primCount == 56) || (NumVertices == 611 && primCount == 114) || (NumVertices == 611 && primCount == 526) || (NumVertices == 18 && primCount == 12) || (NumVertices == 96 && primCount == 92) || (NumVertices == 99 && primCount == 61) || (NumVertices == 133 && primCount == 205)|| (NumVertices == 245 && primCount == 276) || (NumVertices == 398 && primCount == 487) || (NumVertices == 26 && primCount == 20) || (NumVertices == 1204 && primCount == 241) || (NumVertices == 80 && primCount == 52) || (NumVertices == 1204 && primCount == 124) || (NumVertices == 113 && primCount == 139) || (NumVertices == 1204 && primCount == 56) || (NumVertices == 684 && primCount == 740) || (NumVertices == 1204 && primCount == 42) || (NumVertices == 45 && primCount == 56) || (NumVertices == 1204 && primCount == 35) || (NumVertices == 334 && primCount == 360) || (NumVertices == 175 && primCount == 246) || (NumVertices == 195 && primCount == 109) || (NumVertices == 71 && primCount == 120) || (NumVertices == 88 && primCount == 130) || (NumVertices == 201 && primCount == 157) || (NumVertices == 224 && primCount == 200) || (NumVertices == 296 && primCount == 166) || (NumVertices == 1353 && primCount == 386) || (NumVertices == 18 && primCount == 20) || (NumVertices == 41 && primCount == 30) || (NumVertices == 62 && primCount == 67) || (NumVertices == 152 && primCount == 168) || (NumVertices == 202 && primCount == 174) || (NumVertices == 237 && primCount == 395) || (NumVertices == 647 && primCount == 716) || (NumVertices == 727 && primCount == 936) || (NumVertices == 90 && primCount == 136) || (NumVertices == 120 && primCount == 170) || (NumVertices == 142 && primCount == 128) || (NumVertices == 218 && primCount == 322) || (NumVertices == 285 && primCount == 94) || (NumVertices == 1316 && primCount == 1574) || (NumVertices == 1316 && primCount == 134) || (NumVertices == 56 && primCount == 158) || (NumVertices == 73 && primCount == 112) || (NumVertices == 143 && primCount == 94) || (NumVertices == 246 && primCount == 120) || (NumVertices == 353 && primCount == 464) || (NumVertices == 381 && primCount == 234) || (NumVertices == 547 && primCount == 700) || (NumVertices == 1353 && primCount == 1404))
//----------------------------------------------------------------------------------------------------------------------------------
char *pProcessWindowTitle = "pblackout" ; // Change for target your game
char *pProcessWindowClass = "I3VIEWER" ;
//----------------------------------------------------------------------------------------------------------------------------------
#define MENUMAXITEMS 100
#define MENUFOLDER 1
#define Pizza 1
#define MENUTEXT 2
#define MENUITEM 3
#define MENUWEWITEM 10
#define MENUINFO 0
//----------------------------------------------------------------------------------------------------------------------------------
int Mpos=0; // current highlighted menuitem
int Mmax=0; // number of menu items
int Mxofs =100; // offset for option text
int Mysize=15; // heigh of a menuline
int Mvisible=0; // 0,1 = 0 off / 1 = show
//----------------------------------------------------------------------------------------------------------------------------------
extern int Mpos;
extern int Mmax;
extern int Mxofs;
extern int Mysize;
extern int Mvisible;
extern char Mtitle[];
extern char *Moptfolder[];
extern char *Moptonoff[];
extern char *optColor1[11];
extern char *optColor2[11];
extern char *Secondary[4];
//----------------------------------------------------------------------------------------------------------------------------------
void MenuAddItem(char *txt, char **opt, int *var, int maxvalue, int typ);
void MenuAddText (char *txt, char *opt="");
void MenuShow(int x, int y, ID3DXFont* g_pFont);
void QmoMenu(void);
//------------------------------------Colors----------------------------------------------------------------------------------------------
#define MCOLOR_TITLE D3DCOLOR_ARGB(255, 255, 255, 000)
#define MCOLOR_CURRENT D3DCOLOR_ARGB(255, 255, 255, 000)
#define MCOLOR_TEXT D3DCOLOR_ARGB(255, 255, 255, 000)
#define MCOLOR_ACTIVE D3DCOLOR_ARGB(255, 255, 255, 000)
#define MENUCOLOR_TITLE D3DCOLOR_ARGB(255, 255, 255, 000)
#define MCOLOR_FOLDER D3DCOLOR_ARGB(255, 255, 000, 000)
#define MCOLOR_INACTIVE D3DCOLOR_ARGB(255, 255, 255, 000)
//-----------------------------------Colors-----------------------------------------------------------------------------------------------
bool Generate = true;
#define GREY D3DCOLOR_ARGB(255, 128, 128, 128)
#define WHITE D3DCOLOR_ARGB(255, 255, 255, 255)
#define RED D3DCOLOR_ARGB(255, 255, 000, 000)
#define GREEN D3DCOLOR_ARGB(255, 000, 255, 000)
#define YELLOW D3DCOLOR_ARGB(255, 255, 255, 000)
LPDIRECT3DTEXTURE9 White,Red,Green,Yellow;
//----------------------------------------------------------------------------------------------------------------------------------
LPDIRECT3DVERTEXBUFFER9 Stream_Data;
UINT Offset = 0;
UINT Stride = 0;
UINT texnum = 0;
//----------------------------------------------------------------------------------------------------------------------------------
RECT rect;
RECT rect2;
RECT rect3;
//----------------------------------------------------------------------------------------------------------------------------------
struct{
int *var;
int maxvalue;
int typ;
char *txt;
char **opt;
}
//----------------------------------------------------------------------------------------------------------------------------------
MENU[MENUMAXITEMS];
//----------------------------------------------------------------------------------------------------------------------------------
void MenuAddItem(char *txt, char **opt, int *var, int maxvalue, int typ){
MENU[Mmax].typ=typ;
MENU[Mmax].txt=txt;
MENU[Mmax].opt=opt;
MENU[Mmax].var=var;
MENU[Mmax].maxvalue=maxvalue;
Mmax++;
}
void MenuAddText(char *txt, char *opt){
MENU[Mmax].typ=MENUTEXT;
MENU[Mmax].txt=txt;
MENU[Mmax].opt=(char **)opt;
MENU[Mmax].var=0;
MENU[Mmax].maxvalue=0;
Mmax++;
}
//--------------------------------MenuShow--------------------------------------------------------------------------------------------------
void MenuShow(int x, int y, ID3DXFont *pFont){
int i, val;
DWORD color;
SetRect( &rect, x+Mxofs/3, y, x+Mxofs /2 , y );
if (!Mvisible) return;
if (Mtitle[0]) {
pFont->DrawText(NULL,Mtitle,-1,&rect,DT_NOCLIP | DT_TOP, MCOLOR_CURRENT);
y+=Mysize;
}
for (i=0; i<Mmax; i++) {
val=(MENU[i].var)?(*MENU[i].var):0;
if (i==Mpos){
color=WHITE;
}
else if (MENU[i].typ==MENUFOLDER)
color=MCOLOR_FOLDER;
else if (MENU[i].typ==Pizza)
color=MCOLOR_INACTIVE;
else if (MENU[i].typ==MENUTEXT)
color=MCOLOR_TEXT;
else
color=(val)?GREEN:GREY;
SetRect( &rect3, x, y, x , y );
SetRect( &rect2, x+Mxofs, y, x+Mxofs , y );
pFont->DrawText(NULL,MENU[i].txt,-1,&rect3, DT_NOCLIP,color);
if (MENU[i].opt) {
if (MENU[i].typ==MENUTEXT)
pFont->DrawText(NULL,(char *)MENU[i].opt,-1,&rect2, DT_NOCLIP | DT_RIGHT, color);
else
pFont->DrawText(NULL,(char *)MENU[i].opt[val],-1,&rect2, DT_NOCLIP | DT_LEFT, color);
}
y+=Mysize;
}
}
//-------------------------------------Menukey---------------------------------------------------------------------------------------------
void QmoMenu(void){
if (GetAsyncKeyState(VK_INSERT)&1) Mvisible=(!Mvisible);
if (!Mvisible) return;
if (GetAsyncKeyState(VK_UP)&1)
{
do
{
Mpos--;
if (Mpos<0) Mpos=Mmax-1;
}
while (MENU[Mpos].typ==MENUTEXT);
}
else
if (GetAsyncKeyState(VK_DOWN)&1) {
do
{
Mpos++;
if (Mpos==Mmax) Mpos=0;
}
while (MENU[Mpos].typ==MENUTEXT);
}
else if (MENU[Mpos].var) {
int dir=0;
if (GetAsyncKeyState(VK_LEFT )&1 && *MENU[Mpos].var > 0 ) dir=-1;
if (GetAsyncKeyState(VK_RIGHT)&1 && *MENU[Mpos].var < (MENU[Mpos].maxvalue-1)) dir=1;
if (dir) {
*MENU[Mpos].var += dir;
if (MENU[Mpos].typ==MENUFOLDER) Mmax=0;
}
}
}
//-----------------------------------------------CreateDetour-----------------------------------------------------------------------------------
#define Detour_Type_0xE9 1
#define Detour_Type_0xB8 2
#define Detour_Type_0x68 3
DWORD CreateDetour(DWORD dwThread,DWORD dwAdress,DWORD dwType,DWORD dwSize)
{
DWORD dwDetour,dwProtect,i;
if (dwAdress&&dwThread&&dwSize>= dwSize)
{
dwDetour = (DWORD)VirtualAlloc(0,dwSize+dwSize,0x1000,0x40);
if (dwDetour&&VirtualProtect((VOID*)dwAdress,dwSize,0x40,&dwProtect))
{
for (i=0;i<dwSize;i++)
{
*(BYTE*)(dwDetour+i)=*(BYTE*)(dwAdress+i);
}
switch (dwType)
{
case Detour_Type_0xE9:
{
*(BYTE*)(dwDetour+dwSize+0)=0xE9;
*(DWORD*)(dwDetour+dwSize+1)=(dwAdress-dwDetour-dwSize);
*(BYTE*)(dwAdress+0)=0xE9;
*(DWORD*)(dwAdress+1)=(dwThread-dwAdress-dwSize);
}
break;
case Detour_Type_0xB8:
{
*(BYTE*)(dwDetour+dwSize+0)=0xB8;
*(DWORD*)(dwDetour+dwSize+1)=(dwAdress+dwSize);
*(WORD*)(dwDetour+dwSize+5)=0xE0FF;
*(BYTE*)(dwAdress+0)=0xB8;
*(DWORD*)(dwAdress+1)=(dwThread);
*(WORD*)(dwAdress+5)=0xE0FF;
}
break;
case Detour_Type_0x68:
{
*(BYTE*)(dwDetour+dwSize+0)=0x68;
*(DWORD*)(dwDetour+dwSize+1)=(dwAdress+dwSize);
*(WORD*)(dwDetour+dwSize+5)=0xC3;
*(BYTE*)(dwAdress+0)=0x68;
*(DWORD*)(dwAdress+1)=(dwThread);
*(WORD*)(dwAdress+5)=0xC3;
}
break;
}
VirtualProtect((VOID*)dwAdress,dwSize,dwProtect,&dwProtect);
VirtualProtect((VOID*)dwDetour,dwSize+dwSize,0x20,&dwProtect);
return dwDetour;
}
}
Sleep(10);
return (0);
}
//-----------------------------------------HRESULT-----------------------------------------------------------------------------------------
typedef HRESULT (WINAPI* tEndScene)(LPDIRECT3DDEVICE9 pDevice);
tEndScene oEndScene = NULL;
typedef HRESULT (WINAPI* tDrawIndexedPrimitive)(LPDIRECT3DDEVICE9 pDevice, D3DPRIMITIVETYPE PrimType,INT BaseVertexIndex,UINT MinVertexIndex,UINT NumVertices,UINT startIndex,UINT primCount);
tDrawIndexedPrimitive oDrawIndexedPrimitive = NULL;
typedef HRESULT(WINAPI* tReset)(LPDIRECT3DDEVICE9 pDevice, D3DPRESENT_PARAMETERS* pPresentationParameters);
tReset oReset = NULL;
//----------------------------------------PrintText---------------------------------------------------------------------------------------
void PrintText(char pString[], int x, int y, D3DCOLOR col, ID3DXFont *font)
{
RECT FontRect = { x, y, x+500, y+30 };
font->DrawText( NULL, pString, -1, &FontRect, DT_LEFT | DT_WORDBREAK, col);
}
//-----------------------------------------FillRGB---------------------------------------------------------------------------------------
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 );
}
//----------------------------------------DrawCircle-----------------------------------------------------------------------------------------
void DrawCircle(int X, int Y, int radius, int numSides, DWORD Color)
{
D3DXVECTOR2 Line[128];
float Step = PI * 2.0 / numSides;
int Count = 0;
for (float a=0; a < PI*2.0; a += Step)
{
float X1 = radius * cos(a) + X;
float Y1 = radius * sin(a) + Y;
float X2 = radius * cos(a+Step) + X;
float Y2 = radius * sin(a+Step) + Y;
Line[Count].x = X1;
Line[Count].y = Y1;
Line[Count+1].x = X2;
Line[Count+1].y = Y2;
Count += 2;
}
g_pLine->Begin();
g_pLine->Draw(Line,Count,Color);
g_pLine->End();
}
//-----------------------------------Megaze1-----------------------------------------------------------------------------------------------
char Megaze1(void* address, int* val, char bytes)
{
DWORD Comander, Rezpect;
VirtualProtect(address, bytes, PAGE_EXECUTE_WRITECOPY, &Comander);
memcpy(address, val, bytes);
VirtualProtect(address,bytes,Comander,&Rezpect);
return(0);
}
//-----------------------------MENU PIZZA---------------------------------------------------------------------------------------------------
char Mtitle [] = "";
char *Moptfolder [] = {"Open", "Close"};
char *Moptonoff [] = {"Off", "On"};
char *optColor1 [11] = {"Off", "On"};
char *optColor2 [11] = {"Off", "On"};
void RebuildMenu(void)
{
MenuAddItem("MENU PIZZA" ,Moptfolder, &PIZZA, 2, MENUFOLDER);
if (PIZZA)
{
MenuAddItem("Chams Weapon",optColor2, &Qmo7, 11,MENUITEM);
MenuAddItem("Chams Player",optColor1, &Qmo2, 11,MENUITEM);
MenuAddItem("Glass Wall" ,Moptonoff, &Qmo1, 2, MENUITEM);
MenuAddItem("Asus" ,Moptonoff, &Qmo4, 2, MENUITEM);
MenuAddItem("Fullbri" ,Moptonoff, &Qmo8, 2, MENUITEM);
MenuAddItem("Wireframe" ,Moptonoff, &MENUPIZZA,3, MENUITEM);
MenuAddItem("No Smoke" ,Moptonoff, &Qmo5, 2, MENUITEM);
MenuAddItem("No Fog" ,Moptonoff, &Qmo6, 2, MENUITEM);
}
}
//-------------------------------VTableFunction---------------------------------------------------------------------------------------------------
PBYTE HookVTableFunction( PDWORD* dwVTable, PBYTE dwHook, INT Index )
{
DWORD dwOld = 0;
VirtualProtect((void*)((*dwVTable) + (Index) ), 0, PAGE_EXECUTE_READWRITE, &dwOld);
PBYTE pOrig = ((PBYTE)(*dwVTable)[Index]);
(*dwVTable)[Index] = (DWORD)dwHook;
VirtualProtect((void*)((*dwVTable) + (Index)), 0, dwOld, &dwOld);
return pOrig;
}
//---------------------------------Texture-------------------------------------------------------------------------------------------------
HRESULT QmoTexture(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;
}
//----------------------------------ProtectHook------------------------------------------------------------------------------------------------
PBYTE ProtectHook( PDWORD* dwVTable, PBYTE dwHook, INT Index )
{
DWORD d = 0;
DWORD ds = 0;
VirtualProtect((PVOID*)((*dwVTable) + (Index*4)), 4, PAGE_EXECUTE_READWRITE, &d);
Sleep(-0);
PBYTE pOrig = ((PBYTE)(*dwVTable)[Index]);
(*dwVTable)[Index] = (DWORD)dwHook;
memcpy(pOrig, dwVTable, ds);
Sleep(-0);
VirtualProtect((PVOID*)((*dwVTable) + (Index*4)), 4, d, &ds);
Sleep(-0);
VirtualProtect((void*)(dwVTable), 4, PAGE_EXECUTE_READWRITE, &d);
memcpy(pOrig,(void*)(pOrig), 4);
VirtualProtect((void*)(dwHook), 4, d, &ds);
return pOrig;
}
//----------------------------------DrawString------------------------------------------------------------------------------------------------
void DrawString(int x, int y, DWORD color, const char *fmt, ...)
{
RECT FontPos = { x, y, x + 30, y + 20 };
char buf[1024] = {'\0'};
va_list va_alist;
va_start(va_alist, fmt);
vsprintf(buf, fmt, va_alist);
va_end(va_alist);
g_pFont2->DrawText(NULL, buf, -1, &FontPos, DT_NOCLIP, color);
}
//------------------------------------Show timeinfo----------------------------------------------------------------------------------------------
void Time(int x,int y,D3DCOLOR color)
{
static float TimeElapsed = 0;
static char FinalString[MAX_PATH];
static time_t TimeValue;
static tm* timeinfo;
RECT FontPos = { x, y, x + 200, y + 16 };
time ( &TimeValue );
timeinfo = localtime ( &TimeValue );
if(timeinfo->tm_hour>12)
sprintf(FinalString, " [Time : %d:%02d:%02d PM] ",timeinfo->tm_hour - 12,timeinfo->tm_min,timeinfo->tm_sec);
else
sprintf(FinalString, " [Time : %d:%02d:%02d AM] ",timeinfo->tm_hour, timeinfo->tm_min,timeinfo->tm_sec);
g_pFont->DrawTextA(NULL, FinalString, -1, &FontPos, DT_NOCLIP, color);
}
//-------------------------------------current time---------------------------------------------------------------------------------------------
void currenttime(int x,int y,D3DCOLOR color)
{
static char cdate[20] = "" ;
struct tm * current_tm;
RECT FontPos = { x, y, x + 200, y + 16 };
time_t current_time;
time (¤t_time);
current_tm = localtime (¤t_time);
sprintf( cdate, " [Date : %d-%d-%02d] ",current_tm->tm_mon+1,current_tm->tm_mday,current_tm->tm_year-100+2000);
g_pFont->DrawTextA(NULL, cdate, -1, &FontPos, DT_NOCLIP, color);
}
//-------------------------------------EndScene---------------------------------------------------------------------------------------------
HRESULT WINAPI hkEndScene(LPDIRECT3DDEVICE9 pDevice)
{
myfile << "EndScene is Hook\n";
__asm PUSHAD;
while(!npDevice)
{
npDevice = pDevice;
}
//-----------------------------------------Sett your menu here-----------------------------------------------------------------------------------------
if(g_pFont == NULL) D3DXCreateFont(pDevice, 15, 0, FW_BOLD, 1, 0, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, ANTIALIASED_QUALITY, DEFAULT_PITCH | FF_DONTCARE, "Arial", &g_pFont); //Create fonts
if(g_pFont2 == NULL) D3DXCreateFont(pDevice, 15, 0, FW_BOLD, 1, 0, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, ANTIALIASED_QUALITY, DEFAULT_PITCH | FF_DONTCARE, "Arial", &g_pFont2); //Create fonts
if(g_pLine == NULL) D3DXCreateLine(pDevice, &g_pLine);
pDevice->GetViewport(&g_ViewPort);
pDevice->GetViewport(&g_ViewPort);
DrawString(419, 1, GREEN, "PIZZA MENU PUBLIC HACK @2013 BY Qmo");
currenttime(422,15,0xFFFF0000); // x,y = width and height
Time(540,15,0xFFFF0000); // x,y = width and height
if(Qmo == 0)
{
if(Mmax==0)
RebuildMenu();
MenuShow(8,20,g_pFont); // y,x = width and height
QmoMenu();
}
__asm POPAD;
return oEndScene(pDevice);
}
//---------------------------------------------DrawIndexedPrimitive---------------------------------------------------------------------------------------
HRESULT WINAPI hkDrawIndexedPrimitive(LPDIRECT3DDEVICE9 pDevice, D3DPRIMITIVETYPE PrimType,INT BaseVertexIndex,UINT MinVertexIndex,UINT NumVertices,UINT startIndex,UINT primCount)
{
myfile << "DIP is hooked\n";
if(pDevice->GetStreamSource(0, &Stream_Data, &Offset, &Stride) == D3D_OK)
Stream_Data->Release();
//----------------------------------------------------------------------------------------------------------------------------------
if ( Qmo1 == 1 )
{
if((Teroris || Police || Dino || Boddy || C5 || Police))
{
pDevice->SetRenderState( D3DRS_LIGHTING, false);
pDevice->SetRenderState(D3DRS_ZENABLE, false);
oDrawIndexedPrimitive(pDevice, PrimType, BaseVertexIndex, MinVertexIndex, NumVertices, startIndex, primCount); // This for Glass wall
pDevice->SetRenderState(D3DRS_ZENABLE, true);
}
else{
pDevice->SetRenderState(D3DRS_AMBIENT, false);
}
}
if ( Qmo2 == 1 )
if((Teroris || Police || Dino || Boddy || C5 || Police))
{
{
pDevice->SetRenderState(D3DRS_ZENABLE, false);
pDevice->SetTexture(0, Red);
oDrawIndexedPrimitive(pDevice, PrimType, BaseVertexIndex, MinVertexIndex, NumVertices, startIndex, primCount); // Chams for desert camp
pDevice->SetRenderState(D3DRS_ZENABLE, true);
pDevice->SetTexture(0, Green);
}
}
//----------------------------------------------------------------------------------------------------------------------------------
if (Qmo8==1)
{
if((Stride == 44 || Stride == 52 ))
{
pDevice->SetRenderState(D3DRS_ZENABLE, false);
pDevice->SetRenderState(D3DRS_FILLMODE, D3DFILL_WIREFRAME);
pDevice->SetRenderState( D3DRS_FILLMODE, D3DFILL_POINT );
( D3DFILL_FORCE_DWORD );
}
else{
pDevice->SetRenderState(D3DRS_ZENABLE, true);
pDevice->SetRenderState(D3DRS_FILLMODE, D3DFILL_SOLID);
}
}
//----------------------------------------------------------------------------------------------------------------------------------
if (Qmo7==1)
{
if((Stride == 32))
{
pDevice->SetRenderState(D3DRS_ZENABLE, false);
pDevice->SetTexture(0, Red);
oDrawIndexedPrimitive(pDevice, PrimType, BaseVertexIndex, MinVertexIndex, NumVertices, startIndex, primCount); //Chams Weapon
pDevice->SetRenderState(D3DRS_ZENABLE, true);
pDevice->SetTexture(0, Green);
}
}
if(MENUPIZZA==1)
{
if((Stride == 52 || Stride == 44))
{
pDevice->SetRenderState( D3DRS_FILLMODE, D3DFILL_WIREFRAME ); //this for WIREFRAME
pDevice->SetTexture(0, Green);
pDevice->SetTexture(0, Green);
}
else{
pDevice->SetRenderState( D3DRS_FILLMODE, D3DFILL_SOLID );
}
}
if( Qmo3 )
{
if ((Stride == 24) || (Stride == 23))
{
DWORD dwOldZEnable;
pDevice->GetRenderState(D3DRS_ZENABLE,&dwOldZEnable);
pDevice->SetRenderState(D3DRS_ZENABLE,D3DZB_FALSE);
oDrawIndexedPrimitive(pDevice, PrimType, BaseVertexIndex, MinVertexIndex, NumVertices, startIndex, primCount);
pDevice->SetRenderState(D3DRS_ZENABLE,dwOldZEnable);
}
}
if( Qmo4 == 1 )
{
if (Stride == 40)
{
pDevice->SetRenderState( D3DRS_SRCBLEND, 3 );
pDevice->SetRenderState( D3DRS_DESTBLEND, 4 );
pDevice->SetRenderState( D3DRS_ALPHABLENDENABLE, true ); // Wall ASUS
}}
if( Qmo5 == 1 )
{
if( Stride == 24 && NumVertices == 256 ||(Stride == 24 && NumVertices == 192)) // No Smoke
{
return D3D_OK;
}}
if( Qmo6 == 1 )
{
pDevice->SetRenderState(D3DRS_FOGENABLE, false);
}
return oDrawIndexedPrimitive(pDevice, PrimType, BaseVertexIndex, MinVertexIndex, NumVertices, startIndex, primCount); // NO FOG
}
//-----------------------------------------Reset is hooked-----------------------------------------------------------------------------------------
HRESULT WINAPI hkReset(LPDIRECT3DDEVICE9 pDevice, D3DPRESENT_PARAMETERS* pPresentationParameters)
{
myfile << "Reset is hooked\n";
if( g_pFont )
g_pFont->OnLostDevice();
if( g_pLine )
g_pLine->OnLostDevice();
HRESULT iReturnValue = oReset(pDevice, pPresentationParameters);
if(iReturnValue == D3D_OK) {
if( g_pFont )
g_pFont->OnResetDevice();
if( g_pLine )
g_pLine->OnResetDevice();
}
return iReturnValue;
}
//-------------------------------------------CreateWindow---------------------------------------------------------------------------------------
LRESULT CALLBACK MsgProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam){return DefWindowProc(hwnd, uMsg, wParam, lParam);}
void DX_Init(DWORD* table)
{
WNDCLASSEX wc = {sizeof(WNDCLASSEX),CS_CLASSDC,MsgProc,0L,0L,GetModuleHandle(NULL),NULL,NULL,NULL,NULL,"DX",NULL};
RegisterClassEx(&wc);
HWND hWnd = CreateWindow("DX",NULL,WS_OVERLAPPEDWINDOW,100,100,300,300,GetDesktopWindow(),NULL,wc.hInstance,NULL);
LPDIRECT3D9 pD3D = Direct3DCreate9( D3D_SDK_VERSION );
D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory( &d3dpp, sizeof(d3dpp) );
d3dpp.Windowed = TRUE;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;
LPDIRECT3DDEVICE9 pd3dDevice;
pD3D->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,hWnd,D3DCREATE_SOFTWARE_VERTEXPROCESSING,&d3dpp,&pd3dDevice);
DWORD* pVTable = (DWORD*)pd3dDevice;
pVTable = (DWORD*)pVTable[0];
table[ES] = pVTable[42];
table[DIP] = pVTable[82];
DestroyWindow(hWnd);
}
//--------------------------------------------LoopFunction--------------------------------------------------------------------------------------
DWORD WINAPI LoopFunction(LPVOID lpParam)
{
if( hooked == false) {
DWORD VTable[3] = {0};
while(LoadLibraryA("d3d9.dll")==NULL) {
Sleep(100);
}
DX_Init(VTable);
HOOK(EndScene,VTable[ES]); //Hook EndScene as a device discovery hook
while(!npDevice) {
Sleep(50);
}
UNHOOK(EndScene, VTable[ES]);
void* d3DIP = (void*)(dwD3D9 + (DWORD) + (DWORD) + (DWORD) + (PDWORD)BaseD3D + 1024); //[82]
void* d3ES = (void*)(dwD3D9 + (DWORD) + (DWORD) + (DWORD) + (PDWORD)BaseD3D + 1036); //[42]
{
int i;
for (i = 0 ; i <= 0 ; i++){
DWORD d,ds;
VirtualProtect((void*)(d3ES), 4, PAGE_EXECUTE_READWRITE, &d);
memcpy(d3ES,(void*)(d3ES), 4);
VirtualProtect((void*)(d3ES), 4, d, &ds);
}
}
int C;
for (C = 0 ; C <= 0 ; C++){
{
DWORD d,ds;
VirtualProtect((void*)(d3DIP), 4, PAGE_EXECUTE_READWRITE, &d);
memcpy(d3DIP,(void*)(d3DIP), 4);
VirtualProtect((void*)(d3DIP), 4, d, &ds);
}
}
CreateDetour((DWORD)hkDrawIndexedPrimitive, (DWORD)d3DIP*C,Detour_Type_0xB8,7);
CreateDetour((DWORD)hkEndScene, (DWORD)d3ES*C,Detour_Type_0xB8,7);
*(PDWORD)&oDrawIndexedPrimitive = VTable[DIP];
*(PDWORD)&oEndScene = VTable[ES];
hooked = true;
}
Sleep(10);
void* d3DIP = (void*)(dwD3D9 + (DWORD) + (DWORD) + (DWORD) + (PDWORD)BaseD3D + 1024); // [82]
void* d3ES = (void*)(dwD3D9 + (DWORD) + (DWORD) + (DWORD) + (PDWORD)BaseD3D + 1036); // [42]
{
DWORD Dark,ds;
VirtualProtect((void*)(d3ES), 4, PAGE_EXECUTE_READWRITE, &Dark);
memcpy((void*)d3ES, (const void*)d3ES, 4);
VirtualProtect((void*)(d3ES), 4, Dark, &ds);
}
int i;
for (i = 0 ; i <= 15 ; i++){
{
DWORD d,ds;
VirtualProtect((void*)(d3DIP), 4, PAGE_EXECUTE_READWRITE, &d);
memcpy((void*)d3DIP, (const void*)d3DIP, 4);
VirtualProtect((void*)(d3DIP), 4, d, &ds);
}
}
for (i = 0 ; i <= 15 ; i++){
if(memcmp((void *)d3DIP, (void *)d3DIP, 82) == 0 ) // Protect Hook Draw Indexed Primitive
ProtectHook((LPDWORD*)npDevice, (PBYTE)d3DIP, 82);
}
for (i = 0 ; i <= 15 ; i++){
if(memcmp((void *)d3ES, (void *)d3ES, 42) == 0 ) // Protect Hook End Scene
ProtectHook((LPDWORD*)npDevice, (PBYTE)d3ES, 42);
}
{
Sleep(100);
}
return 0;
}
BOOL WINAPI DllMain(HMODULE hModule, DWORD dwReason, LPVOID lpvReserved)
{
if(dwReason == DLL_PROCESS_ATTACH) {
CreateThread(0, 0,LoopFunction, 0, 0, 0);
}
return TRUE;
}