iOS私有方法加密混淆

背景

因为苹果审核禁止调用私有方法,在开发过程中很多的有用的私有方法都不能直接使用。那有没有办法可以绕开苹果对私有方法的审核呢?

首先我们猜测下苹果的审核方式:
1、通过扫描二进制文件,mach-O都保存有所有的代码中的方法名字符串,如果直接明文调用私有方法,扫描二进制文件就会被发现。
2、通过运行时的方法调用检测,这种情况需要执行到对应代码才会被发现。(可以在审核界面把对应的代码屏蔽掉。)

实现

如果审核逻辑如上,我们只要将调用的方法名混淆下,在二进制文件扫描阶段就可以避免被扫描出来。

下面就介绍一种方法名加密混淆方法,字节加密
要加密的方法名是 : test。

1、将方法名转换为char*字节,并把每个字节与一个字节(这里用0x55)进行亦或处理, 最后通过printf将转换后的字节打印出来。

NSString *method = @"test";
NSData *data = [method dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES];
char *bs = malloc(sizeof(char) * data.length);
memcpy(bs, data.bytes, data.length);
for (int i = 0 ; i< data.length; i++) {
     char c = bs[i] ^ 0x55;
     printf("0x%2x",c);
}

2、 然后我们代码中通过char数组保存转换后的字节信息,在使用时将其在转换成方法名字符串test。

static unsigned char selByte[] = {0x21,0x30,0x26,0x21};
char sel[5] = {0};
for (int i = 0; i< sizeof(selByte); i++) {
      char b = selByte[i] ^ 0x55;
      sel[i] = b;
}
NSString *selStr = [NSString stringWithCString:sel encoding:NSUTF8StringEncoding];

注:虽然我们可以使用这种方法避开以上两种苹果的审核,但是也应该尽量避免使用私有方法。我们无法保证那天苹果的审核会不会升级,增加什么新的审核逻辑。

本文作者: ctinusdev
原文链接: https://ctinusdev.github.io/2018/02/25/iOSPrivateMethodEncrypt
转载请注明出处!

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,147评论 19 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,805评论 18 399
  • 因为某个语文老师的原因,我突然想写日记了。 以前为什么不写日记呢,害怕被人偷看什么的都不是关键,主要是因为懒。现在...
    AP就是AP阅读 202评论 0 1
  • 收获: 1.这本书讲了什么内容: 如何从零开始开始理财,通过存钱,基金,股票等到最后搭建自己的理财体系 2.我最喜...
    耀然阅读 507评论 0 4
  • 人一生便是在选择或被选择中度过。 出生到自己能有意思的选择前,便是被选择,被选择的生死。 可以选择后,可以选择什么...
    行走深渊仰望星空阅读 256评论 1 1