[發明專利]多兼容性代碼加固方法在審
| 申請號: | 202110260003.9 | 申請日: | 2021-03-10 |
| 公開(公告)號: | CN112989290A | 公開(公告)日: | 2021-06-18 |
| 發明(設計)人: | 禹明生;劉遠;王暉;李金祥;段雨洪 | 申請(專利權)人: | 四川長虹格潤環保科技股份有限公司 |
| 主分類號: | G06F21/14 | 分類號: | G06F21/14;G06F8/76;G06F8/41 |
| 代理公司: | 四川省成都市天策商標專利事務所 51213 | 代理人: | 陳藝文 |
| 地址: | 610404 四川*** | 國省代碼: | 四川;51 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 兼容性 代碼 加固 方法 | ||
本發明公開了一種多兼容性代碼加固方法,包括:使用LLVM將被保護代碼轉化為LLVM IR文件,使用VMPP設計虛擬指令集;指令轉換器進行指令虛擬化:指令轉換器解析所述LLVM IR文件,將其轉換為所述虛擬指令集上的虛擬指令,包括數據段、指令段和外部函數調用代碼,分別對應于IR數據和指令中的全局變量、指令和外部函數調用表;使用開發者工具鏈進行架構的兼容:使用開發者工具鏈編譯源代碼生成不同架構上的so文件或者靜態鏈接庫文件;本發明使得被保護的代碼兼容性高、安全性好。
技術領域
本發明涉及代碼安全技術領域,特別是一種多兼容性代碼加固方法。
背景技術
安卓系統越來越廣泛的被應用在各種只能設備上,與此同時,針對安卓應用軟件的逆向攻擊也日益增多,這不僅極大的侵犯了軟件開發者的合法權益,也給終端用戶帶來了潛在的安全風險。現有的安卓軟件保護方法比如命名混淆、動態加載、代碼隱藏等雖然在一定程度上增加了安卓軟件的逆向難度,但是容易被繞過。一種更為有效的方法是采用指令虛擬化的加固方法,但是已有的指令虛擬化方法只針對特定架構,無法兼容多種架構的安卓設備。
發明內容
為解決現有技術中存在的問題,本發明的目的是提供一種多兼容性代碼加固方法,本發明使得被保護的代碼兼容性高、安全性好。
為實現上述目的,本發明采用的技術方案是:一種多兼容性代碼加固方法,包括以下步驟:
步驟1、使用LLVM將被保護代碼轉化為LLVM IR文件,使用VMPP設計虛擬指令集;
步驟2、指令轉換器進行指令虛擬化:指令轉換器解析所述LLVM IR文件,將其轉換為所述虛擬指令集上的虛擬指令,包括數據段、指令段和外部函數調用代碼,分別對應于IR數據和指令中的全局變量、指令和外部函數調用表;
步驟3、使用開發者工具鏈進行架構的兼容:使用開發者工具鏈編譯源代碼生成不同架構上的so文件或者靜態鏈接庫文件。
作為本發明的進一步改進,在步驟1中,所述虛擬指令集基于寄存器架構,使用256個通用寄存器和16個參數寄存器進行運算操作。
作為本發明的進一步改進,在步驟1中,所述虛擬指令集包括8個類型共45條指令,8個類型的指令分別為R類型指令、I類型指令、B類型指令、CMP類型指令、W類型指令、C類型指令、M類型指令和E類型指令,其中:
R類型指令為源操作數均為寄存器的指令,用于算術運算、邏輯、位移操作;
I類型指令為源操作數為寄存器和立即數的指令,用于算術運算、邏輯、位移操作;
B類型指令為跳轉指令,用于實現指令跳轉和內部函數調用;
CMP類型指令為比較型指令,用于比較源操作數;
W類型指令為訪存指令和賦值寄存器指令,用于訪問內存等操作;
C類型指令為外部函數調用指令,用于處理外部函數調用;
M類型指令包含malloc指令和return指令,用于分配內存和函數返回;
E類型指令為異常處理的指令,用于處理異常機制。
作為本發明的進一步改進,在步驟2中,指令轉換器解析LLVM IR文件時,使用LLVMAPI依次讀取并處理每條IR數據和指令,分別生成數據段、指令段和外部函數調用代碼;指令轉換器依次讀取IR數據和指令中每個全局變量,解析出該變量的長度與值,將變量的值寫入數據段文件中;若該變量未初始化,則將相應長度的0寫入數據段文件,同時記錄該變量的符號和起始地址,以及其映射關系,這樣其他指令通過訪問其地址來使用該變量。
作為本發明的進一步改進,所述步驟3具體如下:
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于四川長虹格潤環保科技股份有限公司,未經四川長虹格潤環保科技股份有限公司許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/202110260003.9/2.html,轉載請聲明來源鉆瓜專利網。





