利用字元替換進行混淆編譯 參考念茜大神的傑作

2021-07-06 10:10:42 字數 2426 閱讀 5983

參考念茜大神,因為做的過程中遇到點坑,所以翻新出來寫一遍,當作鞏固

混淆的方法

方法名混淆其實就是字串替換,有2個方法可以,乙個是#define,乙個是利用tops。

利用#define的方法有乙個好處,就是可以把混淆結果合併在乙個.h中,在工程prefix.pch的最前面#import這個.h。不匯入也可以編譯、匯入則實現混淆。

單段的selector,如func: ,可以通過#define func 來實現字串替換。

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

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

指令碼如下:(念茜大神是用func.list存需要改的字元,小的不才 實在建立不出.list檔案 故用func.h代替)

#!/usr/bin/env bash  

tablename=symbols  

symbol_db_file="symbols"  

string_symbol_file="func.h"  

head_file="$project_dir/$project_name/codeobfuscation.h"  

export lc_ctype=c  

#維護資料庫方便日後作排重  

createtable()  

insertvalue()  

query()  

ramdomstring()  

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  

1.將混淆指令碼confuse.sh放到工程目錄下 (以上那一段就是confuse.sh)

mv confuse.sh your_proj_path/

2.修改prefix.pch

開啟xcode,修改***-prefix.ch ,新增混淆標頭檔案:

#ifdef __objc__

#import 

#import 

//新增混淆作用的標頭檔案(這個檔名是指令碼confuse.sh中定義的)

#import "codeobfuscation.h"

#endif

執行.sh後  

codeobfuscation.h會把func.h裡寫的字元安confuse.sh的規則轉換成新的字元 新的字元會在codeobfuscation.h裡生成

3.配置build phase

在工程build phase中新增執行指令碼操作,執行confuse.sh指令碼,如圖:

4.建立函式名列表func.h,寫入待混淆的函式名,如:

-(void)sample;

-(void)seg1:(nsstring *)string seg2:(nsuinteger)num;

func.h就這樣寫:

sample

seg1

seg2

並將檔案放置於與confuse.sh指令碼同級

mv func.h your_proj_path/

5.編譯檢視結果

直接build,混淆指令碼會在編譯前執行,進行字元隨機替換,並且每次build的隨機字元不同,

後話:如果執行confuse.sh 報錯permission denied 是因為該指令碼沒有設定許可權 

不要方 給confuse.sh設定許可權便可:在終端找到confuse.sh的路徑 輸入命令 chmod 777 confuse.sh

然後就可以用了

用字串替換空格

用字串 20替換空格 void instead char string,int length i size int newlength size count 2 if length newlength 從後向前依次替換 while newlength 0 size 0 else size 相關題 從...

利用字元陣列計算單詞個數

輸入一行字元,統計其中有多少個單詞,要求每個單詞之間用空格分開,且最後字元不能為空格。這個題設限制太多,先完成,在做一些拓展。第一次 include include 字元陣列的應用 written by chen gengru updated on 2018 11 8 intmain else if...

Linux環境下vi vim 進行字元替換

第一種方法 s en mn 替換當前行第乙個 en 為 mn s en mn g 替換當前行所有 en 為 mn n,s en mn 替換第 n 行開始到最後一行中每一行的第乙個 en 為 mn n,s en mn g 替換第 n 行開始到最後一行中每一行所有 en 為 mn n 為數字,若 n 為...