VMP殼原理


總結vmp殼基礎原理,大牛不要噴啊!
 
1.與傳統的加殼工具不同,不是簡單的把目標進行壓縮、內存解壓運行,而是修改目標源碼,讓目標的部分指令在vmp創建的虛擬環境下運行,虛擬環境中無操作數比較指令、條件跳轉和無條件跳轉指令;
2.被修改替換的目標指令最終形成的字節碼有前后相關性,即你改變其他任意一個字節會影響到所有被vm虛擬化的指令
3.vmp的虛擬機其實是一個字節碼解釋器,循環的讀取指令並執行,並且只有一個入口和一個出口
4.虛假跳轉和垃圾指令, vmp會使用大量的虛擬跳轉和垃圾指令將原有簡單的代碼變得復雜
5.vmp是基於堆棧的虛擬機,虛擬機指令不是顯示的讀取參數,而是把要使用的參數壓入堆棧,而后直接從堆棧中讀取
6.vmp指令
1)算數運算和移位運算
2)堆棧操作
3)系統相關
4)邏輯運算,這個最復雜,vmp中只有一個邏輯運算指令nor, 它可以模擬not and or xor 四個邏輯運算指令
6.vmp寄存器輪轉
mvp將所有的寄存器都放在一個堆棧的結構vm_context中, 結構中的每一項代碼一個寄存器或臨時變量
在程序運行過程中, vm_context結構中保存的寄存器不是固定的,每當執行完一個操作或一個指令結構中的項與真實寄存器之間的映射關系會發生變化,就像一個齒輪隨機的轉動了一下, 轉動過后原有的映射關系全部改變了
7.字節碼加密和隨機效驗
隨機效驗比較牛B, vmp會在編譯好的字節碼中加入自己的一些指令(專屬於vmp自動的指令), 每一次執行都會對一段代碼隨機生成hash值, 然后與另一個隨機數相加, vmp要求相加的結果必須為0, 否則會出錯.
 
轉載:http://bbs.pediy.com/showthread.php?t=190351&viewgoodnees=1&prefixid=


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM