- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
CreateUserModeThreadFromKernelLand
Create usermode thread from kernel land
简单方法从内核创建用户态线程.
在内核想要执行用户态的代码,通常的方式有.apc, usermodecallback等.
但是都各有缺点.
APC.
apc的分发必须不被禁用,
目标进程必须有处于alertable的线程.
特别是后者这个条件,很多时候不一定有.
比如explorer进程有很多线程,通常能找到.
但是像记事本这种单线程程序,就找不到.
UserModeCallback.
必须在目标进程空间调用,不能是attach.的.
必须加载过User32的.,这样才有Kernelcallbacktable
在某些特定的时机,我们是有机会执行的.
比如在进程刚刚创建的时候,我们可以修改OEP,修改IAT等加载我们的dll
在第一个线程创建之后,我们可以插入apc.这些条件都很好满足.
还有WOW64的兼容处理,在另一篇文章里说明.
但是如果任何时候.不限制调用的时机,比如在进程正常运行之后,这个时候,这些条件都不满足了.
虽然我们可以构造出场景,
比如,如果你是一个过滤驱动或者hook型的,那么总是有机会会切换到目标进程上空的,这个时候就有机会可以UserModeCallback.
现在要说的就是没有这些限制的做法.可以在任意时机,任意进程空间在任意进程中执行代码.
那就是直接在内核态给一个用户态进程创建一个用户态的线程.
模拟用户态进程给自己创建一个非远程线程的基本流程.
1.创建线程初始的栈,分配和保留栈空间.设置栈保护页.实现栈的自动增长.
2设置线程上下文,各个段寄存器和基本寄存器,设置eip指向Kernel32!BaseThreadTrunk
.text:7C810473
.text:7C810473 ; =============== S U B R O U T I N E =======================================
.text:7C810473
.text:7C810473 ; Attributes: bp-based frame
.text:7C810473
.text:7C810473 ; int __stdcall BaseInitializeContext(PCONTEXT Context, PVOID Parameter, PVOID StartAddress, PVOID StackAddress, ULONG ContextType)
.text:7C810473 _BaseInitializeContext@20 proc near ; CODE XREF: CreateRemoteThread(x,x,x,x,x,x,x)+84↓p
.text:7C810473 ; CreateProcessInternalW(x,x,x,x,x,x,x,x,x,x,x,x)+690↓p ...
.text:7C810473
.text:7C810473 Context = dword ptr 8
.text:7C810473 Parameter = dword ptr 0Ch
.text:7C810473 StartAddress = dword ptr 10h
.text:7C810473 StackAddress = dword ptr 14h
.text:7C810473 ContextType = dword ptr 18h
.text:7C810473
.text:7C810473 ; FUNCTION CHUNK AT .text:7C81F10A SIZEBYTES
.text:7C810473 ; FUNCTION CHUNK AT .text:7C8316A2 SIZE 0000000F
文档评论(0)