美文网首页
使用脚本对代码混淆

使用脚本对代码混淆

作者: 番薯大佬 | 来源:发表于2018-07-02 21:00 被阅读12次
    代码混淆效果图

    一、创建敏感字符文件
    1、在终端进入当前项目目录
    2、创建文件:

    touch codeConfusion.list
    

    3、文件添加到项目:Xcode-菜单栏-File-Add Files To 项目名称
    4、编辑内容,即写入需要混淆的函数名等,如:

    showMessage
    clear
    randomTime
    

    二、创建混淆脚本文件
    1、在终端进入当前项目目录
    2、创建脚本文件:

    touch codeConfusion.sh
    

    3、编辑脚本文件内容:

    # !/usr/bin/env bash
    
    TABLENAME=symbols
    SYMBOL_DB_FILE="symbols"
    STRING_SYMBOL_FILE="codeConfusion.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
    

    4、添加脚本文件到项目:Xcode-菜单栏-File-Add Files To 项目名称
    5、配置脚本:项目-TARGETS-Build Phases-添加:New Run Script Phase-Run Script-$PROJECT_DIR/codeConfusion.sh
    6、编译运行,生成文件:codeObfuscation.h

    脚本文件配置

    四、创建pch文件
    1、新建文件:Xcode-菜单栏-File-New-File-iOS-Other-PCH File
    2、配置文件:

    项目-TARGETS-Build Settings-All, Combined-Apple LLVM 9.0 - Language
    (1)Precompile Prefix Header设置"YES"
    (2)Prefix Header设置"$(PROJECT_DIR)/项目名称/pch文件名称"

    pch文件配置

    3、导入头文件:#import "codeObfuscation.h"

    五、注意事项
    1、代码混淆脚本内容,需要设置混淆字符文件xxx.list,同时要设置生成混淆对应文件的头文件名称;
    2、混淆脚本生成的混淆对应的文件要导入pch文件;
    3、编译运行时的错误处理:
    (1)错误提示:
    /Users/macintosh/Library/Developer/Xcode/DerivedData/DemoCodeConfusion-fzzudaajuuktdjczivfrbzpaktgy/Build/Intermediates.noindex/DemoCodeConfusion.build/Debug-iphonesimulator/DemoCodeConfusion.build/Script-DF73E46C20EA2C7300A02295.sh: line 2: /Users/macintosh/Desktop/zsy/code/iOS/demo/DemoCodeConfusion/codeConfusion.sh: Permission denied
    (2)解决:
    查看执行权限:

    ls -l /目录/codeConfusion.sh 
    

    修改执行权限:

    chmod a+x /目录/codeConfusion.sh
    

    4、定义变量和方法时避免雷同系统属性和方法,以免造成代码混淆后编译运行异常

    相关文章

      网友评论

          本文标题:使用脚本对代码混淆

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