iOS開發/App安全/代碼自動混淆筆記

來源:互聯網
上載者:User

標籤:開頭   conf   公司   iba   引用   script   sele   aqi   efi   

最近接觸銀行類項目,對app安全才有了些認識...比較尷尬,除了之前經常做的網路參數加密解密,以及防止資料重放之外,還提到了防範反編譯的風險,其實Apple算比較安全的了,反編譯過來也就看到.h檔案....但把代碼混淆還是會比較好些。

 

一、在項目根目錄下建立confuse.sh 和 gbFunc.list 檔案

 

說明:

 

confuse.sh 檔案在編譯過程中會執行gbFunc.list 用於自動混淆代碼時,存放過濾出來需要混淆的方法名

 

touch confuse.sh

touch gbFunc.list

 

 

 

二、建立GBConfuse.h

 

說明:

 

GBConfuse.h 是在自動混淆代碼時,將會把自動產生的字串定義成宏,存放在此檔案,也便於查看。

 

 

注意:需要把.h檔案移到專案檔外,因為放專案檔中,到時被反編譯過來,還是能得到GBConfuse.h裡面的東西的,就能通過比對,得到方法。(後面用class-dump反編譯過來就明白了...)

 

 

 

三、在confuse.sh中添加如下代碼

 

#!/usr/bin/env bash

 

TABLENAME=symbols

 

SYMBOL_DB_FILE="symbols"

 

#func.list路徑

STRING_SYMBOL_FILE="$PROJECT_DIR/GBFunc.list"

 

#專案檔路徑

CONFUSE_FILE="$PROJECT_DIR/Safedemo"

 

#Confuse.h路徑

HEAD_FILE="$PROJECT_DIR/GBConfuse.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 "/^GBSAFE_/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 GBConfuse_h

#define CodeConfuse‘ >> $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

 

需要修改的代碼在於檔案路徑:

 

 

 

 

 

四、添加 Run Script

 

 

 

 

五、添加 PCH 檔案

 

 

 

 

 

 

六、在ViewController中添加以"GBSAFE_"為首碼的測試方法

 

 

 

七、測試

 

運行報錯如下:

 

原因是.sh檔案沒有許可權,所以需要去開啟許可權。

 

 

在confuse.sh檔案目錄下,執行命令:

 

chmod 755 confuse.sh

 

 

 

運行成功!

 

先打包一個.ipa安裝包進行測試!

 

先不進行代碼混淆:

 

 

 

把.ipa檔案類型改成.zip,解壓得到.app檔案

 

 

建立Hear檔案夾用於儲存反編譯後得到的檔案:

 

 

 

用class-dump進行反編譯

 

class-dump -H 要破解的可執行檔路徑 -o 破解後的標頭檔存放路徑

 

 

得到沒有進行代碼混淆的檔案:

 

可以看到都是項目中一些.h檔案,開啟可以看到完整的方法名....

 

然後客戶說測試公司說不安全...

 

需要進行代碼混淆...

 

 

在PCH檔案中,引用GBConfuse.h:

 

 

 

重新打包..就可以得到混淆後的.ipa..

 

下面就是混淆後的結果。

 

 

 

總結:

 

其實,原理應該就是在編譯過程中,把需要混淆的代碼產生隨機字串進行替換....

 

iOS開發/App安全/代碼自動混淆筆記

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.