oc代码混淆
Posted zzlei
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oc代码混淆相关的知识,希望对你有一定的参考价值。
混淆内容
1、混淆思路:利用宏定义进行混淆,混淆文件需要在需要混淆的文件中引用(或全局引用)
2、混淆内容:(橘黄色)
公开变量 @property (nonatomic, strong) NSString *gameName;
私有变量 @interface XXXX () {
NSString *gameName;
}
类名 @interface ClassName ()
方法名
公开 - (void)getUserName:(NSString *)name age:(NSInteger)age;
私有 - (void)openFile:(NSString *)filePath size:(NSInteger)size {
}
文件名混淆(只混淆 .m 文件)
UserInfo.h
UserInfo.m
字典中的key值(用于过滤混淆内容)
[result objectForKey:@"status"]
result[@"status"]
以上是需要混淆的内容,接下来说注意事项
公开变量: @property (nonatomic, strong) NSString *gameName;
我们使用时会用到 self.gameName 、 _gameName 、- (void)setGameName:(NSString *)gameName.
那么混淆时一个公开变量需要对应进行三次混淆。假定将 gameName 混淆为 gjkgnshd
1、gjkgnshd
2、_gjkgnshd
3、setGjkgnshd (这里需要注意,gameName 的 set 方法为 setGameName , 变量名的首字母需大写,之前大写则不变)
私有变量: 一次直接混淆
类名: 一次直接混淆
方法名: 一次直接混淆 (这里需要注意 set 方法需要过滤掉,如果这里进行set方法混淆,会造成重复混淆,99.99%产生错误,因为在混淆公开变量的时候你已经混淆过了,但公开变量的set方法和参数有特定联系,所以必须在混淆公开变量时进行混淆)
文件名: 批量重命名即可
字典中的key值:混淆时一定要过滤掉字典中的key值 :(举个栗子 )
私有变量 @property (nonatomic, strong) NSString *gameName;
字典key值 dict = @{@"gameName" : @"大逃杀"}
在你混淆 gameName -> gjkgnshd 时 ,下面为混淆结果
@property (nonatomic, strong) NSString *gjkgnshd;
dict = @{@"gjkgnshd" : @"大逃杀"}
当dict为客户端自定义的字典时不会产生影响,但当dict为服务器返回数据时,轻则取不到数据,重则崩溃。
因为:返回结果为 {@"gameName" : @"大逃杀"} 客户端取值时为 dict[@"gjkgnshd"] key不存在而引起错误。
抱怨几句:这是我第一次做代码混淆,网上没有搜索到有关oc的混淆有实际意义的脚本或者软件,所以自己利用自己肤浅的python,勉强完成了这次混淆任务。这其中的坑有很多,相信看了这篇博客后,可以让初次尝试混淆的同行们躲过几个。话不多说,上代码。
接下来就简单了 , 直接上代码
以上是关于oc代码混淆的主要内容,如果未能解决你的问题,请参考以下文章