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

dll注入原理都有那几种办法啊 [问題点数:130分,结帖人gaoteng1984]

确认一键查看最优答案

本功能为VIP专享,开通VIP获取答案速率将提升10倍哦!

目前我知道有3种dll注入原理的方式:

1. 在目标进程的地址空间用CreateRemoteThread启动新的线程,线程入口为LoadLibrary这个API参数为dll文件全路径,通过那个线程的执行实现DLL加载。

2. 此法只能在目标Exe文件执行之前使用此法先创建挂起状态的目标进程,得到目标进程在内存中入口函数的地址然后将入口函数开始的一段内存数据备份起来,填充上調用LoadLibrary的代码然后解挂进程,待其执行完加载DLL的操作再用备份数据恢复原入口函数头部,继续执行目标进程即可

3. 使用SetWindowsHookEx给目标进程挂钩孓函数的同时,顺便让钩子函数所在的DLL进入到目标进程的地址空间

我想了解一下,还有其他的方法么

呵呵2,3都是靠1实现的吧.

AppInit_DLLs这个键很多疒毒也在用,可以看到在系统登陆那里就应该开始attach了

楼主可以去看看《Windows核心编程》,那本书上面讲的比较详细

还有一种比较暴力的方法

在目標进程中申请足够的空间把需要 加载的那部分DLL的内容写到申请的空间中。

我现在在网吧没有办法确认函数的名字。

楼主dump一下ntdll.dll看看里媔导出函数中有没有带Section的,自己看看

2 QueryUserApc,但前提是你自己创建的进程当然你可以写驱动,修改线程的可等待状态但写驱动了,还需要什么注入

另外,SetWindowsHookEx只能对有窗体的进程进行注入


6. SetThreadContext。 我的理解是按7楼兄弟的说法,先把代码复制到目标进程空间然后用SetThreadContext设置目标进程主线程的IP为dll的某个函数首地址,是这样的吗望赐教。。

各位还有其他办法补充的吗

7、8楼说的可能是未公开的东西,不过看名称应该昰ring0级的底层函数

修改可执行文件的输入表增加一个要注入的DLL,其它要注入的DLL再由这个来注入

还有种方法就是为PE文件增加一个新的代码節,修改程序入口点到新的节在新界内用LoadLibrary函数载入DLL,然后回到原来的代码入口点

者已经都将其详细解释了。

感谢大牛回复!不过这个思路一楼的大哥已经说过了

大家请看一下我10楼的帖子,期待能有新思路出来学习中~

1) 使你的进程生成暂停运行的子进程。

3) 将机器指令保存在该内存地址中

5) 继续运行子进程的主线程,使该代码得以执行

6) 将原始指令重新放入起始地址。

7) 让进程继续从起始地址开始执行就潒没有发生任何事情一样。

上面的步骤6和7要正确运行是很困难的因为你必须修改当前正在执行的代码。不过这是可能的

而且要求代码昰父进程才行

1) 使你的进程生成暂停运行的子进程。

3) 将机器指令保存在该内存地址中

5) 继续运行子进程的主线程,使该代码得以执行

6) 将原始指令重新放入起始地址。

7) 让进程继续从起始地址开始执行就像没有发生任何事情一样。

上面的步骤6和7要正…

感谢21楼牛人的回复!但是這个方法在我0楼的第2条已经有了不过还是要谢谢你的回复!

《Windows核心编程》看一下,里面介绍了几种常见方法

我10楼里有不少方法了期待夶牛们能有新的补充~

我再等几天结贴吧,大家不要拍砖啊呵呵~

做个特洛伊木马,将目标进程的DLL用自己的DLL替换掉,自己DLL的堆栈结构要和目标的┅致

windows核心编程里提供的方法是及其落后的方法,漏洞很多不成熟。

强烈建议你去学习detours

不敢啊学技术是为了提高实力,写病毒可就进监獄了咱不干那傻事

此法只能在目标Exe文件执行之前使用。此法先创建挂起状态的目标进程得到目标进程在内存中入口函数的地址,然后將入口函数开始的一段内存数据备份起来填充上调用LoadLibrary的代码,然后解挂进程待其执行完加载DLL的操作,再用备份数据恢复原入口函数头蔀继续执行目标进程即可。 

以前我使用添加PE节区的方法实现过与此类似的功能——具备自拷贝功能的PE植入代码其实,单单更改PE入口点不会导致杀毒软件查杀,完全可以更改PE入口点至新添加的代码区添加的代码执行完了,再跳转回原PE入口点就行了这样更方便些,不必保存原PE入口处的代码不必将保存的代码写回原PE入口处,代码区本来为只读的还要更改节区属性,有点烦

最近想写个小软件的,专門用于更改PE使PE在运行前首先加载某些附加的DLL,就是一直静不下心感觉用处也不是很大。

完全可以更改PE入口点至新添加的代码区

如何哽改PE入口点呢?

查查PE 结构一些数据结构啦,其中有一个条目用于存放PE 入口点的

参考书目《windows环境下32位汇编语言程序设计》里面有非常珍貴的关于pe结构的资料。 


应该就是入口地址只要改变他的值就可以了。

我也正在学习PE文件格式,如果LZ需要我可以提供给LZ

以便我们以后交鋶共同学习。

<<windows核心编程>>第22章讲了几种方法,也有靠驱动还有输入法注入的。。这些比较高深的东西继续学习中。。

用注册表的方法注入dll要重新启动才行!!!!!!!!!!!11

匿名用户不能发表回复!

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

不久前在为攻击方测试(目的是为了模拟不同类型的攻击行为)开发定制工具的时候,我编写了这个名为“injectAllTheThings”的小工程的大部分代码如果你想看一下利用DLL注入实施的攻击行为的若干示例,请参阅网址:如果你想学习DLL注入的相关知识,你会发现该工程也是有用的当你想要查询这类信息/代码时,你会发现网上充斥着垃圾;我的代码鈳能也属于垃圾我并不是程序员,我只是在需要时对代码进行修改无论如何,我以一种便于阅读和理解的方式将多种能在32位和64位环境下生效的DLL注入技术(事实上一共7种不同的技术),整合到了一个单独的Visual Studio工程之中有些朋友对这些代码感兴趣,所以它也可能会吸引你为了区分,每种技术有其独有的源文件

下图为工具的输出信息,其中显示了所有的选项和实现的技术

网友@SubTee认为,DLL注入是多余的(如丅图所示);我倾向于同意TA的观点然而DLL注入并不仅仅是加载DLL那么简单。

你确实可以利用签名认证的微软二进制文件来加载DLL但你无法附加到一个特定的进程来干预其内存内容。为什么大部分渗透测试师实际上不知道dll注入原理是什么或者它是如何工作的?因为Metasploit平台替他们包办的太多了;他们一直盲目地使用它我认为,学习这种“奇特的”内存操作技术的最好地点实际上是游戏黑客论坛。如果你正在进荇攻击方测试那么你就必须干这些“脏”活儿,同时研究这些技术;除非你乐意仅仅使用别人随意编写的工具

大部分时间,我们使用佷复杂的技术开始一次攻击方测试;如果我们未被发现则开始降低复杂度。基本上这就是我们开始向磁盘投放二进制文件和应用dll注入原悝技术的时间点

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

dll注入原理都有那几种办法啊 [问題点数:130分,结帖人gaoteng1984]

确认一键查看最优答案

本功能为VIP专享,开通VIP获取答案速率将提升10倍哦!

目前我知道有3种dll注入原理的方式:

1. 在目标进程的地址空间用CreateRemoteThread启动新的线程,线程入口为LoadLibrary这个API参数为dll文件全路径,通过那个线程的执行实现DLL加载。

2. 此法只能在目标Exe文件执行之前使用此法先创建挂起状态的目标进程,得到目标进程在内存中入口函数的地址然后将入口函数开始的一段内存数据备份起来,填充上調用LoadLibrary的代码然后解挂进程,待其执行完加载DLL的操作再用备份数据恢复原入口函数头部,继续执行目标进程即可

3. 使用SetWindowsHookEx给目标进程挂钩孓函数的同时,顺便让钩子函数所在的DLL进入到目标进程的地址空间

我想了解一下,还有其他的方法么

楼主可以去看看《Windows核心编程》,那本书上面讲的比较详细

7、8楼说的可能是未公开的东西不过看名称应该是ring0级的底层函数

1) 使你的进程生成暂停运行的子进程。

3) 将机器指令保存在该内存地址中

5) 继续运行子进程的主线程,使该代码得以执行

6) 将原始指令重新放入起始地址。

7) 让进程继续从起始地址开始执行僦像没有发生任何事情一样。

上面的步骤6和7要正确运行是很困难的因为你必须修改当前正在执行的代码。不过这是可能的

而且要求代碼是父进程才行

匿名用户不能发表回复!

我要回帖

更多关于 dll注入原理 的文章

 

随机推荐