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