这里生成混淆代码的方法我们通过shell脚本来实现,同时我们需要一个文档来写入我们需要进行混淆的方法名或是变量名。
-
打开终端,cd到文件所在目录,使用
touch confuse.sh
touch func.list
-
写入shell脚本
#!/bin/bash
# 这是Shell脚本,如果不懂shell,自行修炼:http://www.runoob.com/linux/linux-shell.html
# 以下使用sqlite3进行增加数据,如果不了解sqlite3命令,自行修炼:http://www.runoob.com/sqlite/sqlite-tutorial.html
#数据表名
TABLENAME="CodeObfuscationOC"
#数据库名
SYMBOL_DB_FILE="CodeObfuscation.db"
#要被替换的方法列表文件 Demo是项目名称
STRING_SYMBOL_FILE="$PROJECT_DIR/recorder/func.list"
#被替换后的宏定义在此文件里
HEAD_FILE="$PROJECT_DIR/$PROJECT_NAME/CodeObfuscation.h"
#维护数据库方便日后做bug排查
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
}
#生成随机16位名称
randomString()
{
openssl rand -base64 64 | tr -cd 'a-zA-Z' | head -c 16
}
#删除旧数据库文件
rm -f $SYMBOL_DB_FILE
#删除就宏定义文件
rm -f $HEAD_FILE
#创建数据表
createTable
#touch命令创建空文件,根据指定的路径
touch $HEAD_FILE
echo '#ifndef CodeObfuscation_h
#define CodeObfuscation_h' >> $HEAD_FILE
echo "//confuse string at `date`" >> $HEAD_FILE
#使用cat将方法列表文件里的内容全部读取出来,形成数组,然后逐行读取,并进行替换
cat "$STRING_SYMBOL_FILE" | while read -ra line;
do
if [[ ! -z "$line" ]]
then
random=`randomString`
echo $line $random
#将生成的随机字符串插入到表格中
insertValue $line $random
#将生成的字符串写入到宏定义文件中,变量是$HEAD_FILE
echo "#define $line $random" >> $HEAD_FILE
fi
done
echo "#endif" >> $HEAD_FILE
sqlite3 $SYMBOL_DB_FILE .dump
-
添加run script命令
js.png然后添加$PROJECT_DIR/recorder/confuse.sh
-
给脚本授权
接下来还是在我们项目的文件夹下,通过终端给我们的脚本赋予最高权限
chmod 777 confuse.sh
-
添加预编译文件pch并配置好pch文件路径(不再赘述)
-
生成CodeObfuscation.h文件
这时候我们编译一下代码,会发现项目中多出了一个CodeObfuscation.h文件(如果没有,可到项目文件夹中找,我的就是在文件夹里找到的- -,然后拖进项目)。这个文件就是替换方法名的文件,我们在PCH文件中引入他。
-
在func.list中添加准备替换的方法名
在项目中点开之前拖进来的func.list文件,然后在里面加入自己想要混淆的方法名或者变量名,
add_Timer
removeTimer
testName
-
结果
编译之后
#ifndef CodeObfuscation_h
#define CodeObfuscation_h
//confuse string at Thu Feb 6 10:15:57 CST 2020
#define add_Timer JgljUNExphlljzLU
#define removeTimer twZJFmYFQxcUaXFU
#define testName UGxeiEiyWEpdbgTa
#endif
看到 CodeObfuscation有这种变化,恭喜你,已经代码混淆成功。即使通过class-dump反编出来的,也只是一堆乱码。
-
需要注意的几点
虽然比较繁琐,但是亲测有效,有问题可以写留言,对诸位有帮助的话我心甚慰!
网友评论