hooking

  • Thread starter Thread starter dal1979
  • Start date Start date
D

dal1979

BYTE Unhook[5] = {0x8B,0xFF,0x55,0x8B,0xEC};//Original Function

that is the old one i need to replace someone point me in right direction
plse to finding new one ,i got the new offsets for my hook here they r;

static DWORD dwBeginScene = 0x4FE57010;
static DWORD dwEndScene = 0x4FE571A0;
static DWORD dwdrawindexprimitive =0x4FE58830 ,
static DWORD dwSetStreamSource = 0x4fe53b10;
static DWORD dwSetViewport = 0x4FE52F70;



BYTE Unhook[5] = {0x,0x,0x,0x,0x};//Original Function Bytes.{need new code
here}
hand1 = GetCurrentProcess();
DWORD dwmodualBase=(DWORD)GetModuleHandle("d3d8.dll");
end = 0x4FE571A0;
dip = 0x4FE58830,
svp = 0x4FE52F70;
sss = 0x4fe53b10;


i have been searching google for days now all help appreciated many thx ,
but not sure wat im looking for, very new to this simple terms would be
great lol
 
ok so wat im trying to do is fix the hook on my wall hack so i hook in to the
game procees i ve done it all except the original function not sure how to
get a new one here is my whole source for it
BYTE Unhook[5] = {0x A1,0x00,0x60,0x00,0x33};//Original Function Bytes.
this is the line i need to figure out how to get


#include "stdafx.h"




#include <windows.h>
#include <detours.h>
#include <d3d8.h>
#include <d3dx8.h>
#include "log.h"
#include <fstream>
#include <iostream>
#pragma comment(lib, "d3dx8.lib")
#pragma comment(lib, "d3d8.lib")
using namespace std;
static DWORD dwBeginScene = 0x4FE57010;
static DWORD dwEndScene = 0x4FE571A0;
static DWORD dwDrawIndexedPrimitive =0x4FE58830 ;
static DWORD dwSetStreamSource = 0x4fe53b10;
static DWORD dwSetViewport = 0x4FE52F70;


int m_Stride;
int texnum;
int nNumVertices;
int nPrimitiveCount;

LPDIRECT3DTEXTURE8 Red,Yellow,Green,Blue,Purple,Pink,Orange;
bool Color = true;
bool Logger = false;
ofstream ofile;
char dlldir[320];
float ScreenCenterX = 0.0f;
float ScreenCenterY = 0.0f;
bool xhair = false;
bool cock = false;
bool cock2 = false;
HANDLE hand1 =NULL;
HANDLE hand2 =NULL;

DWORD bytes;

//Logger
int texarray[1000];
int arraycounter;
int delarray[500];
int dcount;
unsigned int arrc;
int i=0;


D3DCOLOR redt = D3DCOLOR_XRGB( 255, 0, 0 );


char *GetDirectoryFile(char *filename)
{
static char path[320];
strcpy_s(path, dlldir);
strcat_s(path, filename);
return path;
}

void __cdecl add_log (const char *fmt, ...)
{
if(ofile != NULL)
{
if(!fmt) { return; }

va_list va_alist;
char logbuf[256] = {0};

va_start (va_alist, fmt);
_vsnprintf (logbuf+strlen(logbuf), sizeof(logbuf) - strlen(logbuf),
fmt, va_alist);
va_end (va_alist);

ofile << logbuf << endl;
}
}

HRESULT GenerateTexture(IDirect3DDevice8 *pD3Ddev, IDirect3DTexture8
**ppD3Dtex, DWORD colour32)
{
if( FAILED(pD3Ddev->CreateTexture(8, 8, 1, 0, D3DFMT_A4R4G4B4,
D3DPOOL_MANAGED, ppD3Dtex)) )
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;
}


//=================================EndScene_Start=================================================================================//
typedef HRESULT ( WINAPI* oEndScene ) ( LPDIRECT3DDEVICE8 pDevice );
oEndScene pEndScene;

HRESULT WINAPI myEndScene(LPDIRECT3DDEVICE8 pDevice)
{
if(Color)
{
GenerateTexture(pDevice, &Red, D3DCOLOR_ARGB (255 , 255 , 0
, 0 ));
GenerateTexture(pDevice, &Yellow, D3DCOLOR_ARGB (255 , 255 ,
255 , 0 ));
GenerateTexture(pDevice, &Green, D3DCOLOR_ARGB (255 , 0 ,
255 , 0 ));
GenerateTexture(pDevice, &Blue, D3DCOLOR_ARGB (255 , 0 , 0
, 255 ));
GenerateTexture(pDevice, &Purple, D3DCOLOR_ARGB (255 , 102 , 0
, 153 ));
GenerateTexture(pDevice, &Pink, D3DCOLOR_ARGB (255 , 255 ,
20 , 147 ));
GenerateTexture(pDevice, &Orange, D3DCOLOR_ARGB (255 , 255 ,
165 , 0 ));
Color=false;
}

if(xhair)
{
D3DRECT rec2 = {ScreenCenterX-20, ScreenCenterY, ScreenCenterX+ 20,
ScreenCenterY+2};
D3DRECT rec3 = {ScreenCenterX, ScreenCenterY-20, ScreenCenterX+
2,ScreenCenterY+20};
pDevice->Clear(1, &rec2, D3DCLEAR_TARGET,redt, 0, 0);
pDevice->Clear(1, &rec3, D3DCLEAR_TARGET,redt, 0, 0);
}

//=============================================UnHooK_Start===================================================//

if((GetAsyncKeyState(VK_F5)&1))
{
int end =NULL;
int dip =NULL;
int svp =NULL;
int sss =NULL;




BYTE Unhook[5] = {0x A1,0x00,0x60,0x00,0x33};//Original Function Bytes.
hand1 = GetCurrentProcess();
DWORD dwmodualBase=(DWORD)GetModuleHandle("d3d8.dll");
end = 0x4FE571A0;
dip = 0x4FE58830,
svp = 0x4FE52F70;
sss = 0x4fe53b10;


WriteProcessMemory(hand1, (void*) end, Unhook, 5, &bytes);
WriteProcessMemory(hand1, (void*) dip, Unhook, 5, &bytes);
WriteProcessMemory(hand1, (void*) svp ,Unhook, 5, &bytes);
WriteProcessMemory(hand1, (void*) sss,Unhook, 5, &bytes);
}
//=========================================UnHook_End=========================================================//

if((GetAsyncKeyState(VK_F1)&1)){xhair=!xhair;}
if((GetAsyncKeyState(VK_F2)&1)){cock=!cock;}

return pEndScene(pDevice);
}
//====================================EndScene_End============================================================================//




//=================================Dip_Start============================================================================================//
typedef HRESULT ( WINAPI* oDrawIndexedPrimitive ) ( LPDIRECT3DDEVICE8
pDevice, D3DPRIMITIVETYPE pType, UINT nMinIndex, UINT nNumVertices, UINT
nStartIndex, UINT nPrimitiveCount );
oDrawIndexedPrimitive pDrawIndexedPrimitive;

HRESULT WINAPI myDrawIndexedPrimitive(LPDIRECT3DDEVICE8 pDevice,
D3DPRIMITIVETYPE pType, UINT nMinIndex, UINT nNumVertices, UINT nStartIndex,
UINT nPrimitiveCount)
{




if(cock)
{
texnum = (nNumVertices*100000)+nPrimitiveCount;
if(m_Stride==40 &&

(texnum==19400260)||(texnum==37900592)||(texnum==36500642)||(texnum==9900163
)||

(texnum==18300163)||(texnum==12000194)||(texnum==29800450)||(texnum==27100394)||
(texnum==42000546)||(texnum==5100056
)||(texnum==40900594)||(texnum==11700190)||
(texnum==9100118
)||(texnum==12500170)||(texnum==37000634)||(texnum==41700516)||
(texnum==7500121 )||(texnum==8500105
)||(texnum==12400168)||(texnum==37000650)||
(texnum==18000274)||(texnum==8800105
)||(texnum==36900650)||(texnum==19600314)||
(texnum==21800306)||(texnum==7500121 )||(texnum==8500105
)||(texnum==12400168)||
(texnum==21800306)||(texnum==36900650)||(texnum==7500121
)||(texnum==37000650)||
(texnum==18000274)||(texnum==7500121 )||(texnum==8500105
)||(texnum==38000658)||

(texnum==22100268)||(texnum==62400752)||(texnum==27900456)||(texnum==45700654)||
(texnum==4800040
)||(texnum==83600752)||(texnum==33400477)||(texnum==38100666)||
(texnum==2800036
)||(texnum==62400752)||(texnum==29700492)||(texnum==84900778)||

(texnum==27500442)||(texnum==52100658)||(texnum==62400752)||(texnum==33600552)||

(texnum==44100646)||(texnum==18000274)||(texnum==37200508)||(texnum==45700654)||
(texnum==37200508)||(texnum==52100658)||(texnum==52100658) &&



(nNumVertices == 100 && nPrimitiveCount == 121) || //Foot
(nNumVertices == 105 && nPrimitiveCount == 168) || //Right Arm
(nNumVertices == 132 && nPrimitiveCount == 180) || //Hand
(nNumVertices == 159 && nPrimitiveCount == 200) || //Left Arm
(nNumVertices == 338 && nPrimitiveCount == 534) || //Underbody
thanks japennese guy =)
//(nNumVertices == 448 && nPrimitiveCount == 776) || //Head
(nNumVertices == 804 && nPrimitiveCount == 1016) || //Body //SRG Option
item
(nNumVertices == 109 && nPrimitiveCount == 110) || //Bulletproof Vest
(nNumVertices == 336 && nPrimitiveCount == 532)) //Battle Pants

{
pDevice->SetRenderState(D3DRS_ZENABLE, D3DZB_FALSE);
pDevice->SetRenderState(D3DRS_ZFUNC,D3DCMP_NEVER);
pDevice->SetTexture(0,Orange);
//pDevice->SetRenderState(D3DRS_FILLMODE, D3DFILL_WIREFRAME );

pDrawIndexedPrimitive(pDevice, pType, nMinIndex, nNumVertices, nStartIndex,
nPrimitiveCount);

//pDevice->SetRenderState(D3DRS_FILLMODE, D3DFILL_SOLID );
pDevice->SetRenderState(D3DRS_ZENABLE, D3DZB_TRUE);
pDevice->SetRenderState(D3DRS_ZFUNC,D3DCMP_LESSEQUAL);
pDevice->SetTexture(0,Pink);
}

if(m_Stride==40 && texnum== 21300174)
{
pDevice->SetRenderState(D3DRS_ZENABLE, D3DZB_FALSE);
pDevice->SetRenderState(D3DRS_ZFUNC,D3DCMP_NEVER);
pDevice->SetTexture(0,Green);//GreenNade
pDrawIndexedPrimitive(pDevice, pType, nMinIndex, nNumVertices, nStartIndex,
nPrimitiveCount);
pDevice->SetRenderState(D3DRS_ZENABLE, D3DZB_TRUE);
pDevice->SetRenderState(D3DRS_ZFUNC,D3DCMP_LESSEQUAL);
pDevice->SetTexture(0,Purple);
}


if(nNumVertices == 158 && nPrimitiveCount == 131)
{
pDevice->SetRenderState(D3DRS_ZENABLE, D3DZB_FALSE);
pDevice->SetRenderState(D3DRS_ZFUNC,D3DCMP_NEVER);
pDevice->SetTexture(0,Red);//GreenNade
pDrawIndexedPrimitive(pDevice, pType, nMinIndex, nNumVertices, nStartIndex,
nPrimitiveCount);
pDevice->SetRenderState(D3DRS_ZENABLE, D3DZB_TRUE);
pDevice->SetRenderState(D3DRS_ZFUNC,D3DCMP_LESSEQUAL);
pDevice->SetTexture(0,Yellow);
}

if (nNumVertices == 171 && nPrimitiveCount == 143)
{

pDevice->SetRenderState(D3DRS_ZENABLE, D3DZB_FALSE);
pDevice->SetRenderState(D3DRS_ZFUNC,D3DCMP_NEVER);
pDevice->SetTexture(0,Red);//GreenNade
pDrawIndexedPrimitive(pDevice, pType, nMinIndex, nNumVertices, nStartIndex,
nPrimitiveCount);
pDevice->SetRenderState(D3DRS_ZENABLE, D3DZB_TRUE);
pDevice->SetRenderState(D3DRS_ZFUNC,D3DCMP_LESSEQUAL);
pDevice->SetTexture(0,Yellow);
}



if(m_Stride==40 &&//face,mask etc...
(texnum==36700612) ||
(texnum==9600172 ) ||
(texnum==14200236) ||
(texnum==37800552) ||
(texnum==28100486) ||
(texnum==35500568) ||
(texnum==2200024 ) ||
(texnum==16200243) ||
(texnum==31900466) ||
(texnum==19300342) ||
(texnum==36200604) ||
(texnum==21300290) ||
(texnum==35700558) ||
(texnum==22100396) ||
(texnum==36100604) ||
(texnum==27100464) ||
(texnum==11400180) ||
(texnum==34900580) ||
(texnum==13200212) ||
(texnum==34700538) ||
(texnum==19500352)&&
(nNumVertices == 448 && nPrimitiveCount == 776))

{
pDevice->SetTexture(0,Blue);
}


{
pDevice->SetRenderState(D3DRS_FOGENABLE,false);
}

/*Logger
if(m_Stride==40){


while(GetAsyncKeyState(VK_NUMPAD1)&1) arrc--; //Used as manual index for
adding textures to delarray
while(GetAsyncKeyState(VK_NUMPAD3)&1) arrc++;
bool alrdy=false;
bool inarr=false;

if(texarray[arrc]==texnum)
if(delarray==texarray[arrc])
alrdy=true;
for(int i=0;i<dcount;i++) //sees if said texture is in delarray
if(delarray==texnum)
inarr=true;
if(texarray[arrc]==texnum || inarr){ //If true, color model differently
LPDIRECT3DTEXTURE8 texCol;
DWORD dwOldZEnable = D3DZB_TRUE;
pDevice->SetTexture(0, NULL);
pDevice->GetRenderState(D3DRS_ZENABLE, &dwOldZEnable);
pDevice->SetRenderState(D3DRS_ZENABLE, D3DZB_FALSE);
if(alrdy) //Different colors for selected models that are
already being logged (For removal from array)
texCol=Blue;
else
texCol=Red;
pDevice->SetTexture(0, texCol);
pDrawIndexedPrimitive(pDevice, pType, nMinIndex, nNumVertices,
nStartIndex, nPrimitiveCount);
pDevice->SetRenderState(D3DRS_ZENABLE, dwOldZEnable);

}
}
if(GetAsyncKeyState(VK_F5)&1) add_log("Logged tesx: %i", texarray[arrc]);
//F5 will print currently selected texnum to logfile
if(GetAsyncKeyState(VK_F6)&1) { //For adding/removing textures to array
bool inarr=true;
for(int k=0;k<dcount;k++){
if(delarray[k]==texarray[arrc])
{
inarr=false;//Found selected texture to already exist
delarray[k]=0;//Delete texture
break;//Cancel loop
}
}
if(inarr==true)
{
delarray[dcount]=texarray[arrc];//Add texture
dcount++;
}
}
if(GetAsyncKeyState(VK_F7)&1){
int total=1;
add_log("omfg values?!? {");
for(int x=0;x<dcount;x++)//Loops through all recorded variables and
prints them in a nice array based format
if(delarray[x]){
add_log("%i,",delarray[x]); //add_log2==add_log but without endl
total++;
}
add_log("}; %i variables in array",total);
}
bool found = false; //THIS PART CREDITS TO KRYPTEC
for(int y=0; y<arraycounter; y++) //THIS IS HIS LOGGING FUNCTION
{
if(texnum==texarray[y])found=true; //I JUST CREATED AN INTERFACE FOR IT
}
if(!found && arraycounter < 1000)
{
texarray[arraycounter]=texnum;
arraycounter++;
}*/


}
return pDrawIndexedPrimitive(pDevice, pType, nMinIndex, nNumVertices,
nStartIndex, nPrimitiveCount);
}
//=====================================Dip_End===========================================================================//


//=====================================Sss_Start==========================================================================//
typedef HRESULT ( WINAPI* oSetStreamSource ) ( LPDIRECT3DDEVICE8 pDevice,
UINT nStreamNumber, LPDIRECT3DVERTEXBUFFER8 pStreamData, UINT nStride );
oSetStreamSource pSetStreamSource;

HRESULT WINAPI mySetStreamSource(LPDIRECT3DDEVICE8 pDevice, UINT
nStreamNumber, LPDIRECT3DVERTEXBUFFER8 pStreamData, UINT nStride)
{
if(nStreamNumber==0)
m_Stride = nStride;

return pSetStreamSource(pDevice, nStreamNumber, pStreamData, nStride);
}
//====================================Sss_End============================================================================//

//====================================Svp_Start==========================================================================//
typedef HRESULT (WINAPI* oSetViewport)(LPDIRECT3DDEVICE8 pDevice,CONST
D3DVIEWPORT8* pViewport);
oSetViewport pSetViewport;

HRESULT WINAPI mySetViewport(LPDIRECT3DDEVICE8 pDevice,CONST D3DVIEWPORT8*
pViewport)
{
ScreenCenterX = ( float )pViewport->Width / 2;
ScreenCenterY = ( float )pViewport->Height / 2;

return pSetViewport(pDevice,pViewport);
}
//===================================Svp_End=============================================================================//

typedef HRESULT ( WINAPI* oBeginScene ) ( LPDIRECT3DDEVICE8 pDevice );
oBeginScene pBeginScene;

HRESULT WINAPI myBeginScene(LPDIRECT3DDEVICE8 pDevice)
{
if((GetAsyncKeyState(VK_F6)&1))
{
pEndScene = (oEndScene)DetourFunction((PBYTE)dwEndScene,
(PBYTE)myEndScene);
pDrawIndexedPrimitive =
(oDrawIndexedPrimitive)DetourFunction((PBYTE)dwDrawIndexedPrimitive,
(PBYTE)myDrawIndexedPrimitive);
pSetStreamSource =
(oSetStreamSource)DetourFunction((PBYTE)dwSetStreamSource,
(PBYTE)mySetStreamSource);

pSetViewport=(oSetViewport)DetourFunction((PBYTE)dwSetViewport,(PBYTE)mySetViewport);
}

return pBeginScene(pDevice);
}


BOOL WINAPI DllMain ( HMODULE hModule, DWORD dwReason, LPVOID lpReserved )
{
DisableThreadLibraryCalls(hModule);

if ( dwReason == DLL_PROCESS_ATTACH )
{

//=========Log==========================//
GetModuleFileName(hModule, dlldir, 512);
for(int i = strlen(dlldir); i > 0; i--) { if(dlldir == '\\') {
dlldir[i+1] = 0; break; } }
ofile.open(GetDirectoryFile("log.txt"), ios::app);
//=========Log=========================//

pBeginScene = (oBeginScene)DetourFunction((PBYTE)dwBeginScene,
(PBYTE)myBeginScene);
pEndScene = (oEndScene)DetourFunction((PBYTE)dwEndScene,
(PBYTE)myEndScene);
pDrawIndexedPrimitive =
(oDrawIndexedPrimitive)DetourFunction((PBYTE)dwDrawIndexedPrimitive,
(PBYTE)myDrawIndexedPrimitive);
pSetStreamSource =
(oSetStreamSource)DetourFunction((PBYTE)dwSetStreamSource,
(PBYTE)mySetStreamSource);

pSetViewport=(oSetViewport)DetourFunction((PBYTE)dwSetViewport,(PBYTE)mySetViewport);

}
return TRUE;
}



any help would be great,

Patrice said:
You may want to check a DirectX or XNA forum (such as
http://forums.xna.com/forums/).

Also you may want to give there a higher level view of what you are trying


to do as your overall goal is not clear at least to me (you want to
implement a sofware renderer, you already have one as well as debugging
tools such as Pix ???)...

--
Patrice

dal1979 said:
BYTE Unhook[5] = {0x8B,0xFF,0x55,0x8B,0xEC};//Original Function

that is the old one i need to replace someone point me in right direction
plse to finding new one ,i got the new offsets for my hook here they r;

static DWORD dwBeginScene = 0x4FE57010;
static DWORD dwEndScene = 0x4FE571A0;
static DWORD dwdrawindexprimitive =0x4FE58830 ,
static DWORD dwSetStreamSource = 0x4fe53b10;
static DWORD dwSetViewport = 0x4FE52F70;



BYTE Unhook[5] = {0x,0x,0x,0x,0x};//Original Function Bytes.{need new code
here}
hand1 = GetCurrentProcess();
DWORD dwmodualBase=(DWORD)GetModuleHandle("d3d8.dll");
end = 0x4FE571A0;
dip = 0x4FE58830,
svp = 0x4FE52F70;
sss = 0x4fe53b10;


i have been searching google for days now all help appreciated many thx ,
but not sure wat im looking for, very new to this simple terms would be
great lol
 
Back
Top