程式碼保護軟體VMP逆向分析虛擬機器指令:指令中包含了函式呼叫
VMProtect是一種很可靠的工具,可以保護應用程式程式碼免受分析和破解,但只有在應用程式內保護機制正確構建且沒有可能破壞整個保護的嚴重錯誤的情況下,才能實現最好的效果。
VMProtect透過在具有非標準體系結構的虛擬機器上執行程式碼來保護程式碼,這將使分析和破解軟體變得十分困難。除此之外,VMProtect還可以生成和驗證序列號,限制免費升級等等。
下載VMProtect最新試用版【慧都網下載最新試用版】
七、附加 分析如果VM的指令中包含了函式呼叫
材料檔案在vmptestcall2資料夾中,不知道為什麼我這個vm後的exe總報毒,之前上面那個沒報。追蹤時一樣是按Ctrl+F11記錄,我們先看一下原來的彙編是什麼樣:
然後VMP3後我們下的trace斷點:
經過trace 我們得到記錄檔案。我們接下來擷取vm彙編簡單分析
首先進入虛擬機器:
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裡面的內容("原畫"),然後又進入虛擬機器。
我們其實VM的就這3句:
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
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69995027/viewspace-2780363/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- LUA指令碼虛擬機器逃逸技術分析指令碼虛擬機
- 逆向被虛擬機器所保護的二進位制檔案虛擬機
- jvm 虛擬機器位元組碼指令表JVM虛擬機
- java虛擬機器指令常量部分Java虛擬機
- 如何用 OllyDbg 的跟蹤功能分析虛擬機器保護虛擬機
- PD虛擬機器 18 for Mac(Mac虛擬機器軟體)虛擬機Mac
- 虛擬函式的呼叫原理函式
- 從比特幣指令碼引擎到以太坊虛擬機器(上篇)比特幣指令碼虛擬機
- 從比特幣指令碼引擎到以太坊虛擬機器(下篇)比特幣指令碼虛擬機
- 9、在Shell指令碼中呼叫其他指令碼指令碼
- 呼叫Frame中的指令碼指令碼
- java中呼叫groovy指令碼Java指令碼
- 2020 看雪SDC議題回顧 | 基於量子邏輯閘的程式碼虛擬(vmp)保護方案
- 【VMware VCF】使用 PowerShell 指令碼管理 SDDC Manager 中的軟體包。指令碼
- Linux/Unix shell 指令碼中呼叫SQL,RMAN指令碼Linux指令碼SQL
- iOS逆向 Shell指令碼+指令碼重簽名iOS指令碼
- 虛擬機器軟體Parallels Desktop 19 for Mac虛擬機器 19.0.0虛擬機ParallelMac
- 程式碼 or 指令,淺析ARM架構下的函式的呼叫過程架構函式
- 虛擬函式,虛擬函式表函式
- 虛擬函式 純虛擬函式函式
- Apache 虛擬主機裡的 ServerName 指令ApacheServer
- 虛擬機器故障與故障處理工具之指令篇虛擬機
- 在Watir中呼叫JavaScript指令碼JavaScript指令碼
- 分析函式的建表指令碼all_sales函式指令碼
- C++箴言:避免解構函式呼叫虛擬函式C++箴言函式
- C++中抽象類、虛擬函式和純虛擬函式C++抽象函式
- C++中的虛擬函式與虛擬函式表 (轉)C++函式
- 寫給開發者——從比特幣指令碼引擎到以太坊虛擬機器比特幣指令碼虛擬機
- 使用Azure CLI實現自動關閉Azure虛擬機器的指令碼虛擬機指令碼
- 函式呼叫時用const保護指標函式指標
- Golang實現JAVA虛擬機器-指令集和直譯器GolangJava虛擬機
- Windows逆向之配置虛擬機器環境Windows虛擬機
- 在C++程式碼中建立Java虛擬機器。C++Java虛擬機
- 親測好用的虛擬機器軟體:vm虛擬機器 mac中文版虛擬機Mac
- 超好用的mac虛擬機器軟體:VM虛擬機器 mac中文版Mac虛擬機
- 一種快速過VMP3.x偵錯程式虛擬機器檢測的方法虛擬機
- vmp3.0.9全保護拆分解析
- 在loadrunner中呼叫QTP指令碼QT指令碼