[發(fā)明專利]基于Dex2C與LLVM的Android應(yīng)用程序保護方法有效
| 申請?zhí)枺?/td> | 201910394117.5 | 申請日: | 2019-05-13 |
| 公開(公告)號: | CN110245467B | 公開(公告)日: | 2023-02-07 |
| 發(fā)明(設(shè)計)人: | 湯戰(zhàn)勇;何中凱;張宇翔;王薇;龔曉慶;陳曉江;房鼎益 | 申請(專利權(quán))人: | 西北大學 |
| 主分類號: | G06F21/14 | 分類號: | G06F21/14 |
| 代理公司: | 西安恒泰知識產(chǎn)權(quán)代理事務(wù)所 61216 | 代理人: | 李婷 |
| 地址: | 710069 *** | 國省代碼: | 陜西;61 |
| 權(quán)利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關(guān)鍵詞: | 基于 dex2c llvm android 應(yīng)用程序 保護 方法 | ||
1.基于Dex2C與LLVM的Android應(yīng)用程序保護方法,其特征在于,包括以下步驟:
從待保護的應(yīng)用程序安裝包中獲取Dex文件,按照文件格式對其進行逐層解析,得到Dex文件中的每一條匯編指令的能夠恢復到C語言代碼的所有必要信息并存儲于數(shù)據(jù)結(jié)構(gòu)中;確定待保護的方法并將其修改為本地層類型方法然后重寫Dex文件,進行轉(zhuǎn)換前預(yù)處理工作;建立評估模型,將待保護方法運行時的核心調(diào)用時間占比作為評估模型的決策依據(jù),通過設(shè)置閾值,來判定是否將待保護的方法進行Dex2C轉(zhuǎn)換,從而盡可能避免頻繁的反射調(diào)用和冗余的循環(huán)操作;
如待保護的方法進行Dex2C轉(zhuǎn)換,則將存儲在所述數(shù)據(jù)結(jié)構(gòu)中對應(yīng)于待保護方法的必要信息轉(zhuǎn)換為C語言代碼,轉(zhuǎn)換過程中針對于不同的匯編指令建立不同的轉(zhuǎn)換邏輯,并恢復匯編指令前驅(qū)、后繼之間的連接關(guān)系,同時保證匯編指令類型正確恢復、數(shù)據(jù)傳遞的一致性;將轉(zhuǎn)換后的C代碼作為待保護對象;
如待保護的方法不進行Dex2C轉(zhuǎn)換,則將待保護的應(yīng)用程序安裝包中的So文件里的入口函數(shù)作為待保護對象;
將待保護對象進行編譯的同時虛擬化,生成虛擬化后的二進制So文件,進行重打包、簽名,生成保護后的應(yīng)用程序。
2.如權(quán)利要求1所述的基于Dex2C與LLVM的Android應(yīng)用程序保護方法,其特征在于,所述的匯編指令的能夠恢復到C語言代碼的所有必要信息,包括類中方法、字段的描述以及每條指令的細節(jié)信息;
所述的數(shù)據(jù)結(jié)構(gòu)用于存放每條匯編指令所涉及的寄存器的個數(shù)及內(nèi)容、所屬類的信息以及參數(shù)信息。
3.如權(quán)利要求1所述的基于Dex2C與LLVM的Android應(yīng)用程序保護方法,其特征在于,所述的轉(zhuǎn)換前預(yù)處理工作,包括在待保護方法的所在類的執(zhí)行類構(gòu)造器中插入?yún)R編指令語句以建立指令間的前驅(qū)后繼關(guān)系。
4.如權(quán)利要求1所述的基于Dex2C與LLVM的Android應(yīng)用程序保護方法,其特征在于,所述的評估模型為:
計算待保護方法的函數(shù)調(diào)用鏈中函數(shù)自身的調(diào)用時間除以待保護方法的自身調(diào)用、子函數(shù)調(diào)用以及相關(guān)系統(tǒng)API的調(diào)用時間總和,將計算值與設(shè)置的閾值比較,如果超過閾值,則將待保護方法加入轉(zhuǎn)換白名單進行Dex2C轉(zhuǎn)換操作,否則將待保護方法加入轉(zhuǎn)換黑名單不進行Dex2C轉(zhuǎn)換操作。
5.如權(quán)利要求1所述的基于Dex2C與LLVM的Android應(yīng)用程序保護方法,其特征在于,所述的針對于不同的匯編指令建立不同的轉(zhuǎn)換邏輯,包括:
根據(jù)不同的匯編指令建立三種轉(zhuǎn)換邏輯:
第一種常規(guī)類型指令,包括數(shù)據(jù)操作指令、返回指令、數(shù)據(jù)定義指令以及數(shù)據(jù)運算指令,這類指令根據(jù)匯編指令的語義信息直接翻譯;
第二種引用類型指令,包括實例操作指令、方法調(diào)用指令以及字段操作指令,這類指令通過JNI函數(shù)反射調(diào)用Java層的方法來實現(xiàn)這些指令所表達的語義;
第三種跳轉(zhuǎn)類型指令,包括跳轉(zhuǎn)指令,則根據(jù)指令連接關(guān)系進行作用域的劃分及指令的轉(zhuǎn)換。
6.如權(quán)利要求1所述的基于Dex2C與LLVM的Android應(yīng)用程序保護方法,其特征在于,所述的將待保護對象進行編譯的同時虛擬化,包括:
在LLVM編譯器框架下,對待保護對象進行詞法分析、語法分析,解析構(gòu)建其AST樹,從而生成中間表示IR,中間表示剔除了源代碼與平臺相關(guān)的特性,但保留了其邏輯與語義信息;
虛擬指令解釋器將虛擬指令劃分為三種類型進行具體操作,分別為算數(shù)運算指令、數(shù)據(jù)轉(zhuǎn)移指令以及控制流轉(zhuǎn)移類型指令;
程序調(diào)度器用于模擬CPU的執(zhí)行過程,首先獲取虛擬指令,對虛擬指令解碼后索引到解釋器,將控制權(quán)交由解釋器解釋該指令,之后重奪控制權(quán)并循環(huán)上述過程,直至解釋所有指令;
函數(shù)體替換器在中間表示的基礎(chǔ)上對函數(shù)的函數(shù)體執(zhí)行變形,首先將函數(shù)體刪除并生成函數(shù)的簽名,函數(shù)簽名用來定位該函數(shù)所執(zhí)行的虛擬指令地址,并將該函數(shù)的參數(shù)傳遞給虛擬指令的解釋器以初始化解釋器中相關(guān)虛擬寄存器。
該專利技術(shù)資料僅供研究查看技術(shù)是否侵權(quán)等信息,商用須獲得專利權(quán)人授權(quán)。該專利全部權(quán)利屬于西北大學,未經(jīng)西北大學許可,擅自商用是侵權(quán)行為。如果您想購買此專利、獲得商業(yè)授權(quán)和技術(shù)合作,請聯(lián)系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201910394117.5/1.html,轉(zhuǎn)載請聲明來源鉆瓜專利網(wǎng)。
- 一種Android設(shè)備之間遠程桌面控制的方法
- 一種Android程序的執(zhí)行路徑的還原方法
- 基于ANCS協(xié)議兼容多平臺的通知消息獲取方法
- 基于字節(jié)碼插樁的Android程序監(jiān)控系統(tǒng)及方法
- 一種減少Android設(shè)備功耗的優(yōu)化方法及裝置
- 一種縮短無屏Android設(shè)備開機啟動時間的設(shè)置方法
- 一種基于Android雙系統(tǒng)的系統(tǒng)間通知同步方法
- 基于移動操作系統(tǒng)的Android兼容層實現(xiàn)方法和系統(tǒng)
- 一種Android智能設(shè)備APK安全管控方法
- 一種應(yīng)用程序開發(fā)中創(chuàng)建Android庫模塊依賴關(guān)系的方法及裝置





