ios 代码混淆

2018-04-09  本文已影响235人  突刺刺

一. 为什么要代码混淆?

二. 利用脚本混淆代码

三. 混淆步骤

1.配置脚本:

cd /Users/yourMac/Desktop/test
touch functionality.list
touch codeObfuscation.h
#ifdef __OBJC__  
    #import <UIKit/UIKit.h>  
    #import <Foundation/Foundation.h>  
    //添加混淆作用的头文件(这个文件名是脚本confuse.sh中定义的)  
    #import "codeObfuscation.h"  
#endif
touch confuse.sh
TABLENAME=symbols
SYMBOL_DB_FILE="symbols"
STRING_SYMBOL_FILE="func.list"
CONFUSE_FILE="$PROJECT_DIR/"
HEAD_FILE="$PROJECT_DIR/$PROJECT_NAME/codeObfuscation.h"
export LC_CTYPE=C

//这里采取自动混淆自定义的方法,同时,为了区分和避免混淆系统方法,最好在需要混淆的方法前,加一个自定义个的前缀,例如“test_”,这里的意思是,所有前缀的为"test_"的方法,都会被混淆
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 "/^test_/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
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

$PROJECT_DIR/confuse.sh
如图:

到这里,所有配置已经完成

2. 测试混淆:

- (void)test_name;

四. 学习

PrefixHeader.pch
codeObfuscation.h
confuse.sh
func.list

prefixHeader.pch是预编译文件,confuse.sh是脚本,混淆功能的主要逻辑在这里实现,那codeObfuscation.hfunc.list有什么作用?

五. 注意事项及解决办法

上一篇 下一篇

猜你喜欢

热点阅读