- iOS程序可以通过class-dump、Hopper、IDA等获取类名、方法名、以及分析程序的执行逻辑
如果进行代码混淆,可以加大别人的分析难度
- iOS代码混淆方案
源码的混淆 类名 方法名 协议名 ……
LLVM中间代码IR的混淆(容易产生bug) 自己编写Pass
ollvm: https://github.com/obfuscator-llvm/obfuscator
源码的混淆-通过宏定义混淆方法名、类名
注意点
- 不能混淆系统方法
- 不能混淆init开头 的等初始化方法
- 混淆属性时需要额外注意set方法
- 如果xib、storyboard中用到了混淆的内容,需要手动修正
- 可以考虑把需要混淆的符号都加上前缀,跟系统自带的符号进行区分
- 混淆过多可能会被Appstrore拒绝上架,需要说明用途
建议
- 给需要混淆的符号加上了一个特定的前缀
小工具,李明杰的
https://github.com/CoderMJLee/MJCodeObfuscation
ios-class-guard
第三方工具
https://github.com/Polidea/ios-class-guard
它是基于class-dump的扩展
用class-dump扫描出可执行文件中的类名,方法名,属性名等并做替换,会更新xib和storyboard名字
用法
brew install ios-class-guard
ios-class-guard [options] <mach-o-file>
常用参数
--sdk-root <path>:用于指定SDK路径
如果是模拟器SDK,一般路径就是/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulor.platform/Developer/SDKs/iPhoneSimulor.sdk
--sdk-ios:相当于指定SDK路径为真机设备SDK
-X <path>:用于指定xib,storyboard所在目录,他会递归搜索
-O <path>:生成的混淆头文件路径
-m <path>:符号映射表(默认是symbols.json)
字符串加密
很多时候,可在还行文件中的字符串信息,对破解者来说,非常关键,是破解的捷径之一
为了加大破解,逆向难度,可以考虑对字符串进行加密
字符串加密技术有很多种,可以根据自己的需要自行定制算法
可以对每个字符进行异或处理(^)
来源:CSDN
作者:helloworld_junyang
链接:https://blog.csdn.net/helloworld_junyang/article/details/90403434