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 (nonatomicstrong) 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 (nonatomicstrong) NSString  *gameName;

字典key值  dict = @{@"gameName" : @"大逃杀"}    

   在你混淆 gameName -> gjkgnshd 时 ,下面为混淆结果

      @property (nonatomicstrong) NSString  *gjkgnshd; 

      dict = @{@"gjkgnshd" : @"大逃杀"}   

   当dict为客户端自定义的字典时不会产生影响,但当dict为服务器返回数据时,轻则取不到数据,重则崩溃。

      因为:返回结果为   {@"gameName" : @"大逃杀"}       客户端取值时为  dict[@"gjkgnshd"]  key不存在而引起错误。 

抱怨几句:这是我第一次做代码混淆,网上没有搜索到有关oc的混淆有实际意义的脚本或者软件,所以自己利用自己肤浅的python,勉强完成了这次混淆任务。这其中的坑有很多,相信看了这篇博客后,可以让初次尝试混淆的同行们躲过几个。话不多说,上代码

 

 

 

接下来就简单了 , 直接上代码

 

以上是关于oc代码混淆的主要内容,如果未能解决你的问题,请参考以下文章

IOS逆向-LLVM代码混淆

C和OC的基础语法(易混淆的概念知识)

JS代码混淆了,怎么反混淆回去?

安卓编程 如何进行代码混淆

谁给推荐个c++代码混淆工具

这段JS代码用了混淆,有很多![]+,请帮忙还原。