- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
驱动中跨进程读写访问内存.pdf
驱动中 跨进程 读写 访问 内存
学习各种高级外挂制作技术,马上去百度搜索 魔鬼作坊,点击第一个站进入,
快速成为做挂达人。
第一次内核编程,代码写的比较乱,不免也有些错误.各位牛哥们,见笑乐,!时间仓促,也没对代
码进程封装,和界面相关太多.
1. 切换目标进程的CR3
通常,跨进程读写内存,用到ReadProcessMemory,WriteProcessMemory, 但需要进程句柄,如果
目标进程受到保护,可能获得进程句柄会失败.
ReadProcessMemory最后会调用到KeStackAttachProcess附加到目标进程上切换进程环境进
行拷贝的, 所以想到拿到目标进程的虚拟内存内容,可以将目标进程的页目录基地址放入
CR3 中即可.
首先要获得目标进程的cr3 寄存器,即页目录基地址(开启PAE, 页目录指针表),
每个进程在内核里都有一个EPROCESS 结构.
代码:
nt!_EPROCESS
+0x000Pcb : _KPROCESS
+0x06c ProcessLock : _EX_PUSH_LOCK
+0x070CreateTime : _LARGE_INTEGER
+0x078ExitTime : _LARGE_INTEGER
+0x080RundownProtect : _EX_RUNDOWN_REF
…….
Pcb中就有我们想要得到的CR3
代码:
nt!_KPROCESS
+0x000Header : _DISPATCHER_HEADER
+0x010ProfileListHead : _LIST_ENTRY
+0x018DirectoryTableBase : [2]Uint4B
+0x020LdtDescriptor : _KGDTENTRY
+0x028Int21Descriptor : _KIDTENTRY
………
那只需要获得目标进程EPROCESS 就可以得到CR3 了
遍历EPROCESS 里的ActiveProcessLinks 的链表获取指定进程的EPROCESS
代码:
// 获得当前进程EPROCESS 信息
ULONG uEprocess= 0;
__asm
{
moveax, fs:[0x124] //_ethread
moveax, [eax+0x44] // _kprocess
movuEprocess,eax
}
KdPrint((EPROCESS:0x%08x\n,uEprocess));
LIST_ENTRYListHead;
InitializeListHead(ListHead);
ULONG uFirstEprocess= uEprocess;
ULONG uCount = 0;
PLIST_ENTRYpActiveProcessLinks;
ProcessInfoList*pProcssList= NULL;
ULONG uNameOffset= GetPlantformDependentInfo(FILE_NAME_OFFSET);
ULONG uPidOffset= GetPlantformDependentInfo(PROCESS_ID_OFFSET);
ULONG uLinkOffset= GetPlantformDependentInfo(PROCESS_LINK_OFFSET);
ULONG uExitTime = GetPlantformDependentInfo(EXIT_TIME_OFFSET);
// 遍历链表获得进程信息
do
{
文档评论(0)