看流星社区

 找回密码
 注册账号
查看: 2517|回复: 1

VEH 异常处理 +硬件断点来HOOK躲避CRc

[复制链接]

该用户从未签到

发表于 2018-2-28 11:14:38 | 显示全部楼层 |阅读模式
  1. #include "stdafx.h"
  2. #include "windows.h"
  3. #include <d3d9.h>
  4. #include <d3dx9.h>
  5. #include <D3dx9tex.h>
  6. #pragma comment(lib, "d3d9.lib")
  7. #pragma comment (lib,"d3dx9.lib")
  8. #pragma comment (lib,"winmm.lib")

  9. HANDLE hbase;
  10. DWORD oldprotect;
  11. DWORD index;

  12. __declspec(naked) void DrawIndexedPrimitive( LPDIRECT3DDEVICE9 pdev, D3DPRIMITIVETYPE type,INT BaseVertexIndex,UINT MinVertexIndex,UINT NumVertices,UINT startIndex,UINT primCount){
  13. //设置一个空函数就是编译后没有函数头

  14. _asm{
  15. mov eax,dword ptr [index]
  16. add eax,2//+2是因为头部指令是MOV EDI,EDI 又没有除法操作所以不会溢出这样我就+2 来跳过我们的硬件HOOK不让她重复执行~~~
  17. jmp eax
  18. }
  19. }

  20. void setHwBreakpoint( ){//设置硬断
  21. HANDLE hthrad;
  22. CONTEXT dst_context;

  23. memset(&dst_context,0,sizeof(CONTEXT));//清零结构内存
  24. dst_context.ContextFlags=CONTEXT_ALL;//设置flag
  25. hthrad=        OpenThread(THREAD_ALL_ACCESS,FALSE,3608);//这里我直接用的硬编码 实际作用需要全局线程HOOK 我记得DRX可以不用XX每个线程达到目的的=//打开线程
  26. SuspendThread(hthrad);//暂停线程
  27. GetThreadContext(hthrad,&dst_context);//获取线程环境(上下文)
  28. dst_context.Dr0=index;//这里是HOOK地址
  29. dst_context.Dr7=0x405;

  30. SetThreadContext(hthrad,&dst_context);//设置上下文
  31. ResumeThread(hthrad);//线程跑起来吧~~~
  32. CloseHandle(hthrad);//防止句柄泄露 关句柄好习惯~~~
  33. }
  34. DWORD NTAPI ExceptionHandler(EXCEPTION_POINTERS * exceptioninfo){//异常处理函数
  35. if (exceptioninfo->ExceptionRecord->ExceptionAddress==(PVOID)index)//比较异常地址是不是我们设置的地方
  36. {
  37. exceptioninfo->ContextRecord->Eip=(DWORD)DrawIndexedPrimitive;//是就设置EIP跳转到我们用来处理的函数
  38. EXCEPTION_CONTINUE_EXECUTION;//返回 这个函数我们特么处理 你不用管了,管了也白搭~~
  39. }else{
  40. exceptioninfo->ContextRecord->Dr0=index;//不是就重新设置断点 //防止XX
  41. exceptioninfo->ContextRecord->Dr7=0x405;
  42. return EXCEPTION_CONTINUE_SEARCH;//返回 不是我处理了 老子不干了~~
  43. }
  44. return EXCEPTION_CONTINUE_SEARCH;//返回 不是我处理了 老子不干了~~

  45. }
  46. void addvehhandle(){

  47. AddVectoredExceptionHandler(1,(PVECTORED_EXCEPTION_HANDLER)ExceptionHandler);//添加VEH异常处理
  48. }

  49. BOOL APIENTRY DllMain( HMODULE hModule,
  50.                        DWORD  ix,
  51.                        LPVOID lpReserved
  52. )
  53. {

  54. DisableThreadLibraryCalls(hModule);
  55. switch (ix)
  56. {
  57. if (CreateMutex(NULL,NULL,L"miss2321")==0)
  58. //return FALSE;
  59. case DLL_PROCESS_ATTACH:

  60. hbase=GetModuleHandle(L"d3d9.dll");
  61. index=(DWORD)hbase+0x24FE7;
  62. setHwBreakpoint();
  63. addvehhandle();
  64. break;
  65. case DLL_THREAD_ATTACH:
  66. break;
  67. case DLL_THREAD_DETACH:
  68. break;
  69. case DLL_PROCESS_DETACH:
  70. break;
  71. }
  72. return TRUE;
  73. }
复制代码

该用户从未签到

发表于 2020-8-25 17:03:39 | 显示全部楼层
支持楼主,支持看流星社区,以后我会经常来!
点击按钮快速添加回复内容: 支持 高兴 激动 给力 加油 苦寻 生气 回帖 路过 感恩
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

小黑屋|手机版|Archiver|看流星社区 |网站地图

GMT+8, 2024-3-28 23:07

Powered by Kanliuxing X3.4

© 2010-2019 kanliuxing.com

快速回复 返回顶部 返回列表