APP安全(安全防护篇)
对APP的安全防护主要是对程序进行加密,其中加密有五个方向
1.URL编码加密 对程序中出现的URL进行编码加密,防止URL被静态分析。
2.本地数据加密 对NSUserDefaults,sqlite存储文件数据加密,保护帐号和关键信息。
3.网络传输数据加密 对客户端传输数据提供加密方案,有效防止通过网络接口的拦截获取。
4.方法体,方法名高级混淆 对应用程序的方法名和方法体进行混淆,保证源码被逆向后无法解析代码。
5.程序结构混排加密 对应用程序逻辑结构进行打乱混排,保证源码可读性降到最低。
今天重点说一下 方法体 方法名的混淆。
首先看效果吧:
#使用hopper disassembler 反编译iPA之后不能得到相应的方法调用信息
那么如何做到呢?
创建shell脚本:
TABLENAME=symbols
SYMBOL_DB_FILE="symbols"
STRING_SYMBOL_FILE="fun.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
第二 声明要替换的方法名列表
在上边脚本中提到了 STRING_SYMBOL_FILE="fun.list",意思就是运行脚本的时候会到这个文件去读取需要替换的方法名,重新写入符号表中。
nameAction
refreshAction
第三步: 生成对应的转义之后的无序字符串
具体demo 很早之前写的 ,链接 Blank_佐毅
另外
招聘UI交互设计师啦!
招聘UI交互设计师啦!
招聘UI交互设计师啦!
招聘UI交互设计师啦!
招聘UI交互设计师啦!
嗯,重要的事情说五遍。