方法混淆

1、在项目中创建一个 CodeObfuscation 文件夹

2、在 CodeObfuscation 文件夹下创建 codeObfuscation.h 头文件

image.png

3、在 CodeObfuscation 文件夹下创建 confuse.sh

image.png

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/[ ]*$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

image.png

5、将 codeObfuscation.h 添加到 .pch 文件中

image.png

6、在 TARGETS 中添加 Run Script


image.png

confuse.sh的路径添加到 Run Script 中

image.png

$PROJECT_DIR/TestDemo/CodeObfuscation/confuse.sh

以上完成后,点击 Run 运行程序。
运行后可能会出现无权限错误

image.png

解决方法:
1、打开终端, cd 到CodeObfuscation 文件夹
2、输入 sudo chmod 777 confuse.sh ,更改文件权限为可读可写可运行,输入本机密码,回车即可。
回到 Xcode , 重新运行项目,即可成功。

func.list 中加入要混淆的方法名,运行程序

混淆的方法

混淆后

混淆成功后,点击 Jump to Definition 可以跳转到 codeObfuscation.h

混淆成功后可以跳转到codeObfuscation中

你可能感兴趣的:(方法混淆)