一、將打包的ipa反編譯下,.ipa改爲.zip,並解壓 sql
六、右擊—顯示包內容,找到以下有個白框黑底的
數據庫
七、將其複製到桌面xx文件夾中,在終端中輸入相關命令
cd 進入xx文件夾bash
class-dump -H 二進制文件名字markdown
而後在tt文件中就能夠看到多出的不少.h文件app
2、ios代碼混淆dom
一、在項目的Resource文件夾中新建
腳本文件:confuse.sh,
宏定義文件:codeObfuscation.h,
函數列表文件:func.list,
頭文件:PrefixHeader.pchkoa
可腳本建立
cd 項目/YCFMixConfuseDemo/Resource
touch confuse.sh
touch func.list
touch codeObfuscation.h
touch PrefixHeader.pchiphone
此處使用的混淆方法是:將一些以ycf_xxx開頭的方法替換成隨機的字符,目前該方法只能針對1個的參數的方法
ide
二、在confuse.sh文件中,輸入如下代碼,注意路徑
TABLENAME=symbols
SYMBOL_DB_FILE="symbols" STRING_SYMBOL_FILE="$PROJECT_DIR/YCFMixConfuseDemo/Resource/func.list" CONFUSE_FILE="$PROJECT_DIR/YCFMixConfuseDemo" HEAD_FILE="$PROJECT_DIR/YCFMixConfuseDemo/Resource/codeObfuscation.h" export LC_CTYPE=C #取以.m或.h結尾的文件以+號或-號開頭的行 |去掉全部+號或-號|用空格代替符號|n個空格跟着<號 替換成 <號|開頭不能是IBAction|用空格split字串取第二部分|排序|去重複|刪除空行|刪掉以init開頭的行>寫進func.list grep -h -r -I "^[-+]" $CONFUSE_FILE --include '*.[mh]' |sed "s/[+-]//g"|sed "s/[();,: *\^\/\{]/ /g"|sed "s/[ ]*</</"| sed "/^[ ]*IBAction/d"|awk '{split($0,b," "); print b[2]; }'| sort|uniq |sed "/^$/d"|sed -n "/^ycf_/p" >$STRING_SYMBOL_FILE #維護數據庫方便往後做排重,一下代碼來自念茜的微博 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
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
注意:須要將ycf換成你本身的函數前綴
三、在項目——Target——Build Phases中 新增New Run Script Phase
四、將新建的頭文件PrefixHeader.pch中導入codeObfuscation.h
#ifndef PrefixHeader_pch
#define PrefixHeader_pch
// Include any system framework and library headers here that should be included in all compilation units. // You will also need to set the Prefix Header build setting of one or more of your targets to reference this file. #import "codeObfuscation.h" #endif /* PrefixHeader_pch */
五、將新建的PrefixHeader.pch頭文件添加到Xcode中去
在Build Settings中搜索Prefix Header,在Prefix Header中寫入咱們新建頭文件的路徑
六、運行項目,可是會報以下問題
/Users/xxx/Library/Developer/Xcode/DerivedData/YCFMixConfuseDemo-bampqtmksvysbbbaixdeifkkoaqd/Build/Intermediates.noindex/YCFMixConfuseDemo.build/Debug-iphonesimulator/YCFMixConfuseDemo.build/Script-1ED6530E2004577400286FE9.sh: line 2: /Users/youchunfen/Desktop/項目復件/demo/YCFMixConfuseDemo/YCFMixConfuseDemo/Resource/confuse.sh: Permission denied
- 1
是說confuse.sh沒有權限,那麼咱們cd 到 Resource文件夾中,查看它的權限,發現它沒有執行權限,將其修改有可執行的權限
cd /Users/xxx/demo/YCFMixConfuseDemo/YCFMixConfuseDemo/Resource
查看某個文件的權限 ls -l 文件名
chmod a+x 文件名 給該文件可執行權限,a是全部人
七、此次就可運行了,可是發現第一次的運行後,而後使用本文的第一部分的class-dump來反編譯發現,並無代碼並無混淆,再次運行後,相關以ycf_開頭的函數名才被混淆
appdelegate中原來的函數名
混淆後
在ViewController中方法名混淆前
混淆後