轉帖|使用教程|編輯:楊鵬連|2021-07-06 11:13:34.203|閱讀 308 次
概述:?看了網上大神們寫了好多的vmp 虛擬代碼的分析 ,但是在對實在項目時,插件總是提示不對或者未知版本,一直對vm代碼的還原有質疑,于是就萌發了具體分析這個vm代碼是怎么回事,若有錯誤,歡迎指出,能力有限只能分析皮毛,只談vm的代碼。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
VMProtect是一種很可靠的工具,可以保護應用程序代碼免受分析和破解,但只有在應用程序內保護機制正確構建且沒有可能破壞整個保護的嚴重錯誤的情況下,才能實現最好的效果。
VMProtect通過在具有非標準體系結構的虛擬機上執行代碼來保護代碼,這將使分析和破解軟件變得十分困難。除此之外,VMProtect還可以生成和驗證序列號,限制免費升級等等。
VMProtect正版授權在線訂購享受最低價,僅售801元起!還不趕緊加入你的訂購清單?>>更多詳情可點擊咨詢購買
相關鏈接:
代碼保護軟件VMP逆向分析虛擬機指令:初步認識與環境搭建(一)
代碼保護軟件VMP逆向分析虛擬機指令:VMP代碼的提取(二)
代碼保護軟件VMP逆向分析虛擬機指令:分析那4條匯編被VM的VM指令
七、附加 分析如果VM的指令中包含了函數調用
材料文件在vmptestcall2文件夾中,不知道為什么我這個vm后的exe總報毒,之前上面那個沒報。追蹤時一樣是按Ctrl+F11記錄,我們先看一下原來的匯編是什么樣:
然后VMP3后我們下的trace斷點:
0043D9C2 主 push 0x7EBD5487 ESP=0012FF88 ; 進入虛擬機前兆 VM_Entry 0043D9C7 主 call vmptestc.0041258D ESP=0012FF84 0041258D 主 push edi ESP=0012FF80 0041258E 主 mov di,0x7063 EDI=00007063 00412592 主 pushfd ESP=0012FF7C 00412593 主 push ebx ESP=0012FF78 00412594 主 clc 00412595 主 neg bx FL=CPS, EBX=7FFD9000我們直接搜索puts字符串,得到所在位置如下:
00414248 主 jmp vmptestc.0047DE97 0047DE97 主 retn ESP=0012FF84 ; 退出虛擬機環境 進入函數調用內部 puts 主 push 0xC ESP=0012FF80 -----------------------------------------------------------puts 75A68D06 主 push msvcrt.75A68E80 ESP=0012FF7C 75A68D0B 主 call msvcrt.759F9836 FL=0, EAX=0012FF70, ESP=0012FF54, EBP=0012FF80 75A68D10 主 or ebx,0xFFFFFFFF FL=PS, EBX=FFFFFFFF 75A68D13 主 mov dword ptr ss:[ebp-0x1C],ebx 75A68D16 主 xor eax,eax FL=PZ, EAX=00000000而我們往上看,看出上面是退出虛擬機的代碼,特征不要我多說了吧,很多pop,然后只有一個VM_Exit。在往下看看退出puts后緊跟著的是什么:
75A68E4E 主 mov dword ptr ss:[ebp-0x4],-0x2 75A68E55 主 call msvcrt.75A68E6D 75A68E5A 主 mov eax,dword ptr ss:[ebp-0x1C] 75A68E5D 主 call msvcrt.759F987B ECX=75A68E62, EBX=7FFD7000, ESP=0012FF84, EBP=0012FF94, ESI=00000000, EDI=00000000 75A68E62 主 retn ESP=0012FF88 ; 退出puts 0042AB41 主 push 0x7EB991DF ESP=0012FF84 ; 重新進入虛擬機 0042AB46 主 call vmptestc.0041258D ESP=0012FF80 0041258D 主 push edi ESP=0012FF7C 0041258E 主 mov di,0x7063 EDI=00007063 00412592 主 pushfd ESP=0012FF78 00412593 主 push ebx ESP=0012FF74 00412594 主 clc這里我們看到我們退出puts后,緊跟著并沒有看到調用我們的EspArg1函數,而是又進入虛擬機,難道我們的EspArg1內部被VM了,然后我們繼續往下分析,找下VM_Exit看看。我們直接搜索特征: 提示我們可以搜索popfd,當然僅限這里,為什么?
00461852 主 popfd FL=PZ, ESP=0012FF7C 00461853 主 cmovne edi,esi 00461856 主 movsx edi,sp EDI=FFFFFF7C 00461859 主 pop edi ESP=0012FF80, EDI=00000000 0046185A 主 jmp vmptestc.004266A6 004266A6 主 retn ESP=0012FF84 ;退出虛擬機 00401008 主 mov dword ptr ss:[esp+0x4],vmptestc.00403018 ---------------------------EspArg1 function 00401010 主 retn ESP=0012FF88 0045AAE7 主 push 0x7EB42BBF ESP=0012FF84 ;進入虛擬機 0045AAEC 主 call vmptestc.0041258D ESP=0012FF80 0041258D 主 push edi ESP=0012FF7C 0041258E 主 mov di,0x7063 EDI=00007063嗯什么情況,我們看到退出虛擬機,然后下一條就是我們的EspArg1 function里面的內容("原畫"),然后又進入虛擬機。
push offset HelloWord call crt_puts call EspArg1然后我們可以分析一下有多少次退出虛擬機的操作,我們可以搜索特征去分析,經過分析:
1.VM_Entery ............ 2.VM_Exit 3.Call puts 4.VM_Entery ........... 5.VM_Exit 6.Call EspArg1 7.VM_Entery ........... 8.VM_Exit我們主要分析的是被VM代碼中存在調用函數時的問題,所以其他我們不多管,只管這個是怎么處理調用函數的,現在應該可以大致知道是什么調用的了吧。所以知道為什么有的代碼被VM了,我們還能東扣西扣的了沒。看到源碼 call puts 與call EspArg1中間可是沒有代碼的 ,但還是要重新進入虛擬機。
如果您對該加密/解密軟件感興趣,歡迎加入vmpQQ交流群:740060302
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自: