ARM平台指令虛擬化初探

2021-08-15 15:45:05 字數 2505 閱讀 4984

0x00:什麼是**虛擬化?

虛擬機器保護是這幾年比較流行的軟體保護技術。這個詞源於俄羅斯的著名軟體保護軟體「vmprotect」,以此為開端引起了軟體保護殼領域的革命,各大軟體保護殼都將虛擬機器保護這一新穎的技術加入到自己的產品中。

**虛擬化是將程式**編譯為虛擬機器指令即虛擬**(自己定義的**集),通過虛擬cpu解釋並執行的一種方式,大致流程如下:

我們拋開arm平台cpu流水線機制不談,簡單來說,其實cpu就是遵循乙個簡單的模式:迴圈讀取、解碼、執行這個過程。

0x01:為什麼要指令虛擬化

首先我們來回顧下軟體保護殼的發展,大致可分為三個階段。

第一階段:當殼完成解密目標**時,它將不會再次控制程式,被保護程式的明文將在記憶體中展開。在此之前,殼可以呼叫一切系統手段來防治黑客的除錯與逆向。

第二階段:可以實現分段式的加解密,殼執行完畢後,並不會消失而仍然會在程式執行到某個點時再次啟動。

第三階段:其實最簡單的解釋是,將被保護的指令使用一套自定義的位元組碼(邏輯上等價)來替換掉程式中原有的指令,而位元組碼在執行的時候又由程式中的直譯器來解釋執行,自定義的位元組碼只有自己的直譯器才能識別,也是因為這一點,基於虛擬機器的保護相對其他保護而言要更加難分析。

0x02:乙個簡單的虛擬機器實現

了解過**虛擬化的原理之後,就是自定義一套位元組碼,然後使用乙個直譯器解釋執行位元組碼。所以,我們要實現定義位元組碼與實現直譯器。

位元組碼只是乙個標識,可以隨意定義,以下是自定義的位元組碼,只定義了幾個常用的指令,其中每條指令標識都對應於乙個位元組碼。

在定義好指令對應的位元組碼之後,就須要乙個直譯器來解釋定義的指令位元組碼了。其實這裡的直譯器與物理機cpu很相似。在物理機中的程式執行需要處理器、暫存器、棧、堆等環境才可以執行起來,所以需要虛擬暫存器,棧、堆等,以下是處理器。

有了上面結構之後,就可以來動手寫直譯器了。直譯器的工作其實就是判斷當前解釋的位元組碼是否可以解析,如果可以就把相應引數傳遞給相應的處理函式,讓處理函式來解釋執行這一條指令。以下是直譯器**。

直譯器解釋執行過程:

首先可以從上面看到直譯器vm_cpu執行時pc會指向vcode,也就是自定義的位元組碼第乙個位元組0xa0(對應指令為mov),之後會判斷pc指向的位元組碼是否為ret指令,ret指令是0xa3,如果pc指向的不是ret,進入exec_handle函式進行位元組碼解釋。

0xa0就對應著mov指令,所以當直譯器遇到0xa0就會呼叫vm_mov函式來解釋mov指令。

在vm_mov函式中首先把pc + 1處的乙個位元組和pc + 2處2個位元組分別儲存在dest和src中,dest是暫存器標識,在後面的switch中判斷dest是哪個暫存器,在這個例子中dest是0x10,也就是r1暫存器,在case 0x10分支中就把*src賦值給r1。前4個位元組就是第一條mov指令,對應著mov r1, ***x,***x就是這4個位元組中的後2個。

上面是乙個直譯器在解釋執行位元組碼時的過程,其實很簡單,就是通過乙個位元組碼和解釋函式的關係來呼叫相應的函式(handle),或者通過乙個很長的switch來判斷每個位元組碼,並呼叫相應函式(handle) 。而解釋函式則通過執行相應的操作來模擬出乙個指令。最後,把這些指令串聯在一起就可以執行完乙個完整的邏輯。

下面是乙個簡單的crackme完整的vcode

下面是乙個簡單的crackme完整的源**

0x03:測試與總結

以android平台上測試如下:

總結:其實這只是最簡單的實現,僅僅是為了學習和理解,如果想實現乙個基於虛擬機器的保護殼還是有些複雜,比如:隨機vcode與handle的關係對映、handle混淆與亂序、**變形、重定位等。

bin:

當把學習當成一種習慣!

**:

初探arm與aarch64虛擬化相容心得

armv8主要有三套指令集,依據執行狀態 execution state 的不同可以劃分為 aarch64 aarch64 狀態只支援一套指令集,叫做a64.a64為定長32位的指令集,即每個指令的大小為32bit.指令集手冊 aarch32 aarch32 狀態支援兩套指令集 a32 也是32位定...

KVM虛擬化平台

一 kvm虛擬化平台 1 常見的虛擬化平台 1 windows虛擬平台 hyper v 2 vmware esxl 3 linux虛擬化平台 kvm4 容器虛擬化 docker 2 kvm的作用和架構 1 作用 kvm虛擬化引用程式 linux核心2.6以後都支援不需要編譯安裝 2 架構 計算機硬體...

虛擬化與雲平台

虛擬化 虛擬化技術就是指一台物理機上可以跑多台虛擬機器,共享記憶體 cpu io等硬體資源,虛擬機器之間在邏輯上是相互隔離的。共享的物理機稱為 宿主機 虛擬機器稱為 客戶機 宿主機通過 hypervisor 將硬體資源虛擬化給客戶機共享。根據 hypervisor 的安裝方式不同,虛擬化分為 2種型...