最近项目做了安全检查,得分有点低,主要就是因为代码没有混淆。
最近研究代码混淆,顾记录一下整个经过。
混淆原理
同网上大部分一样,把类名、常量、变量等生成一串随机字符串。
第一步:在相应的项目工程下新建一个confuse.sh 和 func.list文件
$ cd /Users/xx/Desktop/xxx $ touch confuse.sh $ touch func.list
第二步:将新建的两个文件拖到项目工程中,并配置confuse.sh脚本
把这两个文件拖入工程中,并在Build Prases 中添加脚本,如下图
第三步:把下面代码复制到confuse.sh 中
#!/usr/bin/env bash TABLENAME=symbols SYMBOL_DB_FILE="symbols" STRING_SYMBOL_FILE="$PROJECT_DIR/func.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 CodeObfuscation_h #define 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
第四步,修改权限
chmod 755 confuse.sh
第五步,pch 中,导入文件
#import "CodeObfuscation.h"
如果没有的话,就新建一个,并配置好 pch 路径
编译一下
如果报错"CodeObfuscation.h" file not found
把 pch 文件中这一句注释掉,再次编译;
//#import "CodeObfuscation.h"
然后 把这一句打开,再次编译即可;
第六步,把需要混淆的类和变量名写入 func.list 文件中
编译就可以看到
恭喜,已经成功了!
参考文章:
https://www.jianshu.com/p/5b6cbbe79e78
https://www.jianshu.com/p/f3ad9c107757
请发表评论