【问题标题】:How to patch a line of code in a DLL?如何修补DLL中的一行代码?
【发布时间】:2011-08-09 13:34:39
【问题描述】:

我有一个缺少一行代码的 .Net dll。我想修补那个 DLL,但我没有源代码。我该怎么办?有谁知道修补此类问题的快速方法

【问题讨论】:

  • @0A0D DLL 未签名。
  • @John 不,我可以升级,但我没有时间正确测试他们的新版本,但是这个 bug 困扰着我的客户很多。
  • @Kees:你没有时间测试新版本,但你确实有时间测试你的补丁,你认为这只会影响单行代码?我会告诉你的客户等待升级。
  • @Kees,我们都去过那里。 X 版有 1 个小错误,Y 版修复了它,但也引入了 100 个新功能,因此您不想升级。但是 John 的意思是,试图在不查看整个源代码的情况下修复这个错误可能会破坏其他所有内容。部分代码可能依赖于此错误,因此为您修复它可能会在其他地方破坏它。
  • @Kees:我建议你不要浪费时间。

标签: c# .net dll reverse-engineering decompiling


【解决方案1】:

您可以使用 ildasm.exe 反汇编您拥有的 DLL,然后修复代码,然后使用 ilasm.exe 重新组装。虽然这是一些非常先进的东西......我过去尝试过并取得了一些成功。

【讨论】:

    【解决方案2】:

    使用ReflectorReflexil 插件,修改DLL 的一小部分快速而简单。我曾在少数情况下使用它来更改已部署 dll 中的一两行,通常是为了禁用某些条件导致的行为(不,不是破解应用程序,在我们自己的代码上合法使用以避免完全部署的重量)。

    【讨论】:

    • 如果你有源代码,并且修补dll比修复代码中的错误并重新编译更容易,那么你做错了。
    • @Nick:一定是弗洛伊德的失误,因为我拒绝支持 Reflector 和 RedGate,因为他们杀死了 Reflector v6。
    • @Lasse:这是一个非常乐观的观点,但在面对实际情况时通常是不正确的。
    • 我会试试的!希望它也适用于试用版!
    • @qes 嗯,这是我的看法,我从来不需要修补一些程序,它总是更容易修复代码中的错误并重新编译。所以是的,在我看来你做错了什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多