P475 -
5.Hook/Notity 的分析和next
[popexizhi analysis]
-
对选择NtResumeThread hook的原因
多数文章都分析如下,进程创建过程中CreateProcess的调用过程解剖如下:
CreateProcess ->
CreateProcessInternal ->
NtCreateProcess -> ->
NtCreateThread ->
NtResumeThread
https://blog.csdn.net/zhou191954/article/details/10164459
推荐的阅读-分析系统创建进程过程,寻找方法
关于这方面内容,可以参考毛德操老师的两篇文章
《漫谈兼容内核之十七:再谈Windows的进程创建》
《漫谈兼容内核之二十二:Windows线程的调度和运行》
此方式的做法是
通过对系统服务NtResumeThread的注入,查找其中notepad.exe的对这个系统方法的调用,在这个调用中对notepad的进程插入Shellcode并修改CONTEXT,当notepad的对应线程恢复时就先执行这个ShellCode
这里NtResumeThread是系统提供的在线程刚刚创建或被暂停时一定使用的内核服务;
而原始code中对于Shellcode的插入点选择eax而不是eip的原因也是和这个NtResumeThread的使用场景直接相关的,虽然pope现在也没找到code上的直接证据,但是从逻辑上分析应该是这样的。
原书在code后的追加说当前方法在x64平台上的内核PatchGuard机制导致不可以用,不过pope好像x32平台也没有编译通过:)
这个方式和4.SetThreadContext法是相似的都是在系统中的对进程管理涉及到的某个位置进行修改,之后被执行shellcode。
没有评论:
发表评论