代码之家  ›  专栏  ›  技术社区  ›  Jere.Jones

如何在小型转储中更改模块的校验和?

  •  5
  • Jere.Jones  · 技术社区  · 16 年前

    我编写(和销售)的软件在分发之前经过压缩和加密。每次发布新版本时,我都会保留所有.map文件和生成的二进制文件,包括exe,然后再对其进行压缩和加密。

    当它在客户机上崩溃时,我会得到一个小型转储。我在VisualStudio中打开这些小型转储并在那里进行探索。

    如果我能在调试minidump时使用从原始构建中保存的符号,这将非常有用。

    我想我可以手动编辑迷你转储或更改保存的二进制文件的校验和,以匹配可分发文件的校验和。我更愿意操纵存储的副本,这样我就不必修改所有传入的转储文件,但我对其中任何一个都不感兴趣。

    所以,我的问题是:如何定位这些校验和,并找出应该用什么替换它们?作为辅助问题:有更好的方法吗?

    2 回复  |  直到 16 年前
        1
  •  5
  •   Aaron Klotz    16 年前

    如果不知道您是如何压缩和加密二进制文件的,我很难说得非常具体。

    blog post

    我认为你可以采取一些方法来解决这个问题。要想真正实现这一点,您可能需要考虑使用WEBBG而不是VisualStudio调试器。你马上就会明白我为什么推荐这个。。。

    WinDbg提供了一些允许轻松加载符号文件的选项。此选项的想法是,如果源代码没有更改,但二进制文件来自与PDB不同的版本,则可以放弃GUID检查并加载不匹配的符号文件。我不知道这将如何与您的压缩和加密工作,所以YMMV。

    WinDbg及其附带的工具可以用来从可执行文件和PDB中转储GUID,但我现在略去它,因为我希望这些步骤不是必需的。

    .symopt +0x40
    !sym noisy
    ld <exe name>
    

    第一个命令启用 SYMOPT_LOAD_ANYTHING !sym ld <exe name> . 如果你再重复一遍

    希望这能有所帮助——再说一次,我不知道这对您的压缩和加密有多好,但值得一试。

        2
  •  0
  •   Luke    16 年前

    这种压缩/加密有点像UPX吗?如果二进制文件的实际可执行内容正在发生变化(就像UPX等工具所做的那样),那么你就不会走运(除非你喜欢用汇编语言调试复杂的应用程序)。您的软件是否真的如此重要/特殊,以至于其二进制文件在交付之前需要加密?根据我的经验,调试崩溃转储的能力比阻止人们对代码进行反向工程要重要得多。