美文网首页面试
iOS 方法名混淆 代码混淆

iOS 方法名混淆 代码混淆

作者: Kingiiyy_iOS | 来源:发表于2018-11-22 15:45 被阅读0次

    一.目的:

    1.通过审核
    原因是规避代码相似度极高而过不了机审.增加代码.代码混淆

    2.安全需要
    对安全性能要求较高的产品.防止别人通过class-dump反编译你的应用得到源码

    文章主要讲解方法名混淆的问题。如有问题,还请大神指点! OK let do it

    二.执行:

    1.打开终端 先cd到工程的目录下 创建两个脚本文件
    confuse.sh
    func.list

    *****$ cd /Users/king/Desktop/test 
    *****$ touch confuse.sh
    *****$ touch func.list
    
    屏幕快照 2018-11-22 下午2.36.35.png

    接下来把这两个文件加到工程中


    屏幕快照 2018-11-22 下午3.08.38.png

    在confuse.sh 中加入脚本代码.脚本代码来自念茜姐姐(博客:)如下
    https://blog.csdn.net/yiyaaixuexi/article/details/29201699

    
    #!/usr/bin/env bash
    
    TABLENAME=symbols
    SYMBOL_DB_FILE="symbols"
    
    //下边这三个要行需要根据自己文件路径
    
    STRING_SYMBOL_FILE="$PROJECT_DIR/BaseFrame/func.list"
    CONFUSE_FILE="$PROJECT_DIR/BaseFrame/"
    HEAD_FILE="$PROJECT_DIR/BaseFrame/Supporting Files/codeObfuscation.h"
    
    export LC_CTYPE=C
    
    #取以.m或.h结尾的文件以+号或-号开头的行 |去掉所有+号或-号|用空格代替符号|n个空格跟着<号 替换成 <号|开头不能是IBAction|用空格split字串取第二部分|排序|去重复|删除空行|删掉以init开头的行>写进func.list
    grep -h -r -I  "^[-+]" $CONFUSE_FILE  --include '*.[mh]' |sed "s/[+-]//g"|sed "s/[();,: *\^\/\{]/ /g"|sed "s/[ ]*</</"| sed "/^[ ]*IBAction/d"|awk '{split($0,b," "); print b[2]; }'| sort|uniq |sed "/^$/d"|sed -n "/^HYF_/p" >$STRING_SYMBOL_FILE
    
    
    #维护数据库方便日后作排重,一下代码来自念茜的微博
    createTable()
    {
    echo "create table $TABLENAME(src text, des text);" | sqlite3 $SYMBOL_DB_FILE
    }
    
    insertValue()
    {
    echo "insert into $TABLENAME values('$1' ,'$2');" | sqlite3 $SYMBOL_DB_FILE
    }
    
    query()
    {
    echo "select * from $TABLENAME where src='$1';" | sqlite3 $SYMBOL_DB_FILE
    }
    
    ramdomString()
    {
    openssl rand -base64 64 | tr -cd 'a-zA-Z' |head -c 16
    
    }
    
    rm -f $SYMBOL_DB_FILE
    rm -f $HEAD_FILE
    createTable
    
    touch $HEAD_FILE
    echo '#ifndef Demo_codeObfuscation_h
    #define Demo_codeObfuscation_h' >> $HEAD_FILE
    echo "//confuse string at `date`" >> $HEAD_FILE
    cat "$STRING_SYMBOL_FILE" | while read -ra line; do
    if [[ ! -z "$line" ]]; then
    ramdom=`ramdomString`
    echo $line $ramdom
    insertValue $line $ramdom
    echo "#define $line $ramdom" >> $HEAD_FILE
    fi
    done
    echo "#endif" >> $HEAD_FILE
    sqlite3 $SYMBOL_DB_FILE .dump
    

    然后在func.list 中加入需要混淆的方法名 (随意写两个方法名)

    HYF_Function1
    HYF_Function2
    

    另再创建一个.h文件 codeObfuscation.h 并加入方法名

    #ifndef Demo_codeObfuscation_h
    #define Demo_codeObfuscation_h
    
    #define HYF_Function1 JIUHkoTUOpodkHJK
    #define HYF_Function2 BpfFGCqvmxHVCtct
    
    #endif
    

    再把codeObfuscation.h 的头文件加入到.pch 文件 配置pch文件这里不再阐述了哈


    屏幕快照 2018-11-22 下午3.28.03.png

    [图片上传中...(WechatIMG1.jpeg-103601-1542872148151-0)]
    这时在配置一下路径就差不多啦


    WechatIMG1.jpeg

    第四步点击加号 new run script phase 就会出现第五步啦


    屏幕快照 2018-11-22 下午3.37.19.png

    设置好confuse.sh路径就好了

    接下来直接调用一下该方法就行了

    -(void)HYF_Function1
    {
        //打印方法名
        NSLog(@"Current method: %@",NSStringFromSelector(_cmd));
    }
    

    到这里就收工了.中途有可能会出现报小红点点.有可能的情况

    1.路径配置问题

    处理.仔细检查路径的问题.修改好正确的就OK

    2.没有权限问题

    回到终端执行代码.开放权限

    chmod 755 coufuse.sh
    

    大功告成.有啥问题欢迎评论哦

    demo URL :
    https://github.com/kingiiyy/Confuseshell

    更新时间: 2018-11-25

    Oh no 刚刚收到个不好的消息.现在iOS的审核机制越来越严格了.添加这个脚本会直接导致审核被拒绝了..代码混淆是为了过机审那一关..可还是被拒绝了

    屏幕快照 2018-11-22 下午5.08.25.png WechatIMG3.jpeg

    同志们需要混淆代码用到脚本的慎重使用了

    相关文章

      网友评论

        本文标题:iOS 方法名混淆 代码混淆

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