IOS程式碼混淆
阿新 • • 發佈:2019-01-31
看過的一個部落格:http://blog.csdn.net/yiyaaixuexi/article/details/29201699 寫的很不錯
1、建立一個指令碼(在xcode裡面建立就可以),命名:confuse.sh
指令碼內容:(指令碼中的func.list和下面的func.list檔案是一個,兩個名字必須一樣, 指令碼中的code.h和下面的code.h檔案是一個,兩個名字也必須一樣)
#!/usr/bin/env bash TABLENAME=symbols SYMBOL_DB_FILE="symbols" STRING_SYMBOL_FILE="func.list" HEAD_FILE="$PROJECT_DIR/$PROJECT_NAME/code.h" export LC_CTYPE=C #維護資料庫方便日後作排重 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 "//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
(指令碼載抄的上面的那個網址的)
2、配置指令碼
正常開啟是沒有Run Script這一樣的,需要先點選 “+” 然後建立一個 輸入:$PROJECT_DIR/confuse.sh
3、在終端獲取該指令碼的許可權
sudo chmod -R 777 工程地址/confuse.sh
4、在工程中建立一個code.h檔案,用於存放混淆後的結果 (檔名隨意),用來存放混淆過的方法名
5、建立一個.pch檔案 加入以下程式碼 在工程中配置好pch檔案
#ifdef __OBJC__
#import "code.h"
#endif
6、接下來就是建立一個文字檔案啦,這個檔案命名為 func.list,在工程中建立一個空檔案,修改名字就行了就行了
7、在func.list中插入內容
若方法名為:
- (void)setName:(NSString *)string;
- (void)setAge:(int)age andName:(NSString *)name;
則在func.list中寫入
setName
setAge
就ok啦!程式執行完後,可以看到code.h檔案多出了兩個巨集定義