DLL注入后拦截BIG应用程序执行

时间:2010-09-09 01:55:19

标签: debugging dll reverse-engineering disassembly interception

我必须在许多地方拦截非常大的应用程序中的执行。

我可以使用哪些程序来执行此操作?这些问题有哪些技术?

手动逆向工程和添加钩子可能不是这个问题的最佳解决方案,因为应用程序非常大,应用程序的某些部分可以在一段时间内更新,我认为使用一些工具或良好实践来解决这个问题我可以更快地做到这一点,任何人都知道怎么做?

有人帮帮我吗?

4 个答案:

答案 0 :(得分:4)

作为工具部分已被涵盖,这里有一些技术。

根据您需要挂钩的内容以及是否存在保护,有以下几种方法:

  1. 虚拟化二进制文件中的相对调用/ jmp修补:这是最简单的,但是如果你不能自动找到对函数的所有引用也会做很多工作,这可能不适用于这个原因符合您的标准。

  2. IAT / EAT挂钩:这是用于导入(IAT)和导出(EAT),如果您的目标是已知的导入/导出的API函数集,则非常有用。可以找到一个很好的例子herehere

  3. Hot-Patching:Windows XP SP2引入了一种称为“热补丁”的东西(用于实时系统功能更新),其中所有(WinAPI)函数都以“mov edi,edi”开头,允许将相对跳转修补到每个热补码函数(one can do it too)上方创建的自由空间中。这通常用于校验和IAT的程序或有其他有趣的保护形式,可以找到更多信息herehere

  4. Code-Caving:通过在任意代码空间中放置重定向来捕获执行流程。请参阅hereherehere

  5. VFT / COM重定向:基本上覆盖对象虚拟功能表中的条目,对基于OOP / COM的应用程序非常有用。见this

  6. 有很多第三方图书馆,最着名的可能是MS Detours,也可以查看APIHijackmini-hook engine

    当然,没有任何东西可以替代你需要用ollydbg这样的调试器进行的初步调查,但是知道你要使用的方法可以大大缩短它们花费的时间。

答案 1 :(得分:1)

关于你究竟需要做什么的一些细节(例如,你如何确定在哪里打破)会很好。根据您的具体情况,Pin之类的内容可能会有效。

答案 2 :(得分:1)

我建议使用Deviare API Hook。这是您可以做到所需的最简单方法。它有一些COM对象,您可以使用它们从不同的进程挂钩应用程序。在您的过程中,您将获得完整的参数信息,您可以在任何编程语言中使用它(我使用的是C#,它就像一个魅力)。 如果你需要拦截注册表API,我建议使用Deviare调试你需要拦截的内容,但是你必须自己创建钩子,否则,你会发现性能问题。

答案 3 :(得分:0)

如果您对拦截方法调用感兴趣,可以执行API挂钩。

或者使用像softice或ollydbgwin32dasm这样的反汇编程序。