【问题标题】:Protecting shared library保护共享库
【发布时间】:2011-07-13 04:49:04
【问题描述】:

有没有办法保护共享库(.so 文件)免受逆向工程?

有没有免费的工具可以做到这一点?

【问题讨论】:

    标签: shared-libraries reverse-engineering protection


    【解决方案1】:

    显而易见的第一步是剥离所有符号库,您提供的已发布 API 所需的符号除外。

    “标准”反汇编预防技术(例如跳转到指令中间,或加密某些部分代码并按需解密)适用于共享库。

    其他技术,例如检测到您在调试器下运行并且失败,请不要真正应用(除非您想让最终用户完全发疯)。

    假设您希望最终用户能够调试他们正在使用您的库开发的应用程序,那么混淆几乎是一个失败的原因。您的努力真的更好地用于提供功能和支持。

    【讨论】:

    • italic_比如跳转到指令中间,或者加密部分代码并按需解密_italic你如何加密/解密代码?你能提供一个小样本吗?
    【解决方案2】:

    逆向工程保护有多种形式,这里只是其中的几种:

    • 检测逆向环境,例如在调试器或虚拟机中运行以及中止。这可以防止分析师弄清楚发生了什么。通常被恶意软件使用。一个常见的技巧是运行未记录的指令,这些指令在 VMWare 中的行为与在真实 CPU 中的行为不同。

    • 格式化二进制文件,使其格式错误,例如缺少 ELF 部分。您正试图阻止普通分析工具打开文件。在 Linux 上,这意味着做一些 libbfd 不理解的事情(但像 capstone 这样的其他库可能仍然有效)。

    • 随机化二进制的符号和代码块,使它们看起来不像编译器生成的那样。这使得反编译(猜测原始源代码)更加困难。一些商业程序(如游戏)部署了这种保护。

    • 动态改变自身的多态代码(例如,加载时解压缩到内存中)。最复杂的那些是为恶意软件设计的,被称为打包程序(避免使用这些,除非你想被反恶意软件工具标记)。还有像 UPX http://upx.sourceforge.net/ (它提供了一个撤消 UPX 的工具)之类的学术类。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-02-09
      • 2012-06-14
      • 1970-01-01
      • 2014-02-07
      • 1970-01-01
      • 1970-01-01
      • 2022-08-11
      相关资源
      最近更新 更多