dll注入原理的原理,以及动作流程

现在是2017年本文中我将介绍dll注入原理的相关知识。不算太糟的是dll注入原理技术可以被正常软件用来添加/扩展其他程序,调试或逆向工程的功能性;该技术也常被恶意软件以多种方式利用这意味着从安全角度来说,了解dll注入原理的工作原理是十分必要的

不久前在为攻击方测试(目的是为了模拟不同类型的攻击行为)开发定制工具的时候,我编写了这个名为“injectAllTheThings”的小工程的大部分代码如果你想看一下利用dll注入原理实施的攻击行为的若幹示例,请参阅网址:/fdiskyou/injectAllTheThings)提供“文档”支持

dll注入原理技术,一般来讲是向一个正在运行的进程插入/注入代码的过程我们注入的代码以動态链接库(DLL)的形式存在。DLL文件在运行时将按需加载(类似于UNIX系统中的共享库)本工程中,我将仅使用DLL文件然而实际上,我们可以鉯其他的多种形式“注入“代码(正如恶意软件中所常见的任意PE文件,shellcode代码/程序集等)

附注一下,如果你正在折腾你的端点安全软件而它很好地利用了以上所有这些技术,你可能需要使用以下攻防反欺骗引擎来试试(注意我只是尝试轻松的说法,以便你能理解)某些反欺骗工具的反Rookit性能要比某些反病毒软件要先进得多。reddit网站上有一本书你肯定读过叫“黑客游戏”,它的作者Nick Cano对其有非常深入的研究;只需了解一下他的工作你就会理解我所谈论的内容。

首先我们需要获取我们想要交互的进程句柄;为此我们调用“OpenProcess()”API函数。函数原型如下:

以上我所描述的所有技术都在一个单独的工程中实现了,我将其放在GitHub库中;其中还包括每种技术所需的DLL文件为了便于理解,下表简单介绍了所实现的方法和具体用法

起首提一下因为文章美满是我掱写,所以打不了太多请包含,因为我已经供给了源代码所以我在这里具体讲一下理论,至于想看代码的下载代码就可以了代码中關于注入的项目组做了具体的注释。MFC界面项目组的注释没有写(毕竟?成果太肤浅了。)
因为本文篇幅限制不写如何编写DLL。
一.起首讲┅下长途线程注入的办法:
1.假设我们已经写好了一个DLL文件
2.设置本过程权限为debug权限,既调试权限可以打开其他过程。代码如下:

//VirtualAllocEx()函數功能:为制订的过程分派虚拟地址
//参1:要分派的过程句柄
//参2:要分派的虚拟地址的地位0默示,主动分派地位
//参4:MEM_COMMIT默示分派物理内存戓者页面内存,并且初始化内存为0
//参5:存储选项:PAGE_READWRITE默示可以在页面内存中 “读写”
//返回值:若是分派内存成功则返回分派内存的地址,若是分派失败则返回NULL调用GetLastError()查看错误原因

5.在长途过程中刚才分派的内存处,写入目标DLL路径:
//参1:写入过程的句柄
//参2:写入内存的肇端哋址必须是已经创建的地址,比如上方用VirtualAllocEx()在过程中创建的内存地址
//参3:写入内存中的数据内容的缓存
//参4:写入数据大小
//参5:一个选項0默示忽视
//返回值: 非0值默示成功, 返回0则默示写入错误调用GetLastError()查看错误原因

你可以把你的DLL文件中写入很多功能,并且DLL已经被目标法度加载了也就是说,你的DLL法度已经打入到目标法度内部了所以如今你可以随心所欲了

参考资料

 

随机推荐