欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

使用脚本对代码混淆

程序员文章站 2024-03-25 11:11:52
...

使用脚本对代码混淆

一、创建敏感字符文件

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文件名称"

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