天天看點

代碼混淆和dump

首先是安裝和使用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  再次編譯就沒事了!

  

  如果有什麼不對的,可一定要告訴我一下哈!