找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 6953|回复: 4

【求助】关于KeAttachProcess及KeStackAttachProcess 蓝屏问题请教

[复制链接]

1

主题

9

回帖

0

精华

初来乍到

积分
22
发表于 2017-12-27 12:57:39 | 显示全部楼层 |阅读模式
部分代码
PEPROCESS _eprocess;
KAPC_STATE APC_STATE;
PsLookupProcessByProcessId((HANDLE)idGame, & _eprocess);
/*
…… 此处省略n行。
*/

KeAttachProcess( _eprocess);
//KeStackAttachProcess((PRKPROCESS) _eprocess, &APC_STATE);

用这2个API 就蓝屏 (IRQL 是0 ),错误代码apc_index_mismatch

-------------------------------------------------------------------------
另外:使用Tesla.Angela大牛教程里面的CR3切换的方法就不会蓝屏。
但是我使用下面这段代码

ObOpenObjectByPointer(_eprocess, OBJ_KERNEL_HANDLE | OBJ_CASE_INSENSITIVE, NULL, GENERIC_ALL, *PsProcessType, KernelMode, &processHandle);
ZwAllocateVirtualMemory(processHandle, &pMemAddr, 0, &Size, MEM_COMMIT, PAGE_EXECUTE_READWRITE);

//ZwAllocateVirtualMemory申请的内存无法读写
//使用OD查看内存页面。内存是开辟出来的,
MmIsAddressValid(pMemAddr) 返回  false

不明白这个MmIsAddressValid为什么会返回一个false

本人菜鸡,望各位大牛不吝赐教!


注:开发环境:VS2017+WDK1709+win10x64
        测试环境:(虚拟机)win7 x64 SP1 家庭版

1

主题

9

回帖

0

精华

初来乍到

积分
22
 楼主| 发表于 2017-12-27 16:56:50 | 显示全部楼层
又有一个很有意思的问题。 ZwAllocateVirtualMemory 申请内存之后 用这个MmIsAddressValid检测地址返回false 。用x64dbg 附加之后修改返回地址的任意一字节 在MmIsAddressValid检测就返回TRUE。不知道这个作何解释。

1

主题

9

回帖

0

精华

初来乍到

积分
22
 楼主| 发表于 2017-12-28 01:05:17 | 显示全部楼层
苦翻WRK 终于找到原因了,ZwAllocateVirtualMemory 这个API 没有分配物理内存。

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
发表于 2018-1-2 08:44:30 | 显示全部楼层
调用PsLookupProcessByProcessId之后需要检验返回值。

1

主题

9

回帖

0

精华

初来乍到

积分
22
 楼主| 发表于 2018-1-3 19:51:04 | 显示全部楼层
Tesla.Angela 发表于 2018-1-2 08:44
调用PsLookupProcessByProcessId之后需要检验返回值。

感谢指导。
还有ZwAllocateVirtualMemory申请的R3的内存这个,没法触发分页异常(memcpy  指针等访问均蓝屏)这个我该如何解决。
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

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