2010-09-29 32 views
15

最近我在浏览互联网,当时我偶然发现了Dll Injection。Dll Injection - 它有什么可能?

我认为它是一个有趣的主题,但是,我不知道它的目的是什么?

我读过它可以用于破解/黑客入侵游戏和软件,但它也可以做一些积极的事情吗?

如果是这样,它可用于什么?

什么语言支持?

为了记录,我不会尝试破解/破解任何获得知识的游戏,无意做非法!

感谢您的时间,

Emerion

PS:网站/书籍是关于这个问题,将不胜感激!

回答

18

有迹象表明,我想起几个用途:

  • 热补丁:允许您更新/你的代码的补丁部分,而无需实际关闭进程或重新启动。微软自己通过在5个字节的NOP块前加前缀来确保Windows的大部分都是热补丁。为什么?因为你可以用5字节的JMP代码的任何其他部分,所以热补丁基本上用JMP覆盖前缀字节到更新/修补的代码,并且瞧,你的代码会做一些全新的事情。这通常与注入DLL一起使用,以加载新的代码到目标进程,而不是强制性的,这是它的一个使用

  • 记录:本着同样的精神,迂回码经常被用来添加前缀函数用于记录目的,即查看它被调用的参数。此外,某些记录DirectX应用程序屏幕输出的应用程序通过绕开DirectX调用来实现此目的,这又涉及将DLL注入到监视调用的进程中。

  • 子类:不是在OOP意义上,而是在Windows意义上,即为现有窗口提供新的WndProc来改变它的行为。虽然您可以通过SetWindowLongPtr简单地设置不同的消息处理例程,但限制因素是该函数需要驻留在目标进程地址空间中。这是再次注入的地方 - 您在DLL中提供了一个新的实现,将其注入到目标进程中并调用SetWindowLongPtr。例如,这可用于在外部窗口上提供自定义附加绘图。

我曾亲自不得不处理上述所有用例在过去,在正常的业务应用程序,使用热补丁,以确保医疗服务的重要通知系统上正常运行使用走弯路/记录到允许专有的记录管理(由当时已经死亡的软件商店)实时与全面的CRM解决方案进行对话。

与往常一样,它只是您盒子里的一个工具,它本身并没有什么“邪恶”的东西。无论您使用什么目的,这都是重要的。

3

在计算机编程,DLL注射是使用迫使它加载一个动态链接库来运行另一个进程的地址空间中的代码的技术。[1]第三方开发人员经常使用DLL注入来影响程序的行为,但其作者没有预期或打算这样做。例如,注入的代码可能会陷入系统函数调用,或者读取密码文本框的内容,这是无法按照常规方式完成的。

来源和更多资讯:http://en.wikipedia.org/wiki/DLL_injection您也可以找到外部来源的一些很好的参考。

当您有一个没有源代码的遗留系统并且您需要更改其行为时,可以使用Dll注入的一个很好的理由。这是一个肮脏的黑客,应该作为最后的手段,国际海事组织。

4

在微软研究院有一个非常好的项目关于这个主题,专注于通过使用dll注入拦截对WinAPI函数的调用。

这是链接,它应该让你忙一阵子:Detours

+1

走弯路是好的,但新的发展你应该更喜欢http://easyhook.codeplex.com/代替 - 允许64以及作为内核模式挂钩,并允许钩子被写为托管代码(!) – snemarch 2010-09-29 13:02:49

+0

@snemarch - 不错!我知道Detours已经老了,但我不知道有人把这个概念继续下去 - 我会喜欢玩这个游戏。 – slugster 2010-09-29 21:15:21