首先是安裝和使用dump:
下載下傳dump位址
1.選擇class-dump-3.5.dmg 下載下傳;
2.下載下傳之後,點選打開,複制class-dump檔案,
3.shift+command+G 打開finder 的路徑,輸入/usr/local,并把class-dump粘貼到 /bin 這個檔案中,(這個檔案是隐藏的檔案夾)
這樣就可以開始玩dump了,
4.找個項目(跑過真機的)拿到app包(或包裡的可執行檔案),
5.在桌面建立一個檔案夾,用于存放反編譯出來的頭檔案;
6.終端:class-dump -H 項目包路徑 -o 解析出來的檔案路徑
7.之後就會見到有多個.h檔案被解析出來,如果沒有做代碼混淆的話,可以看到項目中的很多屬性/方法都可以看到,
再來說一下代碼混淆:
1.建立一個新的項目,Class-dump-Test
2.為項目建立一個 .pch檔案,并為pch檔案配置路徑,$(SRCROOT)/Class-dump-Test/pch檔案名.pch
3.終端:cd 項目路徑;
4:touch confuse.sh
5:touch func.list 為項目建立2個檔案,并添加到項目中,
6:為腳步檔案confuse.sh設定路徑,
7.建立codeObfuscation.h 在這個檔案中可以看到混淆後的代碼,并聲明到.pch檔案中
其中如果手動選擇要混淆的方法或屬性,就把方法/屬性寫到func.list中,例如:
其中confuse.sh檔案檔案需要寫上腳步代碼:
#!/usr/bin/env bash
TABLENAME=symbols
SYMBOL_DB_FILE="symbols"
STRING_SYMBOL_FILE="func.list"
HEAD_FILE="$PROJECT_DIR/$PROJECT_NAME/codeObfuscation.h"
#/* 針對特殊字元的代碼混淆**/
CONFUSE_FILE="$PROJECT_DIR/Class-dump-Test"
HEAD_FILE="$PROJECT_DIR/Class-dump-Test/codeObfuscation.h"
#/*********************/
export LC_CTYPE=C
#/* 針對特殊字元的代碼混淆*********************/**/
##取以.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 "/^wq_/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 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
編譯一下:
這就算是成功了,自己可以反編譯一下,看看還能不能開到明文的方法/屬性
遇到的問題:在為腳本檔案設定好路徑後,編譯出錯:Permission Denied。要擷取腳步權限,
終端:chmod 755 scriptname.sh 再次編譯就沒事了!
如果有什麼不對的,可一定要告訴我一下哈!