目前iOS机审AI已经非常智能了,代码部分尤其是属性和方法我们应该注意什么呢?
也许有的人只是简单全局替换一小部分比较长的名称,或者用工具做一些简单全局替换,结果就是4.3或者2.3.1,严重点的封号。如何避免,关键是细节上做到位,以下是部分关键点的示例总结:
混淆前
@interface Node : NSObject
@property(nonatomic, copy) NSString *title;
@property(nonatomic, copy) NSString *name;
@property(nonatomic, assign) NSInteger userClickCount;
- (void)reloadData;
+ (BOOL)sendMsg;
- (BOOL)sendMsg;
- (void)refreshData:(UILabel *)label byName:(NSString *)name;
@end
混淆后
普通做法
常见的混淆有以下缺陷:
- 混淆不彻底:title是UIViewController的属性,reloadData是UITableView的方法,其实只要不他们的子类都是可以混淆的
- 命名怪异生僻:大量字母数字下划线单独随机组合,来避免命名冲突,没有实际意义
- 没有做方法类型区分:类方法和对象方法虽然同名,混淆完无法区分处理,只是简单一起替换
- 混淆不够完整:方法名多参或带有block时,第二个以上参数没处理
@interface Node : NSObject
@property(nonatomic, copy) NSString *title;
@property(nonatomic, copy) NSString *name;
@property(nonatomic, assign) NSInteger f_34App;
- (void)reloadData;
+ (BOOL)selcouthBottomPronk;
- (BOOL)selcouthBottomPronk;
- (void)mesonoxianDepone:(UILabel *)label byName:(NSString *)name;
@end
模拟人工处理
需要做到什么底部才算合格呢
我认为应该做到以下几点:
- 命名尽可能短常见或者利用系统常见名称例如title、view
- 不同的类,可以适当复用相同命名
- 相同的类,静态方法和对象方法独立混淆,最好不要简单全局替换,这样会造成比重没有改变
- 方法名的所有参数应该都混淆,只改第一个远远不够
@interface Node : NSObject
@property(nonatomic, copy) NSString *subTitle;
@property(nonatomic, copy) NSString *user;
@property(nonatomic, assign) NSInteger count;
- (void)refresh;
+ (BOOL)sendInfo;
- (BOOL)pushData;
- (void)reset:(UILabel *)label with:(NSString *)name;
@end
好的工具完全能做到这些
参考
WHC_ConfuseSoftware
DiffHelper
STCObfuscator
iOS_NQConfuseTool
ZFJObsLib
520coding/confuse