Dll注入新姿势:SetThreadContext注入

目前,有多种方法可用于将DLL注入到进程中,但每个都有其优点和缺点。在这些方法中,最简单的是使用CreateRemoteThread函数在目标进程中创建一个新线程,并将线程的启动函数指向LoadLibrary函数。这种方法最容易实现,但也是最容易被检测到,因为可以通过多种方式“感知”到创建的新线程,例如使用ETW事件。如果系统中存在一个驱动程序,并且该驱动程序正在hooking使用PsSetCreateThreadNotifyRoutine创建的线程,那么该行为自然会被安全检测工具识别到。

一种隐蔽的方法是使用现有的线程来执行DLL注入,其中一种方法是使用APC通过调用QueueUserApc 将APC附加到目标进程的线程队列中去,并使用APC调用LoadLibrary函数。使用APC执行DLL注入存在的问题是被注入线程必须进入可唤醒状态才能“处理”APC并执行我们的LoadLibrary调用,但要保证一个线程永远处于可唤醒状态是很困难的。为了增加成功的机会,可以向指定进程的每一个线程都插入一个APC,但这种做法在某些情况下是不起作用的。一个典型的例子就是cmd.exe,据我所知其单线程从不进入可唤醒状态。

这篇文章将阐述另一种使目标进程调用LoadLibrary函数的方法,但这次我们将通过操作现有线程的上下文来执行DLL注入,线程的指令指针被转移到一个自定义的代码段,然后被重定向回来。这种方法很难检测,因为这些操作看起来就像是一个正常线程正在做的事情,下面让我来阐述如何在x86和x64平台中完成这种DLL注入。

DLL注入

首先,我们需要做的第一件事就是找到一个目标进程并在该进程中选择一个线程,从技术上来讲,它可以是目标进程中的任何线程,但是一个处于“等待

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值