一種動態脫殼方法、裝置和設備的制造方法【
技術領域:
】[0001]本發明涉及計算機
技術領域:
,特別是涉及一種動態脫殼方法、一種動態脫殼裝置和一種動態脫殼設備。【
背景技術:
】[0002]隨著智能技術的發展,出現了多種支持智能手機的系統。比如Android(安卓)系統。Android是一種以Linux為基礎的開放源碼操作系統,主要使用于手機等移動終端。Android平臺由操作系統、中間件、用戶界面和應用軟件組成。[0003]隨著Android系統的市場占有率的增加,越來越多的開發者基于Android系統開發APP(Applicat1n,應用),使用戶使用Android手機更方便。[0004]而且,出于安全或保密等因素的原因,越來越多的應用會被加殼,其中的加殼可以理解為,利用特殊的算法,對應用的dex文件(DalvikExecutable文件,Dalvik虛擬機可執行文件)里的資源進行壓縮,改變其原來的特征碼,隱藏一些字符串等等,使一些資源編輯軟件不能正常打開或者修改。對于加殼后的應用,其中dex文件中包含的代碼不能全部可見。[0005]但是在實際應用中,可能在應用的dex文件中存在病毒等對系統有危害的代碼,若該應用被加殼,則其dex文件被隱藏,從而其中的病毒可能很難被辨識。【
發明內容】[0006]鑒于上述問題,提出了本發明以便提供一種克服上述問題或者至少部分地解決上述問題的一種動態脫殼方法、相應的一種動態脫殼裝置和一種動態脫殼設備。[0007]依據本發明的一個方面,提供了一種動態脫殼方法,包括:[0008]在目標應用進程孵化時,將鉤取模塊的代碼和修復模塊的代碼注入目標應用進程;[0009]在目標應用進程啟動后,由所述鉤取模塊鉤取目標應用進程對加載dex文件的函數的調用,以獲取dex文件信息;[0010]由所述修復模塊根據所述dex文件信息對所述dex文件進行修復。[0011]優選地,所述鉤取模塊鉤取目標應用進程對加載dex文件的函數的調用,以獲取dex文件信息包括:[0012]由所述鉤取模塊鉤取目標應用進程對OnAttach函數的調用,以獲取dex文件信息,和/或由所述鉤取模塊鉤取目標應用進程對openDEXfile函數的調用,以獲取dex文件信息。[0013]優選地,所述鉤取目標應用進程對OnAttach函數的調用,以獲取dex文件信息包括:[0014]鉤取OnAttach函數,根據目標應用進程傳輸給所述OnAttach函數的參數,獲取類加載器;[0015]從所述類加載器獲取cookie信息;所述cookie信息包括dex緩存信息。[0016]優選地,所述鉤取目標應用進程對openDEXfile函數的調用,以獲取dex文件信息包括:[0017]鉤取openDEXfile函數,根據目標應用進程傳輸給所述openDEXfile函數的參數將dex文件信息加載到緩存中,并從所述緩存中獲取dex緩存信息。[00?8]優選地,由所述修復模塊根據所述dex文件信息對所述dex文件進行修復包括:[0019]分析dex文件的破壞方式,并根據所述破壞方式采用相應的修復方式對所述dex文件進行修復。[°02°]優選地,所述破壞方式包括:損壞dex偏移值、破壞header、抽取code、打散結構、添加亂碼。[0021]優選地,當所述破壞方式為損壞dex偏移值和/或破壞header時,根據所述破壞方式采用相應的修復方式對所述dex文件進行修復包括:[0022]根據所述header里面size信息重新計算偏移,并根據所述偏移獲取真實的數據。[0023]優選地,當所述破壞方式為抽取code時,根據所述破壞方式采用相應的修復方式對所述dex文件進行修復包括:[0024]遍歷每個類并在DVM虛擬機中實例化,并從所述DVM虛擬機中獲取真實的code數據。[0025]優選地,當所述破壞方式為添加亂碼時,根據所述破壞方式采用相應的修復方式對所述dex文件進行修復包括:[0026]刪除所述亂碼。[0027]優選地,當所述破壞方式為打散結構時,根據所述破壞方式采用相應的修復方式對所述dex文件進行修復包括:[0028]根據指向不同內存指向dex文件塊的指針,從各內存中獲取dex文件塊;[0029]在同一個內存中,將各dex文件塊拼接為一個dex文件。[0030]優選地,所述在目標應用進程孵化時,將鉤取模塊的代碼和修復模塊的代碼注入目標應用進程包括:[0031]運行控制模塊以向系統服務進程注入用于關閉活動管理服務與原孵化器的連接的關斷模塊;[0032]由所述控制模塊利用原孵化器構造子孵化器;[0033]由所述控制模塊接收在系統服務進程注冊的活動管理服務的為運行目標應用程序而發起的請求,并將其傳遞給所述子孵化器;[0034]由所述子孵化器響應于該請求而孵化目標應用進程,并將鉤取模塊的代碼和修復模塊的代碼注入目標應用進程。[0035]根據本發明的另一方面,提供了一種動態脫殼裝置,包括:[0036]注入模塊,適于在目標應用進程孵化時,將鉤取模塊的代碼和修復模塊的代碼注入目標應用進程;[0037]鉤取模塊,適于在目標應用進程啟動后,由所述鉤取模塊鉤取目標應用進程對加載dex文件的函數的調用,以獲取dex文件信息;[0038]修復模塊,適于由所述修復模塊根據所述dex文件信息對所述dex文件進行修復。[0039]優選地,所述鉤取模塊,包括:[0040]第一鉤取子模塊,適于由所述鉤取模塊鉤取目標應用進程對OnAttach函數的調用,以獲取dex文件彳目息,和/或[0041]第二鉤取子模塊,適于由所述鉤取模塊鉤取目標應用進程對openDEXfile函數的調用,以獲取dex文件信息。[0042]優選地,所述第一鉤取子模塊,包括:[0043]類加載器獲取子模塊,適于鉤取OnAttach函數,根據目標應用進程傳輸給所述OnAttach函數的參數,獲取類加載器;[0044]第一dex緩存信息獲取子模塊,適于從所述類加載器獲取cookie信息;所述cookie信息包括dex緩存信息。[0045]優選地,所述第二鉤取子模塊,包括:[0046]第二dex緩存信息獲取子模塊,適于鉤取openDEXfile函數,根據目標應用進程傳輸給所述openDEXfile函數的參數將dex文件信息加載到緩存中,并從所述緩存中獲取dex緩存?目息O[0047]優選地,所述修復模塊,包括:[0048]修復子模塊,適于分析dex文件的破壞方式,并根據所述破壞方式采用相應的修復方式對所述dex文件進行修復。[0049]優選地,所述破壞方式包括:損壞dex偏移值、破壞header、抽取code、打散結構、添加亂碼。[0050]優選地,當所述破壞方式為損壞dex偏移值和/或破壞header時,所述修復子模塊,包括:[0051]第一數據獲取子模塊,適于根據所述header里面size信息重新計算偏移,并根據所述偏移獲取真實的數據。[0052]優選地,當所述破壞方式為抽取code時,所述修復子模塊,包括:[0053]第二數據獲取子模塊,適于遍歷每個類并在DVM虛擬機中實例化,并從所述DVM虛擬機中獲取真實的code數據。[0054]優選地,當所述破壞方式為添加亂碼時,所述修復子模塊,包括:[0055]刪除子模塊,適于刪除所述亂碼。[0056]優選地,當所述破壞方式為打散結構時,所述修復子模塊,包括:[0057]dex文件塊獲取子模塊,適于根據指向不同內存指向dex文件塊的指針,從各內存中獲取dex文件塊;[0058]dex文件塊拼接子模塊,適于在同一個內存中,將各dex文件塊拼接為一個dex文件。[0059]優選地,所述注入模塊包括:[0060]運行模塊,適于運行控制模塊以向系統服務進程注入用于關閉活動管理服務與原孵化器的連接的關斷模塊;[0061]控制模塊,適于利用原孵化器構造子孵化器;接收在系統服務進程注冊的活動管理服務的為運行目標應用程序而發起的請求,并將其傳遞給所述子孵化器;[0062]第一注入模塊,適于由所述子孵化器響應于該請求而孵化目標應用進程,并將鉤取模塊的代碼和修復模塊的代碼注入目標應用進程。[0063]根據本發明的另一方面,提供了一種動態脫殼設備,包括:[0064]存儲器,加載有多條可執行指令;[0065]處理器,執行所述多條可執行指令;所述多條可執行指令包括執行以下步驟的方法:[0066]在目標應用進程孵化時,將鉤取模塊的代碼和修復模塊的代碼注入目標應用進程;[0067]在目標應用進程啟動后,由所述鉤取模塊鉤取目標應用進程對加載dex文件的函數的調用,以獲取dex文件信息;[0068]由所述修復模塊根據所述dex文件信息對所述dex文件進行修復。[0069]根據本發明的一種動態脫殼方法,可以在目標應用進程孵化時,將鉤取模塊的代碼和修復模塊的代碼注入目標應用進程;在目標應用進程啟動后,由所述鉤取模塊鉤取目標應用進程對加載dex文件的函數的調用,以獲取dex文件信息;由所述修復模塊根據所述dex文件信息對所述dex文件進行修復。由此解決了帶病毒的應用被加殼后,由于dex文件被隱藏,而導致很難解析dex文件,從而很難辨析病毒的問題,取得了可以方便的對加殼的應用進行脫殼,從而可以還原隱藏的dex文件,為辨識病毒提供可操作的條件的有益效果。[0070]上述說明僅是本發明技術方案的概述,為了能夠更清楚了解本發明的技術手段,而可依照說明書的內容予以實施,并且為了讓本發明的上述和其它目的、特征和優點能夠更明顯易懂,以下特舉本發明的【具體實施方式】。【附圖說明】[0071]通過閱讀下文優選實施方式的詳細描述,各種其他的優點和益處對于本領域普通技術人員將變得清楚明了。附圖僅用于示出優選實施方式的目的,而并不認為是對本發明的限制。而且在整個附圖中,用相同的參考符號表示相同的部件。在附圖中:[0072]圖1示出了根據本發明一個實施例的一種動態脫殼方法實施例的步驟流程圖;[0073]圖2示出了根據本發明一個實施例的一種動態脫殼方法實施例的步驟流程圖;[0074]圖3示出了根據本發明一個實施例的一種動態脫殼裝置實施例的結構框圖;[0075]圖4示出了根據本發明一個實施例的一種動態脫殼裝置實施例的結構框圖;[0076]圖5示出了根據本發明一個實施例的一種設備實施例的結構框圖。【具體實施方式】[0077]下面將參照附圖更詳細地描述本公開的示例性實施例。雖然附圖中顯示了本公開的示例性實施例,然而應當理解,可以以各種形式實現本公開而不應被這里闡述的實施例所限制。相反,提供這些實施例是為了能夠更透徹地理解本公開,并且能夠將本公開的范圍完整的傳達給本領域的技術人員。[0078]實施例一[0079]參照圖1,示出了根據本發明一個實施例的一種動態脫殼方法實施例的步驟流程圖,具體可以包括如下步驟:[0080]步驟110,在目標應用進程孵化時,將鉤取模塊的代碼和修復模塊的代碼注入目標應用進程。[0081]在實際應用中,一個應用的所有代碼都在一個dex文件里面。每一個應用都運行在一個Dalvik虛擬機實例里,而每一個Dalvik虛擬機實例都是一個獨立的進程空間。在實際應用中,dex文件是可以直接在Dalvik虛擬機中加載運行的文件。經過復雜的編譯,可以把java源代碼轉換為dex文件。dex文件中共用了很多類(class)名稱、常量字符串,使它的體積比較小,運行效率也比較高。[0082]在實際應用中,因為安全或者其他因素,很多應用是被加殼的,其中的加殼可以理解為,利用特殊的算法,對dex文件里的資源進行壓縮,改變其原來的特征碼,隱藏一些字符串等等,使一些資源編輯軟件不能正常打開或者修改,加殼后的dex文件可以獨立運行。可以看出,加殼后的dex文件中的全部代碼或者部分代碼不可見。但是,現在對于應用中可能存在病毒等對存在安全隱患的代碼,若該應用進行加殼,則其中的病毒代當前第1頁1 2 3 4 5