轉帖|使用教程|編輯:楊鵬連|2021-06-17 13:55:31.100|閱讀 806 次
概述:?看了網上大神們寫了好多的vmp 虛擬代碼的分析 ,但是在對實在項目時,插件總是提示不對或者未知版本,一直對vm代碼的還原有質疑,于是就萌發了具體分析這個vm代碼是怎么回事,若有錯誤,歡迎指出,能力有限只能分析皮毛,只談vm的代碼。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
VMProtect是一種很可靠的工具,可以保護應用程序代碼免受分析和破解,但只有在應用程序內保護機制正確構建且沒有可能破壞整個保護的嚴重錯誤的情況下,才能實現最好的效果。
VMProtect通過在具有非標準體系結構的虛擬機上執行代碼來保護代碼,這將使分析和破解軟件變得十分困難。除此之外,VMProtect還可以生成和驗證序列號,限制免費升級等等。
VMProtect正版授權在線訂購享受最低價,僅售801元起!還不趕緊加入你的訂購清單?>>更多詳情可點擊咨詢購買
相關鏈接:
二、VM代碼的提取
承接上文,我們寫了個例子,然后用vmp3.3.1加殼程序把那4句匯編代碼給VM了,那么VM的代碼是哪里到哪里,我們用OD的run trace去跟蹤提取。操作如下:
1.首先下2個斷點 在準備進入VM代碼和退出VM代碼執行未VM代碼位置下斷點
2.然后我們按F9到達我們第一個斷點 在按快捷鍵Ctrl+F11 跟蹤步入 然后到我們的第二個斷點,這個時候 我們查看我們run trace查看追蹤出的信息 然后右鍵關閉記錄文件 下圖是記錄的跟蹤信息
然后看看保存的跟蹤文件大概是這個樣子 我有處理過
那么到現在我們就把vm后的代碼給扒下來了 之后我們只要好好分析這個文件就OK了
下面我們先搜索一下我們之前vm的匯編中的常量 我們先搜索第一個 1111 為什么是00001111就不多解釋了0041DB98 Main BSWAP ECX ; ECX=00001111 0041DB9A Main RCR AH,CL 0041DB9C Main OR EAX,EBP ; EAX=0041DBFF 0041DB9E Main NEG AX ; EAX=00412401 0041DBA1 Main XOR EBX,ECX ; EBX=0046B588 0041DBA3 Main BSR EAX,ESP ; EAX=00000014 0041DBA6 Main SUB EDI,4 ; EDI=0012FF88 0041DBAC Main LAHF ; EAX=00000614 0041DBAD Main MOV DWORD PTR DS:[EDI],ECX我們去一下混淆
0041DB98 Main BSWAP ECX ; ECX=00001111 0041DBA6 Main SUB EDI,4 ; EDI=0012FF88 0041DBAD Main MOV DWORD PTR DS:[EDI],ECX就這3句有用的 得到00001111 怎么來的我們先不深究 EDI-=4 然后在向 [EDI]=ECX 這個像不像是壓棧的操作,棧的增長方向是向下的是吧 棧頂減小就是壓棧 (思考一下 那有沒有棧頂減小的是出棧呢)。回到上文(一、認識與環境搭建)中我們說了ebp是代表棧,EDI是跳轉基址(JumpBase),怎么現在又說這個EDI是代表棧了。莫急我們在往下看看
0041DBBF Main MOV EAX,DWORD PTR DS:[ESI] ; EAX=1AB34C77 0041DBC1 Main CMP EDX,EDX 0041DBC3 Main XOR EAX,EBX ; EAX=1AF5F9FF 0041DBC5 Main JMP vmptest_.0046A2FF 0046A2FF Main BSWAP EAX ; EAX=FFF9F51A 0046A301 Main JMP vmptest_.00476E95 00476E95 Main DEC EAX ; EAX=FFF9F519 00476E96 Main NOT EAX ; EAX=00060AE6 00476E98 Main JMP vmptest_.0044E862 0044E862 Main DEC EAX ; EAX=00060AE5 0044E863 Main XOR EBX,EAX ; EBX=0040BF6D 0044E865 Main JMP vmptest_.0041F316 0041F316 Main ADD EBP,EAX ; EBP=0047E65C 0041F318 Main JMP vmptest_.00472E41 00472E41 Main LEA EDX,DWORD PTR SS:[ESP+60] ; EDX=0012FF00 00472E45 Main TEST DH,AL 00472E47 Main CLC 00472E48 Main CMP EDI,EDX 00472E4A Main JMP vmptest_.0046EE86 0046EE86 Main JA vmptest_.00480A05 00480A05 Main JMP EBP很亂我們去混淆一下
0041DBBF Main MOV EAX,DWORD PTR DS:[ESI] ; EAX=1AB34C77 0041DBC3 Main XOR EAX,EBX 0046A2FF Main BSWAP EAX ; EAX=FFF9F51A 00476E95 Main DEC EAX ; EAX=FFF9F519 00476E96 Main NOT EAX ; EAX=00060AE6 0044E862 Main DEC EAX ; EAX=00060AE5 0041F316 Main ADD EBP,EAX ; EBP=0047E65C 00472E41 Main LEA EDX,DWORD PTR SS:[ESP+60] ; EDX=0012FF00 00472E48 Main CMP EDI,EDX 0046EE86 Main JA vmptest_.00480A05 00480A05 Main JMP EBP我們看到esi 還是bytescode 他這里是得到了跳轉間隔密文, 我們往的話發現之前的00001111值也是從esi中得到密文解密出來的,那么說明esi里面不僅存在數據常量也有跳轉間隔, 而且他們都是密文 然后回到這里 我們又發現 ebp變為了跳轉base(JumpBase)。看到00472E41 這條指令 給edx賦值 esp + 0x60 你還記得最開始虛擬機入口時 那兩句匯編嗎
.vmp30:00430A1F 8B EC mov ebp, esp ; ebp 為壓環境后esp的值 .vmp30:00430A21 81 EC C0 00+ sub esp, 0C0h ; esp下移 0xC0然后我們之前說了 edi是棧, 因為上面那個語句是edi-=4 然后把00001111賦值給這個EDI指向的地址(其實這里我們截取了VM_PushImm32指令分析的) 是吧, 然后edi就是棧 然后edi這里又與這個esp + 0x60比教, 這里的結果是大于的結果(因為是追蹤出來的所以只有一個分支)我們結合這3個塊 分析出一個圖
如果您對該加密/解密軟件感興趣,歡迎加入加密/解密QQ交流群:740060302
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自: