轉帖|使用教程|編輯:李顯亮|2020-03-11 11:10:30.540|閱讀 315 次
概述:小編大家整理了大佬們的使用技巧和經驗與大家分享,希望能夠幫助你解決實際運用中遇到的問題。本文講解反匯編引擎學習。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
VMProtect是一種很可靠的工具,可以保護應用程序代碼免受分析和破解,但只有在應用程序內保護機制正確構建且沒有可能破壞整個保護的嚴重錯誤的情況下,才能實現最好的效果。
小編大家整理了大佬們的使用技巧和經驗與大家分享,希望能夠幫助你解決實際運用中遇到的問題。本文接著介紹關于反匯編引擎。
③特殊Opcode解析
一般例如jmp call都是需要二次解析的
拿條命令舉例說明:jmp dword ptr ds:[eax*4+0x474FCF] 這一條命令就是跳到不同的Handle塊執行,jmp它Opcode是FF所以對應的VMOpcode=0xC
根據跳轉類型判斷,判斷E8 E9 EA 近 段間 短跳轉
例如像那種:jmp VMDispatcher就會符合條件例如像那種:jmp VMDispatcher就會符合條件
我們這個是else if ( DisassemblyFunction->Magic == 2 )
解析sub_4918E8函數
首先看一看sub_494F60函數,保存VmOpcode信息跟Displacement,再根據大小讀取,設置ModRM信息
v5->First.ModRM_mod__Or__Size = 2;jmp dword ptr ds:[eax*4+0x474FCF] 就是這種尋址方式
SetDisassemblyFunction_Address函數解析
if ( v8->VMOpcode == 1 || (result = v8->VMOpcode - 3, v8->VMOpcode == 3) )成立條件 v533->VMOpcode=1: case 0xA8: // Test al,imm8 case 0x16u: // push ss case 0x1Eu: // push ds case 0x50~0x57: // 50=push rax/r8 51=push rcx/r9以此類推 case 0x68u: // push Imm32/16 等等 v533->VMOpcode=3: case 0xC7u: // MOV R/M32,IMM32 case 0x20: // and Eb,Gb case 0x22: // and Gb,Eb 等等
SetDisassemblyFunction_Address函數涉及到的結構體如下:
執行依次SetDisassemblyFunction_Address標記結尾。(注意這里參數2就是:0xC)
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自: