技术说明
出于某种需求,一些刚接触iOS混淆的用户,很多东西还不是很明白,以下是一些常见的技术误区,汇总如下
项目 | 作用 | 说明 | 验证工具 |
---|---|---|---|
删除注释 | 没用 | 注释不参与编译 | Hopper、IDA |
宏定义混淆 | 没用 | 宏在预编译阶段会展开替换,改宏名无效 | Hopper、IDA |
文件夹名混淆 | 没用 | 文件夹只是给开发者方便区分,代码编译链接之后只有一个二进制文件 | Hopper、IDA |
枚举名混淆 | Swift有用 | 在 Swift 中,枚举类型是一等(first-class)类型,有用 OC、C、C++枚举的枚举本质上无符号整形,编译完和名称无关 |
Hopper、IDA |
局部变量名称混淆 | 没用 | 局部变量的名称最终编译成寄存器,和名称无关 | Hopper、IDA |
打乱函数申明、定义顺序 | 基本没用 | 函数申明只是为了后期代码链接,声明不参与编译。单纯改定义顺序用处不大,因为一个排序结果都是一样。 | |
属性、方法、类、图片等名称混淆:只加前后、单词随机拼接、字符随机组合 | 有害 | 刻意加前后缀只会增加风险,移除前后缀对apple的智能AI太小儿科了,无意义的单词拼接大概率触发封号,字符随机组合试用用app加固,提审只会2.3.1 | 好的命名应该尽可能:短、常见、有意义。例如:view、title、name、x、y等 |
插入垃圾代码 | 双刃剑 | 没有语义(简单独立伪代码,简单独立插入,一些全局方法的频繁调用)的垃圾代码,大概率触发封号 | 当你一眼就感觉这代码很别扭 |
好的混淆工具完全能做到以上需求,建议新用户多对比,多实践,不要轻易相信任何你无法验证真伪的说词。
总结
马甲包提审前要能说服自己,任何的投机取巧,侥幸心理都是不可取的。
参考
WHC_ConfuseSoftware
DiffHelper
STCObfuscator
iOS_NQConfuseTool
ZFJObsLib
520coding/confuse