美文网首页
iOS私有方法加密混淆

iOS私有方法加密混淆

作者: Tomychen | 来源:发表于2018-02-25 17:40 被阅读0次

    背景

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

    首先我们猜测下苹果的审核方式:
    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
    转载请注明出处!

    相关文章

      网友评论

          本文标题:iOS私有方法加密混淆

          本文链接:https://www.haomeiwen.com/subject/ahwrxftx.html