【发布时间】:2011-07-13 04:49:04
【问题描述】:
有没有办法保护共享库(.so 文件)免受逆向工程?
有没有免费的工具可以做到这一点?
【问题讨论】:
标签: shared-libraries reverse-engineering protection
有没有办法保护共享库(.so 文件)免受逆向工程?
有没有免费的工具可以做到这一点?
【问题讨论】:
标签: shared-libraries reverse-engineering protection
显而易见的第一步是剥离所有符号库,您提供的已发布 API 所需的符号除外。
“标准”反汇编预防技术(例如跳转到指令中间,或加密某些部分代码并按需解密)适用于共享库。
其他技术,例如检测到您在调试器下运行并且失败,请不要真正应用(除非您想让最终用户完全发疯)。
假设您希望最终用户能够调试他们正在使用您的库开发的应用程序,那么混淆几乎是一个失败的原因。您的努力真的更好地用于提供功能和支持。
【讨论】:
逆向工程保护有多种形式,这里只是其中的几种:
检测逆向环境,例如在调试器或虚拟机中运行以及中止。这可以防止分析师弄清楚发生了什么。通常被恶意软件使用。一个常见的技巧是运行未记录的指令,这些指令在 VMWare 中的行为与在真实 CPU 中的行为不同。
格式化二进制文件,使其格式错误,例如缺少 ELF 部分。您正试图阻止普通分析工具打开文件。在 Linux 上,这意味着做一些 libbfd 不理解的事情(但像 capstone 这样的其他库可能仍然有效)。
随机化二进制的符号和代码块,使它们看起来不像编译器生成的那样。这使得反编译(猜测原始源代码)更加困难。一些商业程序(如游戏)部署了这种保护。
动态改变自身的多态代码(例如,加载时解压缩到内存中)。最复杂的那些是为恶意软件设计的,被称为打包程序(避免使用这些,除非你想被反恶意软件工具标记)。还有像 UPX http://upx.sourceforge.net/ (它提供了一个撤消 UPX 的工具)之类的学术类。
【讨论】: