郭剛
【摘 要】隨著越來越多破解工具的誕生,非法破解一款目標程序的時間越來越短,方法越來越多。因此軟件開發(fā)者除了要做好主體程序之外,還要花費大量的時間與精力考慮如何保護自己的軟件,使得開發(fā)軟件的成本大大增加,也對行業(yè)的發(fā)展帶來了極為不利的影響。本文中介紹的Virtual Safengine軟件保護系統(tǒng)采用數據校驗、壓縮、轉儲等技術,從效率、安全性等出發(fā),提供了多個軟件保護方案供用戶選擇。并且使用了一種新的虛擬化方案,結合inlineHook技術,收集程序調用API的樣本數據,不斷優(yōu)化生成虛擬機OPCODE的方法,達到滿足程序實時運行的保護效果。
【關鍵詞】軟件安全;加殼技術;虛擬化
中圖分類號: TP302;TP309 文獻標識碼: A 文章編號: 2095-2457(2018)35-0012-002
DOI:10.19694/j.cnki.issn2095-2457.2018.35.006
Research and design of software protection system
GUO Gang
(School of Computer and Information Security,Guilin University of Electronic Technology,
Guilin Guangxi 541004,China)
【Abstract】With the advent of more and more cracking tools, the time and methods of illegally cracking a target program are becoming shorter and more numerous. Therefore, software developers should not only word hard in the program code, but also spend a lot of time in thinking about how to protect their own software, which greatly increases the cost of developing software and has a extremely negative impact on the development of the industry. The Virtual Safengine software protection system introduced in this paper provides multiple software protection schemes for users to choose including data validation, compression, dump and other technologies for the efficiency, security and so on .In addition, a new virtualization scheme is used to collect the sample data of the API called by program in combination with inline-Hook technology and constantly optimize the method of generating the virtual machine OPCODE to achieve the protection effect of real-time operation of the program.
【Key words】Software Security; Shell; Virtualization
0 引言
軟件開發(fā)者本應專注于軟件的開發(fā)和功能的完善,如今卻要為了保護軟件不被破解而憂心忡忡,給軟件開發(fā)的過程帶來了更大的開銷。在這種情況下,軟件保護技術就誕生了,這種技術的分類有很多,但基本都可涵蓋在加殼技術與代碼虛擬化技術之中。加殼技術可以簡單的解為多種軟件保護技術的集合。代碼虛擬技術也被成為“代碼虛擬機”,其本質就是將代碼變形成一種轉義的形式,通過許多模擬代碼來模擬被保護代碼的執(zhí)行,可以說是保護效果最有效、最可靠,但是也最復雜的一種軟件保護技術。
1 系統(tǒng)設計
Virtual Safengine由Shell保護模塊、API監(jiān)控模塊、進程分析模塊、虛擬機保護模塊四部分組成。實現(xiàn)了可高度自定義且兼容性高的保護功能以及可自動優(yōu)化的代碼虛擬化功能。
1.1 Shell保護模塊設計
Shell保護模塊負責加殼操作和外殼運行處理,其中加殼操作的流程是:
(1)解析PE文件頭,提取關鍵數據存儲(支持exe與dll文件)。
(2)合并文件區(qū)段,并修復合并之后的PE文件結構。
(3)對關鍵文件數據表項進行加密與轉儲。
(4)對文件區(qū)段進行壓縮。
(5)增添反調試、反虛擬機、反Dump、數據校驗等保護技術。
在用戶運行加殼后的程序時,本模塊會模擬PE加載的過程。包括重定位、區(qū)段解壓解密等,使加殼后的程序能正常運行。
為了使整個操作的可移植性、可擴展性高,本系統(tǒng)將主要操作封裝成C++類,并將整個加殼操作和外殼的代碼封裝為DLL,以便達到界面與功能邏輯上的分離。
1.2 API監(jiān)控模塊設計
該模塊將指定API進行修改,使其改變執(zhí)行流,實現(xiàn)跳轉到預先設計的代碼之中,達到監(jiān)控API時觸發(fā)的效果,最終目的為了采集到該軟件的API調用信息。
該模塊通過導入表掛起注入的方式將監(jiān)控DLL注入到目標進程中,該注入方式兼容性和穩(wěn)定性都非常好,并且注入的時機相對來說較為合適。整個DLL的注入需要配合一些Windows API的結合,分四個步驟。使用CreateProcess以CREATE_SUSPENDED的標志打開;讀取目標進程虛存空間的頭結構,解析頭結構,進一步提取導入表數據,對其添加注入DLL;修正PE頭結構;恢復運行。
本系統(tǒng)在注入監(jiān)控DLL后,DLL將對宿主程序指定模塊的API進行inlineHook,使其跳轉到設計好的ShellCode中,該ShellCode負責收集API調用信息并發(fā)送給監(jiān)控端。
1.3 進程分析模塊設計
本模塊通過調用3個Windows提供的API,OpenProcess、EnumProcessModules、EnumProcesses,獲取進程列表與進程模塊,之后獲取模塊句柄。最后將上述保存的信息顯示在UI控件,顯示的數據有模塊基址、鏡像大小和模塊絕對路徑。根據UI的信息顯示,可以很方便的觀察到當前系統(tǒng)的大部分進程信息,瀏覽到該進程中存在的模塊信息,為Shell保護模塊的AntiDump和API監(jiān)控模塊的DLL注入提供了直觀的效果圖。
1.4 虛擬機保護模塊設計
該模塊的原理是將x86編碼的指令通過一套自定義的字節(jié)碼轉換為只有虛擬機能識別的指令。由于虛擬機的字節(jié)碼編碼方式是不公開的,所以調試人員很難對其中的指令進行一一分解。其中包含4個子模塊,分別是反編譯模塊、虛擬化編碼器、虛擬指令譯碼器、虛擬機附加模塊。
其中,反編譯模塊負責將代碼中的二進制信息轉換為x86匯編語言,供虛擬化編碼器讀?。惶摂M化編碼器負責將反匯編后的指令通過自定義的規(guī)則進行虛擬化指令的轉換。生成虛擬指令序列;虛擬指令譯碼器負責將虛擬化指令翻譯為x86匯編語言執(zhí)行,并保證當前程序的上下文環(huán)境等價輸出;虛擬機附加模塊負責將虛擬機中的字節(jié)碼表、跳轉分支表、虛擬指令序列表和虛擬機代碼以新節(jié)的方式寫入目標程序的PE結構中。
2 系統(tǒng)特色
2.1 高度自定義的軟件保護方案
一款成熟的軟件需要針對不同的使用群體提供不同的保護方案。所以,本系統(tǒng)實現(xiàn)了從常規(guī)的三套方案到用戶高度自定義的保護方案,用戶可以根據軟件的運行情況來進行選擇,在安全性和性能之間達到一個最均衡的狀態(tài)。
2.2 基于API調用情況的代碼虛擬化
用戶有時不能對某款軟件的運行狀態(tài)以及API調用狀況進行深入的了解,所以本系統(tǒng)API監(jiān)控模塊會在用戶的操作之前,盡可能的采集軟件的API調用情況作為樣本數據,傳遞給虛擬機進行分析,再有的放矢的對關鍵代碼進行虛擬化,保證效率和安全性。
2.3 自定義字節(jié)碼的生成
很多逆向工作者對x86的指令集都相當熟悉,所以改變其中部分指令集必不可少。同時一套指令集如果不進行更替,隨著時間的推移,被破譯的可能性會增加。針對該問題,本系統(tǒng)每次啟動都會生成一套新的字節(jié)碼,迫使破譯者每次脫殼都需要重新理解指令集。
3 總結
在本文中我們介紹了Virtual Safengine這樣一款功能豐富的軟件保護系統(tǒng)的設計框架,與一種新的代碼虛擬化方案,通過結合API調用信息,調整代碼虛擬化的過程。我們的測試結果顯示本系統(tǒng)可以對大多數exe程序與DLL文件進行加殼。毫無疑問,未來對于軟件知識產權保護的力度會越來越大,我們希望通過在軟件保護這一領域的持續(xù)研究,更好地了解終端用戶目前面臨的安全風險與真實需求。這樣,我們就可以繼續(xù)在保護軟件知識產權的道路上走下去。
【參考文獻】
[1]章立春.軟件保護及分析技術[M].北京:電子工業(yè)出版社,2016.8.
[2]章立春.代碼虛擬與自動化分析[M].北京:電子工業(yè)出版社,2017.10.
[3]戚利.Windows PE權威指南[M].北京:機械工業(yè)出版社,2011.
[4]段鋼.加密與解密[M].北京:電子工業(yè)出版社,2008.7.
[5]任曉琿.黑客免殺攻防[M].北京:機械工業(yè)出版社,2013.10.
[6](韓)李承遠著.逆向工程核心原理[M].武傳海等譯.北京:人民郵電出版社,2014.5.
[7]Amir Averbuch, Michael Kiperberg, Nezer Jacob Zaidenberg. Truly-Protect: An Efficient VM-Based Software Protection[C]. IEEE Systems Journal,2013.
[8]杜春來等.一種基于指令虛擬化的代碼保護模型[J].信息網絡安全,2017.
[9]Johannes Kinder. Towards Static Analysis of Virtualization-Obfuscated Binaries[C].Reverse Engineering (WCRE), 2012 19th Working Conference on,2012.