android代碼未混淆 ios代碼混淆技術(shù)
一般做了防調(diào)試的話,被調(diào)試進程會退出的,是防動態(tài)分析措施。
代碼混淆加花這些是防靜態(tài)分析措施.
反調(diào)試是防動態(tài)分析措施.
混淆的方法
方法名混淆其實就是字符串替換,有2個方法可以,一個是#define,一個是利用tops。
利用#define的方法有一個好處,就是可以把混淆結(jié)果合并在一個.h中,在工程Prefix.pch的最前面#import這個.h。不導入也可以編譯、導入則實現(xiàn)混淆。
單段的selector,如func: ,可以通過#define func 來實現(xiàn)字符串替換。
多段的selector,如a:b:c: ,可以通過分別#define a 、b、c 來實現(xiàn)字符串替換。
注意!!!
1.不可以混淆iOS中的系統(tǒng)方法;
2.不可以混淆iOS中init等初始化方法;
3.不可以混淆xib的文件,會導致找不到對應文件;
4.不可以混淆storyboard中用到的類名;
5.混淆有風險,有可能會被App Store 拒掉。
代碼易讀字符串混淆
混淆分許多思路,比如:
1)花代碼花指令,即隨意往程序中加入迷惑人的代碼指令
2)易讀字符替換
對于更高效和全面的混淆方案,開發(fā)者可以使用專業(yè)工具如IpaGuard。IpaGuard是一款強大的iOS IPA文件混淆工具,支持代碼混淆、資源文件混淆,無需源碼即可直接操作IPA文件,并兼容Objective-C、Swift等多種開發(fā)平臺,幫助開發(fā)者簡化混淆流程并提升應用安全性。
防止class-dump出可讀信息的有效辦法是易讀字符替換
cd到你自己的項目目錄級
創(chuàng)建兩個文件:
命令 :touch
touch func.list
: 存放混淆的腳本
func.list: 需要混淆的方法、變量名
3..配置Build Phase
在工程Build Phase中添加執(zhí)行腳本操作,執(zhí)行腳本
這里需要注意的是 PROJECT_DIR代表整個工程,/是這個文件的路徑。
然后command + B編譯一下,如果報錯了就cd到項目的目錄級下,然后輸入命令行 chmod 755 或chmod 777 給我們的腳本本間授權(quán)
成功之后會自動生成一個codeObfuscation.h文件,(在代碼的本地目錄里有,show in Finder 看下,能找到)
6.然后在pch文件中導入codeObfuscation.h文件。
打開項目,修改 ,添加混淆頭文件:
#import "codeObfuscation.h"
---------------------------------------------------------
func.list 里寫要混淆的方法
寫混淆的腳本
codeObfuscation.h 里會自動生成替代func.list里的方法
#ifndef Demo_codeObfuscation_h
#define Demo_codeObfuscation_h
---------confuse.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
#維護數(shù)據(jù)庫方便日后作排重
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 "http://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