XAntiDebug反调试分析!
本帖最后由 魔弑神 于 2018-1-29 09:57 编辑一切的一切都是从那时开始
废话不多说
测试环境:
WIN7 X64
准备工具:
WINGDBG
ollydbg(未经过修改的原版)
测试程序:
Demo.exe
EAntiDebug.dll
在准备做完前 我总结出大致的函数
两个地方检测NTClose 和NtQueryInformationProcess 重点DebugPort清零
由于百度我没有找到NTclose 大致的源码和内容 所以只能自己手动过掉这个函数
NtQueryInformationProcess中有很多参数 而且也是没公开我们只能上hook 吧这个地址给hook 让他的端口值保持不变
转至博客
NtQueryInformationProcess函数是一个未公开的API,它的第二个参数可以用来查询进程的调试端口。如果进程被调试,那么返回的端口值会是-1,否则就是其他的值。由于这个函数是一个未公开的函数,因此需要使用LoadLibrary和GetProceAddress的方法获取调用地址,示例代码如下:
// 声明一个函数指针。
typedef NTSTATUS (WINAPI *NtQueryInformationProcessPtr)(
HANDLE processHandle,
PROCESSINFOCLASS processInformationClass,
PVOID processInformation,
ULONG processInformationLength,
PULONG returnLength);
bool NtQueryInformationProcessApproach()
{
int debugPort = 0;
HMODULE hModule = LoadLibrary(TEXT("Ntdll.dll "));
NtQueryInformationProcessPtr NtQueryInformationProcess = (NtQueryInformationProcessPtr)GetProcAddress(hModule, "NtQueryInformationProcess");
if ( NtQueryInformationProcess(GetCurrentProcess(), (PROCESSINFOCLASS)7, &debugPort, sizeof(debugPort), NULL) )
printf(" NtQueryInformationProcess failed\n");
else
return debugPort == -1;
return false;
}
而且XJUN的插件已经干掉了这个函数 (不过呢也是过不了的 因为还是有函数)
NtQueryInformationProcess
[*]ProcessBasicInformation
[*]ProcessDebugPort
[*]ProcessDebugObjectHandle
[*]ProcessDebugFlags
当然也可以自己手动过 不过很麻烦
我们只要在意的是NTclose
不管NTQ因为我们上X64驱动 来hook 这个函数
我们吧程序载入WINDBG 并且输入命令 找到函数的地址
78ea1400 这个地址
将原本的C 改成A
至于NtQueryInformationProcess函数我也没研究太透 至于能不能手动过掉还是需要分析 !
最后发个全方面检测OD 的
大神的文章小白看不懂= = 确实没有看明白!! {:5_193:}测试环境写错了,x64下DebugPort清零会蓝屏的,而且64位下进行SSDT HOOK麻烦又啰嗦,执行效率还低,有时候几百个SSDT hook不如一个回调好用{:5_188:} 感谢分享 特别是OD 牛啊,感谢分享 纯支持一下下,,,
页:
[1]