app代碼混淆防止反編譯(二)

剛剛說了使用宏定義的方式來隱藏頭文件方法名。感覺比較low,有沒有更好的方法來做呢。

創(chuàng)建 confuse.sh, func.list,如圖:

確認(rèn)一下文件路徑

cd到項目文件夾,然后執(zhí)行 chmod 755 confuse.sh,開啟root權(quán)限。

然后將sh和list文件導(dǎo)入到項目中

編輯sh腳本文件,如下

#!/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

編輯完成后保存,然后在pch文件中添加如下代碼

#ifdef? __OBJC__

#import "codeObfuscation.h"

#endif

此時編譯器會報錯。只是因為我們并沒有將腳本加入構(gòu)建資源中,未生成codeObfuscation.h文件。

設(shè)置如下:

然后編譯,這時候可能會報 expected "filename" or<FILENAME>

可以先把pch文件中#import "codeObfuscation.h" 注釋掉,然后手動輸入就可以了。

現(xiàn)在配置已經(jīng)完成,我們可以使用代碼混淆了。

首先定義方法

-(void)sample;

-(void)send:(NSString *)string sel1:(NSUInteger)num;

然后在func.list添加

?sample

send

sel1

生成包后,反編譯一下,可以參考我之前的那篇

打開viewController.h

可以看到之前定義的方法名已經(jīng)改為隨機代替。demo地址

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容