不過據我後來在網上查詢很多人說,跑腳本的混淆,稽核直接被拒。
-
- 混淆分許多思路,比如:
- 1.cd到你的工程目錄下,建立兩個檔案
- 2.打開工程,把剛才建立的兩個檔案添加到工程中,在工程中再建立兩個檔案分别是pch檔案和一個.h檔案,并在pch中引入剛一同建立的.h
- 3.配置Phases
- 4.向腳本confuse.sh中添加代碼
- 5.編譯
- 注意:
- 附反編譯:
- 1.1 Class-Dunp 簡介
- 1.2 Class-Dump 下載下傳位址
- 1.3 安裝
- 1.4 使用
- 2.1 什麼是Hopper
- 2.2 下載下傳位址
- 2.3 使用
1)花代碼花指令,即随意往程式中加入迷惑人的代碼指令
2)易讀字元替換
具體步驟:
confuse.sh: 存放混淆的腳本
func.list: 需要混淆的方法、變量名
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLi0zaHRGcWdUYuVzVa9GczoVdG1mWfVGc5RHLwkzX39GZhh2csATMflHLwEzX4xSZz91ZsADMx8FdsYkRGZkRG9lcvx2bjxSa2EWNhJTW1AlUxEFeVRUUfRHelRHL2EzXlpXazxyayFWbyVGdhd3LcV2Zh1Wa9M3clN2byBXLzN3btg3PnVGcq5SMmZjMidDNlRGZ0EmYwADNyEGM4EDZ3EDO2UDM5EWZm9CXyAzLchDMxIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjL0M3Lc9CX6MHc0RHaiojIsJye.jpeg)
pch不會配置的童鞋看過來,會的童鞋可自動忽略這一步:
然後點選4的後邊輸入:$(SRCROOT)然後把pch拖進來,删除前邊多餘路徑。
如圖:
(初學者盡量名字用這兩個,否則可能會在後邊的配置中出錯)
填寫 $PROJECT_DIR/confuse.sh(注:這兒的confuse.sh的路徑随你建立這個檔案的位置而改變)
#!/usr/bin/env bash
TABLENAME=symbols
SYMBOL_DB_FILE="symbols"
STRING_SYMBOL_FILE="func.list"
CONFUSE_FILE="$PROJECT_DIR/HXTest"
HEAD_FILE="$PROJECT_DIR/$PROJECT_NAME/Confuse.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 "/^hx_/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 Confuse_h
#define CodeConfuse' >> $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
其中
STRING_SYMBOL_FILE="func.list"
CONFUSE_FILE="$PROJECT_DIR/HXTest"
HEAD_FILE="$PROJECT_DIR/$PROJECT_NAME/Confuse.h"
#這裡也要做修改
echo '#ifndef Confuse_h
均需要根據自己的進行修改(如果名字和位置和我的建立的一樣,目前不需要修改)
hx_
是你在代碼中要混淆的方法名和變量的字首,方法變量前增加字首是為了和系統方法區分開,可以根據自己寫的方法自定義。
此時編譯應該會報一個沒有權限的錯誤,此時,切換到工程目錄下,輸入指令行 chmod 755 confuse.sh 給我們的腳本本間授權,如圖:
此時應該能順利編譯通過,混淆成功。
前邊是混淆前的,後邊是混淆後的名字。
1、 系統的方法
2、XIB中拖線的控件名
這些都不能用這個方法混淆,因為會導緻運作的時候出錯。
參考
念茜女神javascript:void(0)
Class-Dump是一款可以導出頭檔案的指令行工具,改程式用于檢查objective - c運作時資訊存儲在Mach-O檔案,它生成類的聲明,類别和協定。
http://stevenygard.com/projects/class-dump/
輕按兩下.dmg 檔案打開,把裡面的檔案拖到 /usr/local/bin 目錄下,因為是修改了系統的路徑,是以需要輸入本機的密碼,這樣就可以在終端使用 class-dump 指令了。
注意這裡dump的是應用字尾是.app而不是.ipa:
然後打開終端,輸入指令
class-dump -H XXX.app -o XXX
-H 後面的内容為需要dump的 .app 檔案路徑
-o 後面的内容為輸出的頭檔案儲存路徑
因為我是儲存到桌面的,是以等指令執行完成之後,我就可以在桌面上找到Dump這個名字的檔案夾了,并且裡面已經裝滿了我們想要的頭檔案了
打開ViewController.h,已經是混淆過的代碼了