逆向工程分析的三大线索是:字符串、导入表、函数名。我捣鼓了一个自己的方案,以加大 iOS/OSX 程序的逆向分析难度:
-
Camo 程序中搜索源代码目录,找出所有 Object 类名、方法名、属性名的符号,排除掉xcode iPhone SDK 中的符号(也是自动搜索获取),再排除掉导出的和第三方依赖的符号(都是根据参数自动获取)。然后把这些名称全部#define 一下成为随机的名称,写到一个.h中;
-
在 Prefix.pch 的最前面#import这个自动生成的.h。去掉这个.h一样可以编译,加上.h就是混淆名称,没有任何副作用。
PS:Generate Debug Symbol一定要去掉(Xcode默认创建的project,即使是Release[Archive/Profile]编译也启用了Generate Debug Symbol的),去掉之后“等同于源代码”的问题可以有很大的改观。
期望以后Camo还支持一个另外的两个特性:加密所有的字符串,所有的函数调用(全部使用dlsym来动态获取)。这样编译出来的二进制文件几乎自己都认不出来了。
完整的混淆方案,后面再整理 Check List。
2014.07.30 补充:
终于出成品了,参看:https://github.com/Yonsm/Camo