參考念茜大神,因為做的過程中遇到點坑,所以翻新出來寫一遍,當作鞏固
混淆的方法
方法名混淆其實就是字串替換,有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 為...