1、在项目中创建一个 CodeObfuscation
文件夹
2、在 CodeObfuscation
文件夹下创建 codeObfuscation.h
头文件
3、在 CodeObfuscation
文件夹下创建 confuse.sh
在 confuse.sh
文件中添加以下代码
TABLENAME=symbols
SYMBOL_DB_FILE="$PROJECT_DIR/TestDemo/CodeObfuscation/symbols"
#TestDemo切换为自己的项目名称
STRING_SYMBOL_FILE="$PROJECT_DIR/TestDemo/CodeObfuscation/func.list"
#CONFUSE_FILE="$PROJECT_DIR/TestDemo"
HEAD_FILE="$PROJECT_DIR/TestDemo/CodeObfuscation/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 "/^dt_/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
#这里修改为创建的 `.h` 头文件
echo '#ifndef TestDemo_codeObfuscation_h
#define TestDemo_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、新建一个 Empty 文件,命名为 func.list
5、将 codeObfuscation.h
添加到 .pch
文件中
6、在 TARGETS 中添加 Run Script
将 confuse.sh
的路径添加到 Run Script 中
$PROJECT_DIR/TestDemo/CodeObfuscation/confuse.sh
以上完成后,点击 Run
运行程序。
运行后可能会出现无权限错误
解决方法:
1、打开终端, cd 到
CodeObfuscation
文件夹2、输入
sudo chmod 777 confuse.sh
,更改文件权限为可读可写可运行,输入本机密码,回车即可。回到 Xcode , 重新运行项目,即可成功。
在 func.list
中加入要混淆的方法名,运行程序
混淆成功后,点击 Jump to Definition
可以跳转到 codeObfuscation.h
中