我最近在浏览互联网时,偶然发现了Dll Injection。
我认为这是一个有趣的主题但是,我不知道它的目的是什么?
我已经读过它可以用于破解/黑客游戏和软件,但它是否也可以做一些积极的事情呢?
如果是的话,它可以用于什么?
支持这种语言的语言是什么?
为了记录,我不打算尝试使用已获得的知识破解/破解任何游戏,无意做违法行为!
感谢您的时间,
Emerion
ps:关于此主题的网站/书籍将不胜感激!
答案 0 :(得分:20)
我想到了几种用途:
热补丁:允许您更新/修补部分代码,而无需实际关闭进程或重新启动。微软本身通过为函数添加5字节NOP块来确保Windows的大部分内容是可热补码的。为什么?因为你可以用5个字节的JMP到代码的任何其他部分,所以热补丁基本上用JMP覆盖前缀字节到更新/修补的代码,瞧,你的代码做了一些全新的事情。这通常与DLL注入一起使用以将新代码加载到目标进程中,虽然不是强制性的,但它是其使用之一。
记录:本着同样的精神,绕行代码通常用于为函数添加前缀以进行日志记录,即查看调用它的参数。此外,一些记录DirectX应用程序屏幕输出的应用程序通过绕过DirectX调用来执行此操作,这再次涉及将DLL注入监视调用的进程。
子类:不是在OOP意义上,而是在Windows意义上,即为现有窗口提供新的WndProc以改变其行为。虽然您可以通过SetWindowLongPtr简单地设置不同的消息处理例程,但限制因素是该函数需要驻留在目标进程地址空间中。这就是注入再次出现的地方:您在DLL中提供了一个新实现,将其注入目标进程并调用SetWindowLongPtr
。例如,这可用于在外部窗口上提供自定义的附加绘图。
我个人不得不在过去的常规业务应用程序中处理所有上述用例,使用热补丁来确保医疗服务中关键通知系统的正常运行时间,以及使用绕行/日志记录来允许专有记录管理(由当时已经死的软件商店)实时与完整的CRM解决方案进行对话。
与往常一样,它只是你盒子里的一个工具,并没有任何内在的“邪恶”。无论你使用它的目的是什么,都很重要。
答案 1 :(得分:5)
微软研究院有一个关于这个主题的非常好的项目,重点是通过使用dll注入拦截对WinAPI函数的调用。
这是链接,它应该让你忙碌一段时间:Detours
答案 2 :(得分:3)
在计算机编程中,DLL注入是一种技术,用于通过强制加载动态链接库来在另一个进程的地址空间内运行代码。[1]第三方开发人员经常使用DLL注入来以其作者未预期或打算的方式影响程序的行为。例如,注入的代码可以捕获系统函数调用,或者读取密码文本框的内容,这是通常无法完成的。
来源和更多信息:http://en.wikipedia.org/wiki/DLL_injection您还可以找到对外部来源的一些很好的参考。
如果遗留系统没有源代码并且您需要更改其行为,那么可以使用Dll Injection是有充分理由的。虽然这是一个肮脏的黑客,应该作为最后的手段,IMO。