美文网首页
iOS代码混淆

iOS代码混淆

作者: 4335151e8554 | 来源:发表于2018-09-28 12:05 被阅读0次

    1、先创建两个文件func.list和confuse.sh,并且用命令行修改这两个文件的权限,不修改权限则会编译报错。

    $chmod 777 func.list
    $chmod 777 confuse.sh
    

    2、将如下脚本代码复制到confuse.sh文件,并保存

    #!/usr/bin/env bash
    
    TABLENAME=symbols
    SYMBOL_DB_FILE="symbols"
    STRING_SYMBOL_FILE="func.list"
    HEAD_FILE="$PROJECT_DIR/$PROJECT_NAME/codeObfuscation.h"
    export LC_CTYPE=C
    
    #维护数据库方便日后作排重
    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
    

    3、将需要混淆的方法名写入func.list文件,只需要方法名,我定义了一个test方法,然后将方法名test写入func.list文件中(注意有参数的方法不要加冒号)


    定义了一个test方法.png
    在func.list文件中写入需要混淆的方法名.png
    • 注意:只需要写入方法名,如果方法带参数则去掉冒号
      比如:
    -(void)createView:(CGRect)frame color:(UIColor *)color;
    要写成  
    createView
    color
    
    而不是
    createView color
    更不是
    createView: color:
    
    • 事实上上面的脚本会将func.list文件中的方法名生成对应的宏,并用随机的字母序列替换,我们完全可以不用脚本,手动完成这个过程。
    #ifndef Demo_codeObfuscation_h
    #define Demo_codeObfuscation_h
    //confuse string at Fri Sep 28 14:21:29 CST 2018
    #define test CaAaWrvilwElJBOY     //这就是为test生成的宏
    #endif
    

    4、为项目添加pch文件

    5、在pch文件中#import "codeObfuscation.h"头文件,添加该头文件就开启了代码混淆,不添加则表示关闭代码混淆。codeObfuscation.h是脚本中定义的。

    在pch文件中import codeObFuscation.h头文件.png

    6、修改工程Build Phases配置运行脚本


    修改工程配置.png

    7、command+b编译项目即可完成混淆

    8、利用class-dump查看混淆后的结果,我这里利用class-dump导出了工程里的头文件,可以看到test被混淆成了euJNUKhcYnuGttSk


    [图片上传中...(混淆后的结果.png-f292ef-1538107206323-0)]
    混淆后的结果.png

    参考链接

    相关文章

      网友评论

          本文标题:iOS代码混淆

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