iOS开发之笔记摘录

混淆代码---iOS笔记摘录

2018-07-25  本文已影响1人  平安喜乐698
目录

防止class-dump反汇编出易读代码

原理:
    将指定字符串宏定义为随机字符串

注意:
    系统的方法、XIB中拖线的控件名(会导致运行的时候出错)
1. 手动
1、
进入项目根目录下,创建confuse.sh、func.list,并导入项目
    cd Test/
    touch confuse.sh
    touch func.list
    chmod 755 confuse.sh 
2、
Build Phase | 点加号添加 Run Script ,填入$PROJECT_DIR/confuse.sh
XCode打开confuse.sh填入以下代码。编译后生成codeObfuscation.h文件,导入项目
!/usr/bin/env bash
 
#表格名称
TABLENAME=symbols
SYMBOL_DB_FILE="symbols"
 
#文件名称
STRING_SYMBOL_FILE="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 Demo_codeObfuscation_h
#define Demo_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
3、
创建PCH,并在Build Settings中设置prefix header。
PCH中填入 #import "codeObfuscation.h"
4、
func.list 中填写要混淆的字符串(属性或方法名或其他)
5、
编译后会在codeObfuscation.h看到相应的宏定义
2. 自动

自动替换以yt_开头的方法名

confuse.sh中+

CONFUSE_FILE="$PROJECT_DIR"
#取以.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 "/^yt_/p" >$STRING_SYMBOL_FILE
上一篇 下一篇

猜你喜欢

热点阅读