利用AppInit_Dlls注入在win10上的限制

0x00

AppInit_Dlls注入方法特别简便,日常注入测试首选,在win7上屡试不爽,具体原理如下:

https://support.microsoft.com/en-us/help/197571/working-with-the-appinit-dlls-registry-value

docs.microsoft.com/en-us/windo…windows-7-and-windows-server-2008-r2

但是最近使用win10系统之后发现,注入方法失效。在检查过所有的配置都正确之后,决定使用调试器看看原因是啥。

0x01

调试堆栈如下,具体是怎么找到这里的,我提供三种方法做参考:

1、 从原理上来说,注入的dll是被user32加载的,用IDA打开user32检查下是否有函数名与AppInit_Dlls相关的函数;

2、 在低版本的系统上在DllMain 的 DLL_PROCESS_ATTACH 处理处下断点,检查调用堆栈;

我使用的是第三种方法,之前在StackOverflow找问题是偶然发现的_

在这里插入图片描述
IDA打开Kernel32.dll,看一下
LoadAppInitDllsImplementation。原因很简单,汇编见下图:
在这里插入图片描述
可以看到 对 0x67的Class进行
NtQuerySystemInformation后,检查ReturnLength与2相与,如果为0的话,不加载DLL直接返回。

Class 0x67在网络上很容易找到,这个链接的信息比较充足: https://www.geoffchappell.com/studies/windows/km/ntoskrnl/api/ex/sysinfo/query.htm

显然,0x2为 CODEINTEGRITY_OPTION_TESTSIGN。这个标志可以在bcdedit中设置,命令为 bcdedit.exe –set testsigning
on,用于设置系统的test mode,在驱动开发中比较有用,这里就不深入讨论。

但是测试bcdedit设置参数,一直提示没有权限啥啥的,谷歌大法发现BIOS中有个 secure boot设置,只有disable之后才能使用bcdedit设置这个Flag。

一切跑过一次以后,dll顺利注入。

0x02

后续搜AppInit_Dlls发现msdn中一直挂着这个主题,只是被我忽略了。。。

https://docs.microsoft.com/en-us/windows/win32/dlls/secure-boot-and-appinit-dlls

文档说的挺对,Secure Boot对AppInit_Dlls的限制合情合理,而且是从WIN8开始就已经出现的特性。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值