首页
社区
课程
招聘
[原创] VEH 异常处理 +硬件断点来HOOK躲避CRc
发表于: 2015-4-15 12:18 24002

[原创] VEH 异常处理 +硬件断点来HOOK躲避CRc

2015-4-15 12:18
24002

下面大牛说了 这只是一个简单的设置硬件断点!大牛飞过!!!大牛飞过~~大牛飞过~~~
所谓原创就是代码是我写的= = == = == = =大牛飞过
~~

==================================================
老技术了~~~我再来发一遍 方便大家好查找~~~
#include "stdafx.h"
#include "windows.h"
#include <d3d9.h>
#include <d3dx9.h>
#include <D3dx9tex.h>
#pragma comment(lib, "d3d9.lib")
#pragma comment (lib,"d3dx9.lib")
#pragma comment (lib,"winmm.lib")

HANDLE hbase;
DWORD oldprotect;
DWORD index;

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

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

}
}

void setHwBreakpoint( ){//设置硬断
HANDLE hthrad;
CONTEXT dst_context;

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

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

}
void addvehhandle(){

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

BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ix,
                       LPVOID lpReserved
)
{

DisableThreadLibraryCalls(hModule);
switch (ix)
{
if (CreateMutex(NULL,NULL,L"miss2321")==0)
//return FALSE;
case DLL_PROCESS_ATTACH:

hbase=GetModuleHandle(L"d3d9.dll");
index=(DWORD)hbase+0x24FE7;
setHwBreakpoint();
addvehhandle();
break;
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
break;
case DLL_PROCESS_DETACH:
break;
}
return TRUE;

}


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 3
支持
分享
最新回复 (15)
雪    币: 6580
活跃值: (4536)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
2
感谢分享,用得上
2015-4-15 13:04
0
雪    币: 68
活跃值: (190)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
这还能叫原创?说硬件断点不完了吗
2015-4-15 13:30
0
雪    币: 719
活跃值: (777)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
4
= =说了是老技术原创只是代码是我一个一个写的,直接说硬件断点又有什么用处
2015-4-15 13:35
0
雪    币: 68
活跃值: (190)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
不过上来发帖 还是不错的 支持下
2015-4-15 14:43
0
雪    币: 719
活跃值: (777)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
6
啦啦啦~~~~
2015-4-15 14:52
0
雪    币: 1234
活跃值: (302)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
看帖要留名
2015-4-15 16:43
0
雪    币: 217
活跃值: (35)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
缺点: 1. 只有4个 hook点。 2. 如果保护系统先占坑就没用了
2015-4-20 15:47
0
雪    币: 144
活跃值: (335)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
有没有办法不挂起主线程 设置
2015-4-20 16:28
0
雪    币: 26
活跃值: (66)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
本来保护程序 还要CRC代码段!!!你这代码 现在好了 随便触发个异常 检测下DR寄存器 就知道有没有被调试破解了!
2015-4-21 03:39
0
雪    币: 261
活跃值: (547)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
11
我晕 我教程里准备出这个 你倒是先放码了
DNF拦截了底层异常处理 你这个就需要改了
2015-4-24 23:58
0
雪    币: 219
活跃值: (783)
能力值: (RANK:290 )
在线值:
发帖
回帖
粉丝
12
MySetThreadContext     首先把 自己的CRC设置 drx  然后呢   就知道 谁断下来的,然后 你就呵呵了
2015-4-25 01:51
0
雪    币: 130
活跃值: (407)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
马克下。。
2015-6-7 14:16
0
雪    币: 102
活跃值: (2055)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
14
mark一下
2015-6-23 23:40
0
雪    币: 1258
活跃值: (1434)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
MARK,有空看看
2015-6-25 18:01
0
雪    币: 4605
活跃值: (4527)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
硬件断点寄存器只有四个,如果补丁数大于4个需要怎么写,有没有相应的例子
2016-1-14 22:06
0
游客
登录 | 注册 方可回帖
返回
//