1. 程式人生 > >IOS程式碼混淆

IOS程式碼混淆

看過的一個部落格: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檔案多出了兩個巨集定義