一种少见的Dll注入方式(基于MS 应用程序验证机制)
来源:互联网 发布:c 定义二维数组 编辑:程序博客网 时间:2024/06/06 01:06
之前我转发了关于一篇Dll注入的文章:DoubleAgent: Zero-Day Code Injection and Persistence Technique 。文章中提到通过提供伪造的应用程序验证器(下文简称恶意VerifierDlls)注入进程的思路和windows镜像劫持(下文简称为IFEO)有点相似,都是通过修改注册表项来实现劫持进程的目的。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Image File ExecutionOptions\"Image File Name .exe"区别之处在于:IFEO修改该注册表路径下字符串"Debugger"的值为某个指定调试器(也可以是其他可执行程序),使得双击exe后先启动该调试器,然后再有调试器启动exe运行(类似为exe做了一个shell)。附带一句,windbg目录下的gflags工具可以实现这个过程,例如,为notepad.exe指定"Debugger"为windbg.exe:
如果说IFEO是MS提供的一种调试机制----使得每次exe都运行在调试器下,方便工程师在开发阶段排除问题。那么接下来要说的恶意VerifierDlls则利用了MS提供的另一种机制----在测试阶段为exe的运行指定一套VeriferDlls(一般情况下是MS提供的ApplicationVerifier及其附带的dll),这些VerfierDlls通过API Hook的形式,实时检验应用程序是否存在隐含漏洞。要启用这个功能,需要为exe在上文提到的注册表路径下设置两个注册表项的值:a.创建DWORD类型的GlobalFlag,并指定其值为0x100;b.创建字符串项VerifierDlls,并指定恶意Dll的名字。
以我的实验环境为例,我为notepad.exe指定VerifierDlls的值为Msg.dll,Msg.dll存放在c:\windows\system32下,代码如下:
BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ){Sleep(2000); return TRUE;}设置后,一旦启动notepad.exe,就会调用Msg.dll!DllMain,最终效果就是拖后notepad.exe主界面显示约2s。
当然gflags工具也启用这个功能:
最后,提点题外话。这样的dll启动运行有很多限制:1.Dll加载时会获得一把加载锁,可能会在DllMain中引起死锁;2.某些Dll还没加载----对应的API暂时不能使用,这是绝对不能用LoadLibrary加载对应Dll,否则会引起1中的问题。当然,如果有问题就可能需要调试,调试手段已经记录在我的另一篇博文中:
从DllMain下断点到LdrpCallInitRoutine
本篇完
- 一种少见的Dll注入方式(基于MS 应用程序验证机制)
- dll注入的一种方式
- 一种隐藏注入DLL的方式,DLL重定位
- 一种隐藏注入DLL的方式,DLL重定位
- DLL劫持,注入DLL的一种方法
- 一种少见的Java初始化方法
- 一种隐藏DLL的方式
- 一种基于ACE的简单应用程序模型
- 用dll注入的方式隐藏进程
- DLL注入进程源码的新方式
- 用dll注入的方式隐藏进程
- 用dll注入的方式隐藏进程
- 插入apc的方式 实现dll注入
- dll的注入 (远程线程方式)
- 一种基于自定义控件的验证码
- dll注入方式
- DLL注入方式
- 一种基于ResponderChain的对象交互方式
- 第一章 正则表达式
- Linux环境下安装Tomcat
- C语言课程设计-MP3播放器(2)
- 阿里云服务器CentOS7配置Java Web项目运行环境(MySql,Tomcat,Jre)
- PAT1003. 我要通过!(20)
- 一种少见的Dll注入方式(基于MS 应用程序验证机制)
- php中函数参数传递
- 第一个AWT窗体
- Win10下OpenCV环境搭建(VS2017+OpenCV3.2.0)
- spring 一级和二级缓存
- Mybatis初步一--4.29号
- 贪心法求树的最小支配集,最小点覆盖,最大独立集
- 二叉树懒惰删除相关例程
- 太极图绘制