20

我最近在浏览互联网时,偶然发现了 Dll Injection。

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

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

如果是这样,它可以用来做什么?

什么语言支持这个?

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

谢谢你的时间,

埃默里翁

ps:有关此主题的网站/书籍将不胜感激!

4

3 回答 3

21

我想到了几个用途:

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

  • 记录:本着同样的精神,为了记录目的,经常使用迂回代码作为函数的前缀,即查看调用它的参数。此外,一些从 DirectX 应用程序记录屏幕输出的应用程序通过绕过 DirectX 调用来实现这一点,这再次涉及将 DLL 注入到监视调用的进程中。

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

过去,在常规业务应用程序中,我个人不得不处理上述所有用例,从使用热补丁确保医疗服务中关键通知系统的正常运行时间到使用弯路/日志记录来允许专有记录管理(通过一家当时已经死掉的软件商店)实时与成熟的 CRM 解决方案对话。

和往常一样,它只是你盒子里的一个工具,它本身并没有什么“邪恶”的地方。无论您出于何种目的使用它都很重要。

于 2010-09-29T08:25:10.667 回答
7

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

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

于 2010-09-29T08:28:14.347 回答
3

在计算机编程中,DLL 注入是一种通过强制加载动态链接库来在另一个进程的地址空间内运行代码的技术。 [1] 第三方开发人员经常使用 DLL 注入来影响程序的行为,其作者没有预料到或不打算这样做。例如,注入的代码可能会捕获系统函数调用,或读取密码文本框的内容,而这是通常无法做到的。

来源和更多信息在这里:http ://en.wikipedia.org/wiki/DLL_injection您还可以找到一些对外部资源的良好参考。

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

于 2010-09-29T08:09:23.763 回答