前言:去了杭州一个月,兼职了一个月,收获了不少.
最大体会是中国人都很热情,有时候嘴上面说的,到了最后都会推脱掉,这一点是让我印象最深刻的,我是不是也应该学习学习.
正言:不扯淡了,说说硬件断点 Dr7;
|---------------|----------------|
Dr7 |RWE LEN ... RWE LEN | G G L G L GL GL GL |
| 3 3 ... 0 0 | D E E 3 3 22 11 00 |
|---------------|----------------|
31 15 13 9 0
1.
LEN LEN为一个两位的字段,用以指示断点的长度。每一断点寄存器对应一个这样的字段,所以共有四个这样的字段分别对应四个断点寄存器。LEN的四种译码状态对应的断点长度如下
LEN 说明 :
0 0 断点为一字节
0 1 断点为两字节
1 0 保留
1 1 断点为四字节
2.
这里,如果断点是多字节长度,则必须按对应多字节边界进行对齐。如果对应断点是一个指令地址,则LEN必须为00
RWE RWE也是两位的字段,用以指示引起断点异常的访问类型。共有四个RWE字段分别对应四个断点寄存器,RWE的四种译码状态对应的访问类型如下
RWE 说明
0 0 指令
0 1 数据写
1 0 保留
1 1 数据读和写
3.
GE/LE GE/LE为分别指示准确的全局/局部数据断点。如果GE或LE被置位,则处理器将放慢执行速度,使得数据断点准确地把产生断点的指令报告出来。如果这些位没有置位,则处理器在执行数据写的指令接近执行结束稍前一点报告断点条件。
每当启用数据断点时,启用LE或GE。降低处理机执行速度除稍微降低一点性能以外,不会引起别的问题。但是,对速度要求严格的代码区域除外。这时,必须禁用GE及LE,并且必须容许某些不太精确的调试异常报告。
L0—L3/G0—G3 L0—L3及G0—G3位
我们在网上百度硬件断点时候常常看到Dr7=0x405是什么意思呢:
GL GL GL GL GL
EE 33 22 11 00
地址:1 00 00 00 01 01
10
4.
继续分析:
各个L位(即LE,L0—L3)是有关任务的局部位,使调试条件只在特定的任务启用。而各个G(即GD,G0—G3)是全局的,调试条件对系统中的所有任务皆有效。在每次任务切换时,处理器都要清除L位。
我们设置硬件断点时候,断一次后运行在运行,那个断点就没了,清除掉了.
DWORD Test()
{
printf("硬件断点地址0x%x\n",&Test);
MessageBox(0,L"这个是硬件断点出发",L"",MB_OK);
return 0;
}
DWORD TestB()
{
MessageBox(0,L"异常转到",L"",MB_OK);
return 0;
}
void SetBreakpoint()
{
CONTEXT ctx;
ctx.ContextFlags = CONTEXT_FULL | CONTEXT_DEBUG_REGISTERS;;
GetThreadContext(GetCurrentThread(), &ctx);
ctx.Dr0 = (DWORD)&Test;
//ctx.Dr2=0x0012f914;
ctx.Dr7 = 0x405;
SetThreadContext(GetCurrentThread(), &ctx);
}
DWORD NTAPI ExceptionHandler(EXCEPTION_POINTERS * ExceptionInfo)
{
if ((DWORD)ExceptionInfo->ExceptionRecord->ExceptionAddress == (DWORD)&Test)
{
ExceptionInfo->ContextRecord->Eip =(DWORD)&TestB;
return EXCEPTION_CONTINUE_EXECUTION;
//EXCEPTION_CONTINUE_EXECUTION;
}
else
{
ExceptionInfo->ContextRecord->Dr0 = 0x009E235E;
ExceptionInfo->ContextRecord->Dr7 = 0x405;
return EXCEPTION_CONTINUE_SEARCH;
}
}
int _tmain(int argc, _TCHAR* argv[])
{
AddVectoredExceptionHandler(1,(PVECTORED_EXCEPTION_HANDLER)ExceptionHandler);
SetBreakpoint();
Test();
return 0;
}
开启调试器,触发硬件断点,VEH EIP指针转移:
事实上Dr7还可以做 HOOK NTAPI.
本人文章写的又烂又渣,请大家不要见怪,本来想每周发一个帖子,结果没空+偷懒了.
大家都去玩移动安全了,PC没人玩了,准备改玩.
群:Super-Rootkis 121157016
[课程]FART 脱壳王!加量不加价!FART作者讲授!
上传的附件: