oc代碼混淆
混淆內容
1、混淆思路:利用宏定義進行混淆,混淆文件需要在需要混淆的文件中引用(或全局引用)
2、混淆內容:(橘黃色)
公開變量 @property (nonatomic, strong) NSString *gameName;
私有變量 @interface XXXX () {
NSString *gameName;
}
類名 @interface ClassName ()
方法名
公開 - (void)getUserName:(NSString *)name age:(NSInteger)age;
私有 - (void)openFile
}
文件名混淆(只混淆 .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代碼混淆