简单的工作室

D3D游戏透视辅助原理(VC2008视频教程)

软件类型:国产软件 授权方式:免费软件 界面语言:简体中文 软件大小:未知 文件类型:其它 运行环境:Win2003,WinXP,Win2000,Win9X 软件等级:☆☆☆☆☆ 发布时间:2014-11-26 官方网址:http://www.51xue8xue8.com/ 演示网址:http://www.51xue8xue8.com/ 下载次数:
软件介绍

   主要适合想要学习D3D HOOK 透视辅助的朋友,这个教程虽然没源码,但是视频教程里讲的还是比较清晰的,慢慢来,一步一个脚印,你也可以

制作自己的透视辅助出来,适合有VC编程基础的朋友。

下面是自己对魔兽争霸透视研究 HOOK魔兽争霸 修改人物颜色 相关源码,相关基址适合win7系统 


相关代码

HRESULT WINAPI orginal_DrawIndexedPrimitive(LPDIRECT3DDEVICE8  pDevice, D3DPRIMITIVETYPE type,UINT minIndex,UINT NumVertices,UINT startIndex,UINT primCount)
  {
   
_asm
 {
 mov edi,edi
 push ebp
 mov ebp,esp
 pop ebp
 mov eax,jumpto
 jmp eax
  }
 
 return S_OK;

  }

ULONG_PTR GetDrawIndexedPrimitiveAddress()
   {
  HANDLE handle=GetModuleHandleA("d3d8.dll");

  if (handle==INVALID_HANDLE_VALUE)
  {
  return NULL;
  }
 
   return (ULONG_PTR)handle +0x470A0;
   }

DWORD* GetVtableAddress(void* pObject)
{
  return (DWORD*)*((DWORD*)pObject);
}

void HookFunction(DWORD* pVtable,void* pHookProc,void* pOldProc,int iIndex)
{
  DWORD lpflOldProtect;
  VirtualProtect((void*)&pVtable[iIndex],sizeof(DWORD),PAGE_READWRITE,&lpflOldProtect);
  if(pOldProc){
      *(DWORD*)pOldProc = pVtable[iIndex];
  }


  pVtable[iIndex]=(DWORD)pHookProc;
  VirtualProtect(pVtable,sizeof(DWORD),lpflOldProtect,&lpflOldProtect);


}

bool HookDrawIndexedPrimitive()
{
  ULONG_PTR address=GetDrawIndexedPrimitiveAddress();
  jumpto=address+5;
  DWORD oldprotect;
  if (VirtualProtect((LPVOID)address,5,PAGE_EXECUTE_READWRITE,&oldprotect))
  {

 DWORD value=(DWORD)MyDrawIndexedPrimitive-address-5;
 _asm
 {
 mov eax, address
          mov byte ptr[eax],0xe9 //JMP
 add eax,1
 mov ebx,value
 mov dword ptr[eax],ebx  
 }

    VirtualProtect((LPVOID)address,5,oldprotect,&oldprotect);
  } 
  return true;
}


VOID Hook ()
{
HookDrawIndexedPrimitive();

}


BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
  )
{
if(ul_reason_for_call == DLL_PROCESS_ATTACH)
{
Hook();
}
else if(ul_reason_for_call == DLL_PROCESS_DETACH)
{
UnHook();
}


return TRUE;
}


ULONG_PTR GetDrawIndexedPrimitiveAddress()
   {
 // HANDLE handle=GetModuleHandleA("d3d9.dll");
  HANDLE handle=GetModuleHandleA("d3d8.dll");
//   ODS("地址: %p,字符串: %s,错误号1:%d  ",handle,"d3d9.dll",GetLastError());
  if (handle==INVALID_HANDLE_VALUE)
  {
  return NULL;
  }
 
       //ODS("地址: %p,字符串: %s,错误号2:%d  ",(ULONG_PTR)handle +0x2B6B1,"0x2B6B1",GetLastError()); 
//  return (ULONG_PTR)handle +0x2B6B1;
   return (ULONG_PTR)handle +0x470A0;
   }



//34青龙偃月刀  //42短裤加背上战旗 //308 脸部头 上身大衣)
 #define PlayerBody  ( NumVertices==34   || NumVertices==42 ||NumVertices==308 )

    HRESULT WINAPI MyDrawIndexedPrimitive(LPDIRECT3DDEVICE8  pDevice, D3DPRIMITIVETYPE type,UINT minIndex,UINT NumVertices,UINT startIndex,UINT primCount)
  {   

HRESULT result =S_OK;
      IDirect3DVertexBuffer8* pStreamData=NULL;
 UINT iStride;
 if (pDevice->GetStreamSource(0,&pStreamData,&iStride)== D3D_OK)
 pStreamData->Release();
  IDirect3DTexture8 *texture1=NULL,*texture2=NULL;
sprintf(strStride,"%d\r\n",NumVertices);
if (NumVertices>0)
{
         OutputDebugStringA(strStride);

if (PlayerBody)
 {
 GenerateTexture(pDevice,&texture2,D3DCOLOR_ARGB(255,0,255,0));
 pDevice->SetTexture(0,texture2);
 }
   result =orginal_DrawIndexedPrimitive(pDevice,type,minIndex,NumVertices,startIndex,primCount); 
}

 if (texture2)
 {texture2->Release();}
 return result  ;  
}



 

下载地址
下载说明

☉推荐使用迅雷下载本站软件,使用 WinRAR v3.10 以上版本解压本站软件。
☉如果这个软件总是不能下载,请选择主站服务器下载,或者后面的迅雷高速下载!!
☉下载本站资源,如果服务器暂不能下载请过一段时间重试!
☉如果遇到什么问题,可以发布留言提问,我们将在那里提供更多 、更好的资源!
☉本站提供的一些商业软件是供学习研究之用,如用于商业用途,请购买正版。

顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
推荐软件