Tigress是C語言的多元化虛擬化器/混淆器,它支持許多新穎的防禦措施,以防止靜態和動態反向工程和脫髮攻擊。特別是,Tigress通過生成具有多種類型的指令調度的口譯員以及通過插入反別名分析的代碼來生成任意複雜性和多樣性的虛擬指令集,來防止靜態脫虛擬化。 Tigress通過將真實代碼與虛假函數合併,插入隱式流以及創建緩慢執行的重新輸入解釋者來保護動態脫虛擬化。 Tigress通過使用運行時代碼生成來實現自己的代碼包裝版本。最後,Tigress的動態轉換提供了一種持續運行時代碼修改的廣義形式。
Tigress團隊提供了一些挑戰,我們可以找到其他類型的保護
所有挑戰都以輸入為數字並返回哈希。例子:
$ ./ obfuscated_binaries/tigress-2--challenge-2 1234 202180712448 $ ./ obfuscated_binaries/tigress-2--challenge-2 823748 50564355584 $ ./ obfuscated_binaries/tigress-2--challenge-2 2834723 50714072576
哈希計算函數被混淆。可能的攻擊類型:
我們的目標是:
所有這些都只有一個通用腳本:)。為此,我們按以下順序進行:
如果您需要更多信息,則可以查看我們的solve-vm.py腳本。

但是,我們已經在此存儲庫中推動了所有結果,但是如果您想自己複製此分析,您只需要像這樣執行solve-vm.py :
$ ./solve-vm.py ./obfuscated_binaries/_binary_
例子:
$ ./solve-vm.py ./tigress-challenges/tigress-0-challenge-0 [+]加載0x400040-0x400238 [+]加載0x400238-0x400254 [+]加載0x400000-0x400f14 [+]加載0x601E28-0x602550 [+]加載0x601E50-0x601Fe0 [+]加載0x400254-0x400298 [+]加載0x400DC4-0x400E08 [+]加載0x000000-0x000000 [+]加載0x601E28-0x602000 [+]掛接printf [+]掛鉤__libc_start_main [+]鉤子 [+]開始仿真。 [+] __libc_start_main掛鉤 [+] argv [0] = ./ tigress-challenges/tigress-0-challenge-0 [+] argv [1] = 1234 [+] Strtoul掛鉤 [+]象徵strtoul返回 [+] printf掛鉤 3035321144166078008 [+]切片終點用戶表達式 [ - ]不支持指令:0x400539:HLT [+]執行指令:39816 [+]執行唯一指令:458 [+] PC Len:0 [+]仿真完成。 [+]生成Symbolic_expressions/Tigress-0-Challenge-0.py [+]將符號表達式轉換為LLVM模塊... [+] LLVM模塊在llvm_expressions/tigress-0-challenge-0.ll中寫了 [+]重新編譯的二進制... [+] DEOBFUSCATED BINARY重新編譯:DeoBfuscated_Binaries/Tigress-0-Challenge-0.Deobfusccated
然後,可以在此處找到符號表達式,可以在此處找到LLVM表示形式,並且可以在此處找到重編譯的二進製文件。
使用Docker:
$ git clone [email protected]:jonathansalwan/tigress_protection.git $ cd/path/to/tigress_protection $ docker build -t image_tigress_protection。 $ docker run -v/path/to/tigress_protection:/root/root/tigress_protection -ti -name = tigress_protection -ulimit ='stack = -1:-1'image_tigress_tigress_protection
在Docker容器中進行測試
#cd〜/tigress_protection #./solve-vm.py tigress-challenges/tigress-0-challenge-0
隨著我們簡化並重新編譯了新的二進製文件,我們必須提供原始二進製文件的相同行為。因此,為了測試我們的二進製版本,我們使用此腳本。
$ ./scripts/testing_equality.py./tigress-challenges/tigress-0-challenge-0 ./deobfuscated_binaries/tigress-0-challenge-0.deobfuscated [...] [+]成功的272966812638982633 [+]成功獲得2304147855662358786 [+]成功獲得15697842028176298504 [+]成功獲得15273138908025273913 [+]成功的17329851347176088980 [+]成功獲得12160831137213706322 [+]成功獲得3489058267725840982 [+]成功獲得6474275930952607745 [+]成功的7363567981237584398 [+]成功獲得3685039181436704621 [+]成功:100.00
基本上,該腳本運行了混淆的和Deobfust的二進製文件,並隨機輸入並檢查它們是否具有相同的輸出結果。

關於比率表,在解決Tigress的挑戰之後,我們要求基督徒Collberg的挑戰來源,以比較原始資源和我們的Devirtuality版本的規模。請注意,應基督徒的要求,我們將無法提供老虎挑戰的來源,如果您想要這些來源,請直接向他詢問:)。
我們還選擇了20種哈希算法(10種知名,10種來自Tigress挑戰),我們使用46種不同的Tigress保護措施保護了這些算法中的每種算法(請參見下一節)。最後,我們有920個受保護的二進製文件的測試台。這些受保護的二進製文件中的每一個都使用solve-vm.py腳本成功地進行了貶低。這些哈希算法可以在樣本目錄中找到,並在DeoBfuscated_Binaries目錄中找到它們的Devirtualizations版本。下表是我們關於920個樣本的結果的摘要。

有關這些選項的更多信息,請參見第1頁和第2頁。