1. 程式人生 > >oc代碼混淆

oc代碼混淆

game classname open 重復 sna 多說 三次 prop atom

混淆內容

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代碼混淆