iOS - 逆向 - Objective-C代碼混淆 -confuse.sh檔案寫法

來源:互聯網
上載者:User

標籤:size   term   工程   des   one   env   file   tor   elf   

class-dump可以很方便的匯出程式標頭檔,不僅讓攻擊者瞭解了程式結構方便逆向,還讓著急趕進度時寫出的欠完善的程式給同行留下笑柄。

所以,我們迫切的希望混淆自己的代碼。



混淆的常規思路

 

混淆分許多思路,比如:

1)花代碼花指令,即隨意往程式中加入迷惑人的代碼指令

2)易讀字元替換

等等

防止class-dump出可讀資訊的有效辦法是易讀字元替換。




Objective-C的方法名混淆



混淆的時機

我們希望在開發時一直保留清晰可讀的程式碼,方便自己。

同時,希望編譯出來的二進位包含亂七八糟的混淆後的程式碼,噁心他人。

因此,我們可以在Build Phrase 中設定在編譯之前進行方法名的字串替換。



混淆的方法

方法名混淆其實就是字串替換,有2個方法可以,一個是#define,一個是利用tops。
利用#define的方法有一個好處,就是可以把混淆結果合并在一個.h中,在工程Prefix.pch的最前面#import這個.h。不匯入也可以編譯、匯入則實現混淆。

單段的selector,如func: ,可以通過#define func 來實現字串替換。
多段的selector,如a:b:c: ,可以通過分別#define a 、b、c 來實現字串替換。




我的混淆工具 

我寫了個簡易的混淆指令碼,主要思路是把敏感方法名集中寫在一個名叫func.list的檔案中,逐一#define成隨機字元,追加寫入.h。

指令碼如下:

 

[plain] view plain copy 
  1. #!/usr/bin/env bash  
  2.   
  3. TABLENAME=symbols  
  4. SYMBOL_DB_FILE="symbols"  
  5. STRING_SYMBOL_FILE="func.list"  
  6. HEAD_FILE="$PROJECT_DIR/$PROJECT_NAME/codeObfuscation.h"  
  7. export LC_CTYPE=C  
  8.   
  9. #維護資料庫方便日後作排重  
  10. createTable()  
  11. {  
  12.     echo "create table $TABLENAME(src text, des text);" | sqlite3 $SYMBOL_DB_FILE  
  13. }  
  14.   
  15. insertValue()  
  16. {  
  17.     echo "insert into $TABLENAME values(‘$1‘ ,‘$2‘);" | sqlite3 $SYMBOL_DB_FILE  
  18. }  
  19.   
  20. query()  
  21. {  
  22.     echo "select * from $TABLENAME where src=‘$1‘;" | sqlite3 $SYMBOL_DB_FILE  
  23. }  
  24.   
  25. ramdomString()  
  26. {  
  27.     openssl rand -base64 64 | tr -cd ‘a-zA-Z‘ |head -c 16  
  28. }  
  29.   
  30. rm -f $SYMBOL_DB_FILE  
  31. rm -f $HEAD_FILE  
  32. createTable  
  33.   
  34. touch $HEAD_FILE  
  35. echo ‘#ifndef Demo_codeObfuscation_h  
  36. #define Demo_codeObfuscation_h‘ >> $HEAD_FILE  
  37. echo "//confuse string at `date`" >> $HEAD_FILE  
  38. cat "$STRING_SYMBOL_FILE" | while read -ra line; do  
  39.     if [[ ! -z "$line" ]]; then  
  40.         ramdom=`ramdomString`  
  41.         echo $line $ramdom  
  42.         insertValue $line $ramdom  
  43.         echo "#define $line $ramdom" >> $HEAD_FILE  
  44.     fi  
  45. done  
  46. echo "#endif" >> $HEAD_FILE  
  47.   
  48.   
  49. sqlite3 $SYMBOL_DB_FILE .dump  



 

操作步驟



1.將混淆指令碼confuse.sh放到工程目錄下 
mv confuse.sh your_proj_path/


2.修改Prefix.pch
開啟Xcode,修改XXX-Prefix.ch ,添加混淆標頭檔:

[objc] view plain copy 
  1. #ifdef __OBJC__  
  2.     #import <UIKit/UIKit.h>  
  3.     #import <Foundation/Foundation.h>  
  4.     //添加混淆作用的標頭檔(這個檔案名稱是指令碼confuse.sh中定義的)  
  5.     #import "codeObfuscation.h"  
  6. #endif  



3.配置Build Phase
在工程Build Phase中添加執行指令碼操作,執行confuse.sh指令碼,

 






4.建立函數名列表func.list,寫入待混淆的函數名,如:
-(void)sample;
-(void)seg1:(NSString *)string seg2:(NSUInteger)num;


就這樣寫:
sample
seg1
seg2


並將檔案放置於與confuse.sh指令碼同級
mv func.list your_proj_path/




5.編譯查看結果
直接build,混淆指令碼會在編譯前運行,進行字元隨機替換,並且每次build的隨機字元不同,



 

iOS - 逆向 - Objective-C代碼混淆 -confuse.sh檔案寫法

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.