使用脚本对代码混淆

代码混淆效果图

一、创建敏感字符文件
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、定义变量和方法时避免雷同系统属性和方法,以免造成代码混淆后编译运行异常

你可能感兴趣的:(使用脚本对代码混淆)