iOS 安全 之 方法混淆

APP安全(安全防护篇)

 对APP的安全防护主要是对程序进行加密,其中加密有五个方向

  1.URL编码加密 对程序中出现的URL进行编码加密,防止URL被静态分析。
  2.本地数据加密 对NSUserDefaults,sqlite存储文件数据加密,保护帐号和关键信息。
  3.网络传输数据加密 对客户端传输数据提供加密方案,有效防止通过网络接口的拦截获取。
  4.方法体,方法名高级混淆 对应用程序的方法名和方法体进行混淆,保证源码被逆向后无法解析代码。
  5.程序结构混排加密 对应用程序逻辑结构进行打乱混排,保证源码可读性降到最低。

今天重点说一下 方法体 方法名的混淆。
首先看效果吧:

iOS 安全 之 方法混淆_第1张图片
84B10B95-A4CE-4305-BD59-37A671BBF513.png

#使用hopper disassembler 反编译iPA之后不能得到相应的方法调用信息

iOS 安全 之 方法混淆_第2张图片
FE50C8B4-A19A-4279-A01E-0D4F64870724.png

那么如何做到呢?
创建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

第三步: 生成对应的转义之后的无序字符串

47A87D69-4262-48E4-957F-5AD91014932F.png

具体demo 很早之前写的 ,链接 Blank_佐毅

另外
招聘UI交互设计师啦!
招聘UI交互设计师啦!
招聘UI交互设计师啦!
招聘UI交互设计师啦!
招聘UI交互设计师啦!

嗯,重要的事情说五遍。

你可能感兴趣的:(iOS 安全 之 方法混淆)