轉帖|使用教程|編輯:李顯亮|2020-03-09 10:56:28.107|閱讀 572 次
概述:小編大家整理了大佬們的使用技巧和經驗與大家分享,希望能夠幫助你解決實際運用中遇到的問題。本文講解反匯編引擎學習。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
VMProtect是一種很可靠的工具,可以保護應用程序代碼免受分析和破解,但只有在應用程序內保護機制正確構建且沒有可能破壞整個保護的嚴重錯誤的情況下,才能實現最好的效果。
小編大家整理了大佬們的使用技巧和經驗與大家分享,希望能夠幫助你解決實際運用中遇到的問題。
第三章:關于反匯編引擎
①Vmp_AllDisassembly框架詳解
總結:
②Vmp_Disassembly解析Opcode函數分析
舉例Opcode:0047497B 8B7424 28 mov esi,dword ptr ss:[esp+0x28]
讀取主操作碼或則前綴,因為Prefix 與 Opcode 共同占用這個空間。由于 x86/x64 是 CISC 架構,指令不定長。解碼器解碼的唯一途徑就是按指令編碼的序列進行解碼,關鍵是第 1 字節是什么? 如:遇到 66h,它就是 prefix,遇到 89h,它就是 Opcode。
GetSize_0函數
函數作用:用來區別讀取字節長度
三個比較重要的變量(legacy prefix 的作用)
UPX0:00481DDE ; 546: v529 = 0;
UPX0:00481DDE 094 C6 45 F5 00 mov [ebp+var_B], 0
UPX0:00481DE2 ; 547: v531 = 0;
UPX0:00481DE2 094 C6 45 F7 00 mov [ebp+var_9], 0
UPX0:00481DE6 ; 548: v530 = 0;
UPX0:00481DE6 094 C6 45 F6 00 mov [ebp+var_A], 0
它們在哪里賦值?
v529 賦值的地方:
case 0x66u: // 指令前綴:66H—操作數大小重載前綴,也可被用作某些指令的強制性前綴.
v529 = 1;
v531 賦值的地方:
case 0x67u: // 指令前綴:67H—地址尺寸重載前綴
v531 = 1;
v530 賦值的地方:
REX前綴是16個編碼操作碼的集合,包含40H到4FH。這些操作碼在IA-32模式和兼容模式中代表有意義的指令。在64位模式中,相同的操作碼則代表REX前綴,不再當做單獨的指令看待。
根據switch執行不同的流程解析Opcode
通過手冊我們得知8B對應的是MOV r32,r/m32(Gv, Ev)
Register_Or_Memory = (v13 & 2) == 2這句代碼是什么意思?
Gv, Ev 表示:
通過上文描述就可以解釋作者為何設計成要區分Register_Or_Memory來區分先執行SetReg跟ModRm。
因為假設是Mov Gv,Ev這種類型的:目標操作數是確定Gv,但是源操作數是Ev是包含不確定性具體要依賴于 ModRM.r/m 我們舉例的很明顯就是MOV r32,r/m32(Gv, Ev),目標已知,源帶有未知性
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn