-
-
[求助]etwhook为什么在物理机里hook 得不到输入信息
-
发表于:
2023-11-22 19:40
3547
-
[求助]etwhook为什么在物理机里hook 得不到输入信息
往大牛们帮忙看一下
问题:我通过Etw Hook了NtAllocateVirtualMemory 、 NtClose 二个函数
在虚拟机里能正常输入调试信息,但在物理机里侧不输入信息,说明也没有成功。百思不得其解。物理机和虚拟机同一版本号,另外虚拟机也开了测试模式,显不驱动也加载功。
物理机与虚拟机版本见下图:
Hook代码:
Hook NtAllocateVirtualMemory代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | NTSTATUS NTAPI HkNtAllocateVirtualMemory(
HANDLE ProcessHandle,
PVOID * BaseAddress,
ULONG_PTR ZeroBits,
PSIZE_T RegionSize,
ULONG AllocationType,
ULONG Protect
)
{
if (!IsCurrentProcessTargetProcess())
goto origin;
DbgPrintEx( 0 , 0 , "[ADF] NTSTATUS NTAPI HkNtAllocateVirtualMemory Parameter PH:%d BA:%p ZB:%d RS:%x AT:%d P:%d.\n" , ProcessHandle, BaseAddress, ZeroBits, * RegionSize, AllocationType, Protect);
origin:
return g_NtAllocateVirtualMemory(ProcessHandle, BaseAddress, ZeroBits, RegionSize, AllocationType, Protect);
}
|
HOOK NtClose 代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | NTSTATUS NTAPI HkFnNtClose(
IN HANDLE Handle
) {
if (!IsCurrentProcessTargetProcess())
goto origin;
DbgPrintEx( 0 , 77 , "NtClose Parm:0x%x \n" ,Handle);
if (Handle = = (HANDLE) 0xDEADC0DE )
{
DbgPrintEx( 0 , 0 , "[ADF] NtClose 0xDEADC0DE Hit.\n" );
Handle = 0 ;
goto origin;
}
origin:
return g_NtClose(Handle);
}
|
虚拟机加载驱动结果:
物理机加载驱动结果:
结论:说明物理机与虚拟机加载驱动都成功了
调用代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | / /
int main()
{
char bb[ 0x20 ] = { 0 };
HANDLE aa = OpenProcess(PROCESS_ALL_ACCESS, TRUE, GetCurrentProcessId());
ReadProcessMemory(aa, main, bb, 0x20 , NULL);
CloseHandle((HANDLE) 0xDEADC0DE );
std::cout << "Hello World!\n" << GetLastError() << "\n" ;
system( "pause" );
}
|
文件名为:testVMP.exe 因为:
运行程序debugview输出:
虚拟机如下图:
物理机如下图:
望有时间的大牛指点迷津。
文件代码:打包放在后面 发现不能传这么大 第一次发不知道:
网盘地址:https://www.123pan.com/s/cnGEjv-gXl3A.html
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
最后于 2023-11-22 19:46
被foxkinglxq编辑
,原因: