[C++] 纯文本查看 复制代码
//By Jocleys 27/05/2014 @ zhihu.com
#include "stdafx.h"
#include "d3d9.h"
#include "D3dx9core.h"
#include "Bgod.h"
#include "VMProtectSDK.h"
#pragma comment(lib, "d3d9.lib")
#pragma comment(lib, "d3dx9.lib")
//定义颜色
#define D3DCOLOR_XRGB(r,g,b) D3DCOLOR_ARGB(0xff,r,g,b)
//
//HOOK 变量区
HWND GameHwnd;
DWORD dw_retAdd;
int i_timetogo=0;
int x;
LPDIRECT3D9 m_pD3D=NULL;
//end
//字体变量区
ID3DXFont* f_dian;
ID3DXFont* f_id;
ID3DXFont* f_welcome;
ID3DXFont* f_deng;
ID3DXFont* f_box;
//
//测试 娱乐模式全图函数变量区
RECT re_main;//游戏窗口句柄
DWORD dw_acbase=0x166c440;//人物基质 15679c4 155E754
DWORD dw_31acbase=0x166c440;//31版本人物基质
DWORD dw_base_eng;
int banben;
float f_watchax;
float f_watchay;
float f_watchx;
float f_watchy;
int i_watchax=0;
int i_watchay=0;
int i_watchx=0;
int i_watchy=0;
char ch_watchax[10];
char ch_watchay[10];
char ch_watchx[10];
char ch_watchy[10];
DWORD dw_base_eng1=0x0C0C40;
DWORD dw_31base_eng1=0x0C0C40; //31版本
DWORD dw_dengbase=0x15d3afc;
DWORD dw_bossbase=0x15d39c8;
float f_bx;
float f_by;
char* ch_bid[30];
int myBRectx[30];
int myBRecty[30];
int i_many=0;//参展人数
bool b_flase=true;//是否继续扫描人数总量
float ac_x=0;//整数人物X 如果为-1 则说明到尽头了
float ac_y=0;
float ac_hp=0;
float ac_mp=0;
int i_index=0;//游戏数组下表
int i_drawx;//测试用画图坐标
char st[]="●";
char st1[]="比赛尚未开始!";
int r_many;//读取出来的
char ch_r_many[3];
int i_ac_x;
int i_ac_y;
int color[1][3];
char ch_a[5];
char ch_r[5];
char ch_g[5];
char ch_sys[2];
int sys=0;
char ch_dianh[4];
int dianh;
char ch_dianw[4];
int dianw;
int myDRectx[60];
int myDRecty[60];
float d_x=0;
float d_y=0;
int bgchangey;
//
//画图函数 重要!
int retchar(char* c1,char* c2)
{
if ((CString)c1==(CString)c2)
{
return 0;
}return 1;
}
ID3DXFont* _stdcall CreateMyFont(LPDIRECT3DDEVICE9 pDxdevice,int model)
{
// pDxdevice->BeginScene();//开始绘制
//
//
D3DXFONT_DESCA lf;
ZeroMemory(&lf, sizeof(D3DXFONT_DESCA));
if (model==1)
{
lf.Height = 16; //字体高度
lf.Width = 8; // 字体宽度
lf.Weight = 100;
}
if(model==2){
lf.Height = 20; //字体高度
lf.Width =10; // 字体宽度
lf.Weight = 100;
}
if(model==3){
lf.Height = 20; //字体高度
lf.Width =10; // 字体宽度
lf.Weight = 100;
}
if (model==4)
{
lf.Height = 16; //字体高度
lf.Width =8; // 字体宽度
lf.Weight = 100;
}
lf.Italic = false;
lf.CharSet = DEFAULT_CHARSET;
if (sys==1)
{
strcpy(lf.FaceName, "宋体");
}else strcpy(lf.FaceName, "微软雅黑"); // 字型
ID3DXFont* font=NULL;
if(D3D_OK!=D3DXCreateFontIndirect(pDxdevice, &lf, &font)) //创建字体对象
return 0;
return font;
}
BOOL _stdcall DrawMyText123(LPDIRECT3DDEVICE9 pDxdevice,TCHAR* strText ,int nbuf,int x,int y,ID3DXFont* myFont,int colorINT)
{
RECT myrect;
myrect.top=y; //文本块的y坐标
myrect.left=x; //文本块的左坐标
myrect.right=500+myrect.left;
myrect.bottom=500+myrect.top;
pDxdevice->BeginScene();//开始绘制
switch(colorINT){
case 1: myFont->DrawText(NULL,strText,nbuf,&myrect, DT_TOP | DT_LEFT,D3DCOLOR_XRGB(255,0,0));break;
case 2: myFont->DrawText(NULL,strText,nbuf,&myrect, DT_TOP | DT_LEFT,D3DCOLOR_XRGB(255,255,255));break;
case 3: myFont->DrawText(NULL,strText,nbuf,&myrect, DT_TOP | DT_LEFT,D3DCOLOR_XRGB(255,255,0));break;
case 4: myFont->DrawText(NULL,strText,nbuf,&myrect, DT_TOP | DT_LEFT,D3DCOLOR_XRGB(0,191,255));break;
}
pDxdevice->EndScene();
return true;
}
//画图函数 结束!
int ssa;
char ch_chx[6];
char ch_chy[6];
int myRectx[30];
int myRecty[30];
int myHp[30];
int myMp[30];
char ch_num[2];
int i_real_x;//人物真坐标 x
int i_real_y;
float f_mys_x;//转换成我的屏幕上应该对应的坐标
float f_mys_y;
char ch_mys_x[20];
char ch_mys_y[20];
int i_mys_x;
int i_mys_y;
int i_wh;
char ch_wh[2];
char ch_name_1[3];
char ch_name_2[3];
int i_an;//取总人数的一半
char ch_many[2];//取ID
//测试绘图转换率!
char ch_bgmapX[10];
char ch_bgmapY[10];
int i_bgmapX;//先从X的画图开始 X还是有些不准
int i_bgmapY;
int i_smapX;
int i_smapY;
char ch_smapX[10];
char ch_smapY[10];
char ch_bgxx[10];
char ch_model[2];
int i_model;
float f_bgxx;
int i_gd_an;
int i_sgz_jici=0;//第一个人读的
int i_sgz_jici_2=0;
int idcc=56; //28
char* id;//尝试获取人名
char* ch_id[30];//
char* did;
char* ch_did[30];//灯ID
int allx;
int ally;
char basex[10];
char basey[10];
char c_allx[10];
char c_ally[10];
char cx[10];
char cy[10];
int realx;
//int clx;
int rx;
int ry;
int cl_x;//client
int cl_y;
float l123;
float l321;
char ch_hp[5];
char ch_mp[5];
char ch_hp_b[10];
char ch_mp_b[10];
int i_dindex=0;
int i_dmany=0;
bool b_dstart=true;
char ch_dx[6];
char ch_dy[6];
char* zcid="侦查*孔明灯";
char* fyid="反隐*孔明灯";
char* ch_boss1="蛤蟆老大";
char* ch_boss2="熊王黑墨";
char* ch_boss3="恶麒麟";
char* ch_boss4="冥鬼王";
char* ch_boss5="上古炎魔";
char* ch_cmpme;
char* ch_xian="_____________";
int i_gogoy;
char ch_forhp[]="Hp:";
float bgfory;
float realy;
char ch_tryy[6];
float f_tryy;
char ch_tryx[6];
float f_tryx;
char ch_bghp[5];
int i_bossmany;
//
int strcmp(char* sz1,char* sz2)
{
while(*sz1++==*sz2++ && *sz1 && *sz2);
return sz1-sz2;
}
void _stdcall bmapname(LPDIRECT3DDEVICE9 pDxdevice,int x,int y,int many)
{
_asm
{
mov eax,[dw_base_eng]//大地图
add eax,0x8
mov ebx,[eax]
mov [f_watchax],ebx
add eax,0x4
mov ebx,[eax]
mov [f_watchay],ebx
add eax,0x8
mov ebx,[eax]
mov [f_watchx],ebx
add eax,0x4
mov ebx,[eax]
mov [f_watchy],ebx
}
sprintf(ch_watchax,"%f",f_watchax);
i_watchax=_ttoi(ch_watchax);
sprintf(ch_watchay,"%f",f_watchay);
i_watchay=_ttoi(ch_watchay);
sprintf(ch_watchx,"%f",f_watchx);
i_watchx=_ttoi(ch_watchx);
sprintf(ch_watchy,"%f",f_watchy);
i_watchy=_ttoi(ch_watchy);
// if(bgchangey==0)bgchangey=j_
realx=i_watchx-(int)i_watchax/2;
allx=realx+i_watchax;
ally=i_watchy+i_watchay;
if (x>realx&&x<allx)//判断坐标
{
if (y>i_watchy&&y<ally)
{
//坐标转换测试 大-屏幕
//GetPrivateProfileStringA("try","x","",ch_tryx,8,"C:\\test.ini");//读取对应信息
// GetPrivateProfileStringA("try","y","",ch_tryy,8,"C:\\test.ini");//读取对应信息
// f_tryx=atof(ch_tryx);
// f_tryy=atof(ch_tryy);
rx=x-realx;
l123=1.000*re_main.right/f_watchax*0.94*rx;
ry=y-i_watchy;
// sprintf(basey,"%d",re_main.top);
sprintf(ch_bghp,"%d",myHp[many]);
//i_watchay+=650;
l321=1.000*re_main.bottom/f_watchay*1.06*ry;
i_gogoy=re_main.bottom-l321+6;
if(i_model==2)i_gogoy+=40;
DrawMyText123(pDxdevice,ch_id[many],sizeof ch_id[many],l123,i_gogoy,f_id,2);
DrawMyText123(pDxdevice,ch_forhp,2,l123+60,i_gogoy,f_id,2);
if ((int)strlen(ch_bghp)>0)
{
DrawMyText123(pDxdevice,ch_bghp,(int)strlen(ch_bghp),l123+92,i_gogoy,f_id,1);//hp
}
DrawMyText123(pDxdevice,ch_xian, (int)strlen(ch_xian),l123,i_gogoy+3,f_id,2);
}
}
}
int goY=100;
char ch_many123[2];
void _stdcall DrawHpMp(LPDIRECT3DDEVICE9 pDxdevice,int many)
{
goY=1+many;
if(many>9)many-=9;
goY=goY*30;
goY=goY+100;
sprintf(ch_hp,"%d",myHp[many]);
sprintf(ch_mp,"%d",myMp[many]);
DrawMyText123(pDxdevice,ch_id[many],sizeof ch_id[many],re_main.right-150,goY,f_id,2);//id
DrawMyText123(pDxdevice,":",1,re_main.right-110,goY,f_id,2);//点
if ((int)strlen(ch_hp)>0&&(int)strlen(ch_mp)>0)
{
DrawMyText123(pDxdevice,ch_hp,(int)strlen(ch_hp) ,re_main.right-100,goY,f_id,1);//hp
DrawMyText123(pDxdevice,ch_mp,(int)strlen(ch_mp),re_main.right-50,goY,f_id,3);//MP
}
}
int i_bigsmx=0;
char ch_bigsmx[6];
float f_clientx;
int i_clientx;
int i_clientmodel;
int _stdcall changex(int bgx)
{
i_clientx=0;
GetPrivateProfileStringA("model","playone","",ch_bigsmx,6,"C:\\mscc.ini");//读取模式信息 ,1为默认 2为经典
i_clientmodel=_ttoi(ch_bigsmx);
if (i_clientmodel==2)
{
if((int)re_main.right!=1024){
i_clientx=(int)re_main.right-1024;
i_clientx=1.0000*i_clientx*0.5059+0.6;
// i_clientx=i_clientx+1;
}
}
GetPrivateProfileStringA("model","play","",ch_model,2,"C:\\mscc.ini");//读取对应信息
i_model=_ttoi(ch_model);
if(i_model==1){
i_smapX=84;
i_bgmapX=8100;}
if(i_model==2){
i_smapX=91;
i_bgmapX=8500;}
if(i_model==3){
i_smapX=84;
i_bgmapX=7900;}
if (bgx>0)//说明在1 3象限
{
f_bgxx=bgx / 97;
sprintf(ch_bgxx,"%f",f_bgxx);
return(_ttoi(ch_bgxx)+i_smapX+i_clientx);
}else{
bgx=bgx*(-1);
bgx=i_bgmapX-bgx;
f_bgxx=bgx / 97;
sprintf(ch_bgxx,"%f",f_bgxx);
return(_ttoi(ch_bgxx)+i_clientx);
}
}
int i_bigsmy=0;
char ch_bigsmy[6];
int _stdcall changey(int bgy)
{
GetPrivateProfileStringA("model","play","",ch_model,2,"C:\\mscc.ini");//读取对应信息
i_model=_ttoi(ch_model);
if(i_model==1){
i_smapY=100;
i_bgmapY=9900;}
if(i_model==2){
i_smapY=105;
i_bgmapY=10400;}
if(i_model==3){
i_smapY=105;
i_bgmapY=10800;}
if (bgy>0)//说明在1 3象限
{
// GetPrivateProfileStringA("try","y","",ch_bigsmy,6,"C:\\test.ini");//读取对应信息
// i_bigsmy=_ttoi(ch_bigsmy);
f_bgxx=bgy / 98;
sprintf(ch_bgxx,"%f",f_bgxx);
if (i_clientmodel==2)
{
return(_ttoi(ch_bgxx)+i_smapY-6);
}return(_ttoi(ch_bgxx)+i_smapY);
}else{
// GetPrivateProfileStringA("try","x","",ch_bigsmy,6,"C:\\test.ini");//读取对应信息
// i_bigsmy=_ttoi(ch_bigsmy);
bgy=bgy*(-1);
bgy=i_bgmapY-bgy;
f_bgxx=bgy / 98;
sprintf(ch_bgxx,"%f",f_bgxx);
if (i_clientmodel==2)
{
return(_ttoi(ch_bgxx)-2);
}return(_ttoi(ch_bgxx));
}
}
void _stdcall getIMANY()
{
i_many=0;//初始化变量
b_flase=true;
ac_x=0;
while (b_flase)
{
i_index=i_many*4;
__try
{
_asm
{
push eax
push ebx
mov eax,[dw_acbase]
mov eax,[eax]
add eax,0x274
mov eax,[eax]
add eax,0x30
mov eax,[eax]
mov ebx,[i_index] //将数组下表传入eax
add eax,ebx //eax+index
mov eax,[eax]
add eax,0x44
mov ebx,[eax]
add ebx,0x154
mov ebx,[ebx]
mov [ac_x],ebx
mov ebx,[eax]
add ebx,0x158
mov ebx,[ebx]
mov [ac_y],ebx
mov ebx,[eax]
add ebx,0x88 //人名
mov id,ebx
mov ebx,[eax]
add ebx,0xAC
mov ebx,[ebx]
mov [ac_hp],ebx
mov ebx,[eax]
add ebx,0xb0
mov ebx,[ebx]
mov [ac_mp],ebx
//
pop ebx
pop eax
}
sprintf(ch_chx,"%f",ac_x);
i_ac_x=_ttoi(ch_chx);
myRectx[i_many]=i_ac_x;
sprintf(ch_chy,"%f",ac_y);
i_ac_y=_ttoi(ch_chy);
myRecty[i_many]=i_ac_y;
sprintf(ch_hp_b,"%f",ac_hp);
myHp[i_many]=_ttoi(ch_hp_b);
sprintf(ch_mp_b,"%f",ac_mp);
myMp[i_many]=_ttoi(ch_mp_b);
ch_id[i_many]=id;
i_many+=1;
}
__except(EXCEPTION_EXECUTE_HANDLER)
{
b_flase=false;
}
}
}
void _stdcall getDeng()
{
i_dmany=0;
b_dstart=true;
i_index=0;
while(b_dstart)
{
i_dindex=i_dmany*92+24;
__try{
_asm{
push eax
push ebx
mov eax,[dw_dengbase]
mov eax,[eax]
mov ebx,[i_dindex]
add eax,ebx
mov eax,[eax]
add eax,0x38
mov ebx,[eax]
add ebx,0x150
mov ebx,[ebx]
mov [d_x],ebx
mov ebx,[eax]
add ebx,0x154
mov ebx,[ebx]
mov [d_y],ebx
mov ebx,[eax]
add ebx,0x84
mov id,ebx
pop ebx
pop eax
}
sprintf(ch_dx,"%f",d_x);
myDRectx[i_dmany]=_ttoi(ch_dx);
sprintf(ch_dy,"%f",d_y);
myDRecty[i_dmany]=_ttoi(ch_dy);
ch_did[i_dmany]=id;
i_dmany+=1;
}
__except(EXCEPTION_EXECUTE_HANDLER)
{
b_dstart=false;
}
}
}
void _stdcall getBoss() ////////////有错误!!!!!!!!!!!!
{
i_bossmany=0;
b_dstart=true;
i_index=0;
while(b_dstart)
{
i_dindex=i_bossmany*92+24;
__try{
_asm{
push eax
push ebx
mov eax,[dw_bossbase]
mov eax,[eax]
mov ebx,[i_dindex]
add eax,ebx
mov eax,[eax]
add eax,0x38
mov ebx,[eax]
add ebx,0x150
mov ebx,[ebx]
mov [f_bx],ebx
mov ebx,[eax]
add ebx,0x154
mov ebx,[ebx]
mov [f_by],ebx
mov ebx,[eax]
add ebx,0x84
mov id,ebx
pop ebx
pop eax
}
sprintf(ch_dx,"%f",f_bx);
myBRectx[i_bossmany]=_ttoi(ch_dx);
sprintf(ch_dy,"%f",f_by);
myBRecty[i_bossmany]=_ttoi(ch_dy);
ch_bid[i_bossmany]=id;
i_bossmany+=1;
}
__except(EXCEPTION_EXECUTE_HANDLER)
{
b_dstart=false;
}
}
}
void _stdcall YLSG(LPDIRECT3DDEVICE9 pDxdevice)//参数为设备接口
{
VMProtectBegin("z1");
//SE_PROTECT_START();
getIMANY();
// getDeng();
// getBoss();
//大地图数据
// if(::FindWindowA(NULL,"大神全图")==NULL)return;//不存在就返回
VMProtectEnd();
// SE_PROTECT_END();
sprintf(ch_many,"%d",i_many);
GetPrivateProfileStringA("model","play","",ch_model,2,"C:\\mscc.ini");//读取对应信息
i_model=_ttoi(ch_model);
if (i_model==3)//官渡
{
if (i_many>=3)
{
while(i_many>0)
{
i_many=i_many-1;
i_mys_x=changex(myRectx[i_many]);
i_mys_y=changey(myRecty[i_many]);
DrawMyText123(pDxdevice,st,sizeof st-1,i_mys_x,(int)re_main.bottom-i_mys_y,f_dian,1); //画点
}
}
}
if (i_model!=3)
{
if (i_many>=2)//如果有效参赛人数超过两个说明比赛开始了
{
while (i_dmany>0)
{
i_dmany-=1;
i_mys_x=changex(myDRectx[i_dmany]);
i_mys_y=changey(myDRecty[i_dmany]);
ch_cmpme=ch_did[i_dmany];
if (retchar(ch_cmpme,zcid)==0)
{
DrawMyText123(pDxdevice,"△",2,i_mys_x,(int)re_main.bottom-i_mys_y,f_deng,3);
}
if (retchar(ch_cmpme,fyid)==0)
{
DrawMyText123(pDxdevice,"反",2,i_mys_x,(int)re_main.bottom-i_mys_y,f_deng,3);
}
}
while (i_bossmany>0)
{
i_bossmany-=1;
i_mys_x=changex(myBRectx[i_bossmany]);
i_mys_y=changey(myBRecty[i_bossmany]);
ch_cmpme=ch_bid[i_bossmany];
if(retchar(ch_cmpme,ch_boss1)==0||retchar(ch_cmpme,ch_boss2)==0||retchar(ch_cmpme,ch_boss3)==0||retchar(ch_cmpme,ch_boss4)==0||retchar(ch_cmpme,ch_boss5)==0){
DrawMyText123(pDxdevice,ch_bid[i_bossmany],4,i_mys_x,(int)re_main.bottom-i_mys_y,f_id,3);
}
}
i_an=i_many / 2;
while(i_many>0)
{
i_many-=1;
GetPrivateProfileStringA("H","wh","",ch_wh,2,"C:\\mscc.ini");//读取对应信息
i_wh=_ttoi(ch_wh);
if (i_wh==1)
{
if (i_many<i_an&&i_many>=0)
{
i_mys_x=changex(myRectx[i_many]);
i_mys_y=changey(myRecty[i_many]);
// bmapname(pDxdevice,myRectx[i_many],myRecty[i_many],i_many);
DrawMyText123(pDxdevice,ch_id[i_many],sizeof ch_id[i_many]-2,i_mys_x,(int)re_main.bottom-5-i_mys_y,f_id,2);
DrawMyText123(pDxdevice,st,sizeof st-1,i_mys_x,(int)re_main.bottom-i_mys_y,f_dian,1); //画点
// DrawHpMp(pDxdevice,i_many);
}
}
if (i_wh==2)
{
if (i_many>=i_an)
{
i_mys_x=changex(myRectx[i_many]);
i_mys_y=changey(myRecty[i_many]);
// bmapname(pDxdevice,myRectx[i_many],myRecty[i_many],i_many);
DrawMyText123(pDxdevice,ch_id[i_many],sizeof ch_id[i_many]-2,i_mys_x,(int)re_main.bottom-5-i_mys_y,f_id,2);
DrawMyText123(pDxdevice,st,sizeof st-1,i_mys_x,(int)re_main.bottom-10-i_mys_y+10,f_dian,1); //画点
// DrawHpMp(pDxdevice,i_many);
//这里是上方的画图
}
}
}
}
}
}
BOOL b_zt=true;
HDC hdc;
int i_weltime=0;
LPDIRECT3DDEVICE9 my;
char* isay="-梦三国大神辅助-";
char foryou[]="↑键切换阵营,←娱乐三国,↓官渡,→三国志";
char ch_mytime[30];
void __declspec(naked) QT()
{
_asm
{
pushad
mov [my],eax
}
if (b_zt)
{
f_dian=CreateMyFont(my,2);
f_id=CreateMyFont(my,1);
f_welcome=CreateMyFont(my,3);
f_deng=CreateMyFont(my,4);
//f_box=CreateMyFont(my,5);
if(f_dian!=NULL&&f_id!=NULL&&f_welcome!=NULL)b_zt=FALSE;
}
if (i_weltime<=3000)
{
i_weltime+=1;
DrawMyText123(my,isay,(int)strlen(isay),1,50,f_welcome,3);
DrawMyText123(my,"到期时间:",9,1,90,f_welcome ,3);
DrawMyText123(my,ch_mytime,sizeof ch_mytime,81,90,f_welcome,3);
DrawMyText123(my,foryou,sizeof foryou-1,1,130,f_welcome,3);
/*HANDLE myShhandl; //设备句柄
myShhandl=::OpenFileMappingA(4,false,"MyShareMemoryFile");//获取句柄
char* ch_mytxt;//char转换 指针
LPVOID tt; //指针
tt=MapViewOfFile(myShhandl,4,0,0,0);//读取 返回值为指针
if (myShhandl==NULL)//如果设备部存在 信息框 no
{
AfxMessageBox("No!");
}
//AfxMessageBox(ch_mytxt);
ch_mytxt=(char*)tt;//普通指针转换到char指针
DrawMyText(my,ch_mytxt,12,1,300,f_welcome,3);//写出来*/
}
//GetClientRect(GameHwnd,&re_main);//再次获取游戏屏幕大小
YLSG(my);
_asm {popad}
_asm
{
mov edi,edi
push ebp
mov ebp,esp
jmp [dw_retAdd]
}
}
char ch_pre[11];
int i_pre;
DWORD add;
char ch_banben[2];
DWORD dw_myqx;
void hook()
{
VMProtectBegin("p");
//SE_PROTECT_START();
DeleteFileA("C:\\windows\\bg.ini");
GameHwnd=::FindWindow(NULL,"梦三国 Online");
GetClientRect(GameHwnd,&re_main);
GetPrivateProfileStringA("time","my","",ch_mytime,30,"C:\\mschoco.ini");//读取对应信息
GetPrivateProfileStringA("Pre","Add","",ch_pre,11,"C:\\mschoco.ini");//读取对应信息
add=(DWORD)GetModuleHandle("d3d9.dll");
dw_base_eng=(DWORD)GetModuleHandle("Engine.dll");
dw_myqx=(DWORD)GetModuleHandle("Engine.dll");
i_pre=_ttoi(ch_pre);
PWORD pw_d3dhoo;
DWORD pd_oldproc;
PWORD pw_D3Dret;
PWORD pw_d3dmy;
PWORD dw_d3dmy;
DWORD dw_d3dgobase;
PWORD p_qxdadd;
PWORD p_qxdadd1;
_asm{
mov eax,[add]
mov ebx,[i_pre]
add eax,ebx
mov [pw_d3dhoo],eax
add eax,1
mov [pw_d3dmy],eax
add eax,4
mov [pw_D3Dret],eax
mov [dw_retAdd],eax
mov eax,[dw_base_eng]
mov ebx,[dw_31base_eng1]
add eax,ebx
mov [dw_base_eng],eax
}
byte byte_jmp[1]={0xe9};
VirtualProtect(pw_d3dhoo,5,64,&pd_oldproc);
memcpy(pw_d3dhoo,&byte_jmp,1);
dw_d3dgobase=(DWORD)((DWORD)&QT-(DWORD)pw_D3Dret);
memcpy(pw_d3dmy,&dw_d3dgobase,4);
VirtualProtect(pw_d3dhoo,5,pd_oldproc,&pd_oldproc);
VMProtectEnd();
// SE_PROTECT_END();
}