本發明是有關于一種檢測系統及其方法,且特別是有關于一種關于檢測應用程序改版的檢測系統及其方法。
背景技術:
隨著應用程序的普及,各種電子裝置上的應用程序的改版也日益頻繁。目前的應用程序檢測系統主要是提出應用程序的拆解方法,使程序開發者可在取得程序原始碼后,搭配判斷應用函數介面(Application Programming Interface,API)的呼叫權重,以判斷是否此應用程序為惡意程序。此外,于一些傳統的檢測系統中,是于解構應用程序后,利用搜尋程序碼中的關鍵詞,搭配統計的學習機制,以判斷某兩個應用程序之間的相似度。
然而,在眾多應用程序頻繁改版的情況下,若要將新版的應用程序的整體進行檢測,并判斷此新版的應用程序是否具安全性,則需要耗用龐大的人力資源與時間資源,才能將每個新版的應用程序一一完成檢測。因此,如何有效率的檢測新版的應用程序,即是本領域相關人員所需解決的問題。
技術實現要素:
為解決上述的問題,本發明的一方面提供一種檢測系統。檢測系統包含:一反編譯模塊、一改版程序異動比對及分類模塊及一資安檢測模塊。反編譯模塊用以反編譯一第一應用程序封裝檔,以產生多個第一反編譯文件,且第一反編譯文件包含一第一反編譯程序碼。改版程序異動比對及分類模塊用以比對第一反編譯程序碼與一第二應用程序封裝檔的一第二反編譯程序碼,分析第一反編譯程序碼與第二反編譯程序碼的一相異程序區段,依據第一反編譯程序碼的一函數呼叫流程以分類出對應相異程序區段的一程序異動類型,并載入一異動類型與規則對照表,以及選取異動類型與規則對照表中的對應程序異動類型的至少一檢測規則。資安檢測模塊用以依據至少一檢測規則選擇性地更新或建立 一數據流程,并依據數據流程確認第一反編譯程序碼的一檢測范圍,以及檢測此檢測范圍,以產生一安全性檢測結果。
本發明的另一方面提供一種檢測方法。檢測方法包含:反編譯一第一應用程序封裝檔,以產生多個第一反編譯文件,且第一反編譯文件包含一第一反編譯程序碼;比對第一反編譯程序碼與一第二應用程序封裝檔的一第二反編譯程序碼,分析第一反編譯程序碼與第二反編譯程序碼的一相異程序區段,依據第一反編譯程序碼的一函數呼叫流程以分類出對應相異程序區段的一程序異動類型;載入一異動類型與規則對照表,并選取異動類型與規則對照表中的對應程序異動類型的至少一檢測規則;依據至少一檢測規則選擇性地更新或建立一數據流程,并依據數據流程確認第一反編譯程序碼的一檢測范圍;以及檢測此檢測范圍,以產生一安全性檢測結果。
綜上所述,本發明的技術方案與現有技術相比具有明顯的優點和有益效果。通過上述技術方案,可達到相當的技術進步,并具有產業上的廣泛利用價值。本發明可檢測出改版前應用程序與新版應用程序的相異程序區段,故只需檢測此相異程序區段及與此相異程序區段相關的程序部分,即可取得此新版應用程序的安全性檢測結果,換言之,本案的檢測系統無需檢測整體新版的應用程序,因此,本案避免了檢測資源的重復耗用,且提供了一種更有效率的檢測系統及其方法。
附圖說明
為讓本發明的上述和其他目的、特征、優點與實施例能更明顯易懂,所附附圖的說明如下:
圖1根據本發明的一實施例繪示一種檢測系統的方塊圖;
圖2根據本發明的一實施例繪示一種檢測方法的流程圖;
圖3根據本發明的一實施例繪示一種異動類型與規則對照表的示意圖;以及
圖4根據本發明的一實施例繪示一種檢測方法的流程圖。
具體實施方式
請參照圖1、圖2及圖3,如圖1所示,圖1根據本發明的一實施例繪示 一種檢測系統100的方塊圖。圖2根據本發明的一實施例繪示一種檢測方法200的流程圖。圖3根據本發明的一實施例繪示一種異動類型與規則對照表300的示意圖。于一實施例中,檢測系統100包含:一反編譯模塊110、一改版程序異動比對及分類模塊130及一資安檢測模塊150。于另一實施例中,檢測系統100還包含一儲存裝置180及一報表模塊170,其中,儲存裝置180用以儲存異動類型與規則對照表300、一報表、至少一檢測規則、一舊版應用程序封裝檔信息及安全性檢測結果。報表模塊170用以依據安全性檢測結果產生一報表,并可依據每一次更新后的安全性檢測結果產生一更新后的報表。于一實施例中,報表可以儲存于儲存裝置180中。
如圖1所示,儲存裝置180可被實作為只讀記憶體、快閃記憶體、軟盤、硬盤、光盤、隨身盤、磁帶、可由網絡存取的數據庫或熟悉此技藝者可輕易思及具有相同功能的儲存媒體。此外,反編譯模塊110、改版程序異動比對及分類模塊130、資安檢測模塊150及報表模塊170可分別或合并被實施為例如為微控制單元(microcontroller)、微處理器(microprocessor)、數字信號處理器(digital signal processor)、特殊應用集成電路(application specific integrated circuit,ASIC)或一邏輯電路。
于步驟S210中,反編譯模塊110用以反編譯一第一應用程序封裝檔,以產生多個第一反編譯文件,且第一反編譯文件包含一第一反編譯程序碼。
于一實施例中,第一應用程序封裝檔可以是一種安卓(Android)操作系統上的應用程序安裝文件格式,例如為安卓安裝包(Android Package,一般稱為APK)文件,反編譯模塊110可通過反編譯此APK文件,以產生多個第一反編譯文件。于一實施例中,這些第一反編譯文件可以例如為smali文件。然,本領域具通常知識者應可由已知的現有方法理解將APK文件反編譯為smali文件的技術內容,或應用現有的套裝軟體直接將APK文件反編譯為smali文件,故此處不贅述之。此外,本案所述的第一應用程序封裝檔并不僅限于APK文件,第一應用程序封裝檔亦可為其他類型的程序。
于步驟S220中,改版程序異動比對及分類模塊130用以比對第一反編譯程序碼與一第二應用程序封裝檔的一第二反編譯程序碼,分析第一反編譯程序碼與一第二反編譯程序碼的一相異程序區段,依據第一反編譯程序碼的一函數呼叫流程以分類出對應相異程序區段的一程序異動類型。
于一實施例中,第一應用程序封裝檔為一新版應用程序封裝檔,第二應用程序封裝檔為一舊版應用程序封裝檔。于一實施例中,舊版應用程序封裝檔儲存在儲存裝置180中,且舊版應用程序封裝檔包含一舊版應用程序封裝檔信息,此舊版應用程序封裝檔信息包含舊版應用程序封裝檔的建立日期、修改日期、文件大小、文件類型、前次存取日期、文件位置及/或多個第二反編譯文件,其中,這些第二反編譯文件包含第二反編譯程序碼。
于一實施例中,反編譯模塊110更用以反編譯第二應用程序封裝檔(例如為舊版應用程序封裝檔),以產生多個第二反編譯文件,并將這些第二反編譯文件儲存于儲存裝置180的一數據庫中,于此實施例中,這些第二反編譯文件包含第二反編譯程序碼。
于一實施例中,儲存裝置180的一數據庫存在這些第二反編譯文件,這些第二反編譯文件對應第二應用程序封裝檔。
接著,改版程序異動比對及分類模塊130比對這些第一反編譯文件及這些第二反編譯文件(例如比對具有相同文件名稱的反編譯文件內容),以取得第一反編譯文件中的一異動文件,且異動文件包含第一反編譯程序碼;改版程序異動比對及分類模塊130通過找出第一反編譯文件中的異動文件,可進一步分析異動文件中的反編譯程序碼。于一實施例中,改版程序異動比對及分類模塊130可以通過字元比對、字串比對、函數名稱比對、文件名稱比對等方式,以找到第一反編譯程序碼(例如為新版應用程序封裝檔的反編譯程序碼)與一第二反編譯程序碼(例如為舊版應用程序封裝檔的反編譯程序碼)的一相異程序區段。于一實施例中,第一反編譯程序碼與一第二反編譯程序碼之間可具有多個相異程序區段。于一實施例中,第二反編譯程序碼(例如為舊版應用程序封裝檔的反編譯程序碼)可從儲存裝置180、云端儲存空間或任一數據庫中載入過往數據以取得。
于一實施例中,改版程序異動比對及分類模塊130于分析出相異程序區段后,依據第一反編譯程序碼的一函數呼叫流程以分類出對應此相異程序區段的程序異動類型,此程序異動類型可以包含參數值異動、單一函數的呼叫異動或函數呼叫流程異動三者其中至少之一,以下進一步說明關于程序異動類型的定義方式。
于一實施例中,當改版程序異動比對及分類模塊130分析第一反編譯程序 碼與第二反編譯程序碼的相異程序區段中包含一參數值異動時,程序異動類型被定義為參數值異動類型。
舉例而言,當第一反編譯程序碼(例如為新版應用程序封裝檔的反編譯程序碼)與第二反編譯程序碼(例如為舊版應用程序封裝檔的反編譯程序碼)都具有一特定參數時,且此特定參數在第二反編譯程序碼被設置為2,而在第一反編譯程序碼中被更改為3,則于改版程序異動比對及分類模塊130比對第一反編譯程序碼與一第二反編譯程序碼后,改版程序異動比對及分類模塊130可分析出此相異程序區段(例如,特定參數由2改變為3的程序區段),以取得對應相異程序區段的一程序異動類型,且改版程序異動比對及分類模塊130將關于參數值異動的程序異動類型分類為參數值異動類型。
于一實施例中,當改版程序異動比對及分類模塊130分析第一反編譯程序碼與第二反編譯程序碼的相異程序區段中包含一單一函數的呼叫異動時,程序異動類型被定義為單一函數的呼叫異動類型。于一實施例中,改版程序異動比對及分類模塊130可通過分析第一反編譯程序碼的函數呼叫流程,以判斷第一反編譯程序碼與第二反編譯程序碼的相異程序區段中是否包含單一函數的呼叫異動。
舉例而言,當第一反編譯程序碼(例如為新版應用程序封裝檔的反編譯程序碼)具有一特定函數(例如為系統呼叫,system call),而第二反編譯程序碼(例如為舊版應用程序封裝檔的反編譯程序碼)不具有一特定函數時,則代表第一反編譯程序碼相較于第二反編譯程序碼更進一步新增了此特定函數,于此情況中,改版程序異動比對及分類模塊130可分析出此相異程序區段(例如,于第一反編譯程序碼中新增的此特定函數的程序區段),以取得對應相異程序區段的一程序異動類型。借此,改版程序異動比對及分類模塊130可將關于此種單一函數的呼叫異動(例如,新增系統呼叫)的程序異動類型分類為單一函數的呼叫異動類型。
于另一例中,當第一反編譯程序碼不具有一特定函數,而第二反編譯程序碼具有一特定函數時,則代表第一反編譯程序碼相較于第二反編譯程序碼更進一步移除了此特定函數,于此情況中,改版程序異動比對及分類模塊130可分析出此相異程序區段(例如,第一反編譯程序碼中已移除的此特定函數的程序區段),以取得對應相異程序區段的一程序異動類型。借此,改版程序異動比 對及分類模塊130可將關于此種單一函數的呼叫異動(例如,移除系統呼叫)的程序異動類型分類為單一函數的呼叫異動類型。
于一實施例中,當改版程序異動比對及分類模塊130分析第一反編譯程序碼與第二反編譯程序碼的相異程序區段中包含一函數呼叫流程異動時,程序異動類型被定義為函數呼叫流程異動類型。于一實施例中,改版程序異動比對及分類模塊130可通過分析第一反編譯程序碼的函數呼叫流程,以判斷第一反編譯程序碼與第二反編譯程序碼的相異程序區段中是否包函數呼叫流程異動。
舉例而言,當第二反編譯程序碼(例如為舊版應用程序封裝檔的反編譯程序碼)中是先依序呼叫一第一函數、第二函數與第三函數,而第一反編譯程序碼(例如為新版應用程序封裝檔的反編譯程序碼)改變為依序呼叫第一函數、第四函數及第三函數時,改版程序異動比對及分類模塊130會將此種關于一函數呼叫流程異動的程序異動類型分類為函數呼叫流程異動類型。
于另一例中,當第二反編譯程序碼(例如為舊版應用程序封裝檔的反編譯程序碼)中是先依序呼叫一第一函數、第二函數與第三函數,而第一反編譯程序碼(例如為新版應用程序封裝檔的反編譯程序碼)改變為依序呼叫第一函數、第四函數及第三函數時,其中,第四函數是為程序設計者重新打包(packaging)第二函數而得的情況下,改版程序異動比對及分類模塊130也將此種關于一函數呼叫流程異動的程序異動類型分類為函數呼叫流程異動類型。
于一實施例中,改版程序異動比對及分類模塊130可分析第一反編譯程序碼與一第二反編譯程序碼的多個相異程序區段,且這些相異程序區段異動類型可分別被定義為一參數值異動類型、一單一函數的呼叫異動類型或一函數呼叫流程異動類型三者至少其中之一。
于步驟S230中,改版程序異動比對及分類模塊130更用以載入一異動類型與規則對照表300,并選取異動類型與規則對照表300中的對應程序異動類型的至少一檢測規則。于一實施例中,此至少一檢測規則還包含一第一規則、一第二規則及一第三規則,且依據異動類型與規則對照表,可將程序異動類型對應至該第一規則、該第二規則或該第三規則三者至少其中之一。借此,改版程序異動比對及分類模塊130可選取對應程序異動類型的第一規則、第二規則或第三規則三者至少其中之一。
于一實施例中,如圖3所示,當相異程序區段的程序異動類型包含函數呼 叫流程異動類型時,改版程序異動比對及分類模塊130依據異動類型與規則對照表300選取第三規則。
于一實施例中,當相異程序區段的程序異動類型包含單一函數的呼叫異動類型時,改版程序異動比對及分類模塊130依據異動類型與規則對照表300選取第二規則。
于一實施例中,當相異程序區段的程序異動類型同時包含單一函數的呼叫異動類型及函數呼叫流程異動類型時,改版程序異動比對及分類模塊130依據異動類型與規則對照表300選取第二規則及第三規則。
于一實施例中,當相異程序區段的程序異動類型同時包含參數值異動類型及函數呼叫流程異動類型時,改版程序異動比對及分類模塊130依據異動類型與規則對照表300選取第一規則及第三規則。
由此可知,改版程序異動比對及分類模塊130可選取對應程序異動類型的第一規則、第二規則或第三規則三者至少其中之一。另外,依據異動類型與規則對照表300,其他程序異動類型與檢測規則的對應方式亦以此類推,此處不再贅述之。
然,本領域具通常知識者應可理解,本案發明并不限于異動類型與規則對照表300中所述的配置或對應方式,亦可基于實際實施方式,以調整異動類型與規則對照表300中的程序異動類型與檢測規則的對應方式。另一方面,異動類型與規則對照表300可使用者事先設定并儲存于儲存裝置180的一數據庫中。
此外,關于檢測規則的細部內容,例如第一規則、第二規則及第三規則的相關技術特征,將于圖4的對應說明書段落中詳述之。
于步驟S240中,資安檢測模塊150用以依據至少一檢測規則選擇性地更新或建立一數據流程,并依據數據流程確認第一反編譯程序碼的一檢測范圍。
于一實施例中,改版程序異動比對及分類模塊130于步驟S230中所選取的至少一檢測規則,資安檢測模塊150可判斷是否需要更新或建立數據流程。舉例而言,當一更動后的參數值傳到未被更動的一特定函數時,將會改變此特定函數的運算結果;因此,當資安檢測模塊150判斷第一反編譯程序碼中的相異程序區段會影響到其他程序區段的數據流時,資安檢測模塊150會更新數據流程。于一實施例中,當資安檢測模塊150判斷第一反編譯程序碼中具有新增 的參數,資安檢測模塊150會依據此新增的參數建立數據流程。
于步驟S250中,資安檢測模塊150更用以檢測此檢測范圍,以產生一安全性檢測結果。于一實施例中,資安檢測模塊150可依據數據流程所確認的第一反編譯程序碼的檢測范圍進行檢測,例如檢測某一參數及與其相關的參數與函數的范圍,以產生安全性檢測結果。于一實施例中,此安全性檢測結果可以被顯示于一使用者介面中(未繪示),例如,安全性檢測結果可用以表示新版應用程序封裝檔中被更動的加密設置參數,借此讓使用者得知新版應用程序封裝檔中的加密方式由安全性較高的傳輸層安全性(TLS)加密方式被更動為安全性較低的安全通訊端層(SSL)加密方式。于一實施例中,報表模塊170用以依據安全性檢測結果產生一報表。
此外,于一實施例中,上述檢測方法200可被實施為一計算機程序,儲存于非揮發性計算機可讀取記錄媒體,且此非揮發性計算機可讀取記錄媒體用以執行檢測系統100中的檢測方法200。
接著,請一并參照圖1與圖4,圖4根據本發明的一實施例繪示一種檢測方法400的流程圖。為了方便說明,圖1所示的檢測系統100的操作會與檢測方法400一并說明。圖4中的步驟S410、S420、S430、S450分別與圖2中的步驟S210、S220、S230、S250相同,故以下說明書內容不再針對這些步驟詳細說明。
于步驟S430中,改版程序異動比對及分類模塊130載入一異動類型與規則對照表300,并選取異動類型與規則對照表300中的對應程序異動類型的至少一檢測規則。于一實施例中,至少一檢測規則包含一第一規則、一第二規則及一第三規則,且改版程序異動比對及分類模塊130用以選取對應程序異動類型的第一規則、第二規則或第三規則三者至少其中之一。
例如,當程序異動類型為函數呼叫流程異動時,改版程序異動比對及分類模塊130依據異動類型與規則對照表300選取執行第三規則。例如,當程序異動類型為單一函數的呼叫異動時,改版程序異動比對及分類模塊130依據異動類型與規則對照表300選取執行第二規則。例如,當程序異動類型為參數值異動時,改版程序異動比對及分類模塊130依據異動類型與規則對照表300選取執行第一規則。
接著,檢測系統100依據改版程序異動比對及分類模塊130所選取的第一 規則、第二規則或第三規則三者至少其中之一,以選擇性地執行對應的步驟S442、S444及/或S446。更具體而言,于一實施例中,此至少一檢測規則還包含第一規則、第二規則及第三規則,且檢測系統100可依據于步驟S420中所判斷出的程序異動類型以找到對應的檢測規則。例如,參數值異動類型對應至第一規則,單一函數的呼叫異動類型對應至第二規則,函數呼叫流程異動類型對應至該第三規則。
于一實施例中,當程序異動類型被分類為參數值異動類型時,改版程序異動比對及分類模塊130選取第一規則,且檢測系統100執行步驟S442,使檢測系統100依據第一規則產生一檢測范圍。
于一實施例中,當程序異動類型被分類為單一函數的呼叫異動類型時,改版程序異動比對及分類模塊130選取第二規則,且檢測系統100執行步驟S444,使檢測系統100依據第二規則產生一檢測范圍。
于一實施例中,當程序異動類型被分類為函數呼叫流程異動類型時,改版程序異動比對及分類模塊130選取第三規則,且檢測系統100執行步驟S446,使檢測系統100依據第三規則產生一檢測范圍。
于一實施例中,當程序異動類型被分類為同時包含參數值異動類型及單一函數的呼叫異動類型時,改版程序異動比對及分類模塊130選取第一規則及第二規則,且檢測系統100同時或先后執行步驟S442及步驟S444。
接著,以下進一步說明第一規則、第二規則及第三規則決定檢測范圍的方法。然,本領域具通常知識者應可理解決定檢測范圍的方法并不僅限于以下實施例。
于一實施例中,當改版程序異動比對及分類模塊130選取第一規則時,進入步驟S442。
于步驟S442中,資安檢測模塊150更新或建立數據流程(data flow),并依據數據流程確認第一反編譯程序碼的檢測范圍。
例如,當程序異動類型包含參數值異動類型時,改版程序異動比對及分類模塊130選取第一規則。通過第一規則檢測第一反編譯程序碼中所有相關于參數值異動部分的程序區段,以更新(或建立)相關于參數值異動的數據流程,并將這些異動部分的程序區段視為檢測范圍。
由此可知,通過選取第一規則,資安檢測模塊150可追蹤異動部分的程序 區段的數據流程,以檢測此檢測范圍中,程序碼沒有改變,而參數值或數據卻有改變的程序區段,借此可進一步追溯其他有用到此異動后的參數值的函數或其他程序區段。
于一實施例中,當改版程序異動比對及分類模塊130選取第二規則時,進入步驟S444。
于步驟S444中,改版程序異動比對及分類模塊130依據函數呼叫流程檢測第一反編譯程序碼被更動的單一函數部分,并將被更動的單一函數部分視為檢測范圍。
例如,程序異動類型包含單一函數的呼叫異動類型時(例如異動部分為新增或刪除呼叫某一特定函數),改版程序異動比對及分類模塊130選取第二規則。于一實施例中,檢測系統100通過第二規則可檢測出第一反編譯程序碼中的此特定函數(例如為系統呼叫,system call)的異動狀態,并依據此特定函數決定檢測范圍。
于一些實施例中,由于單一函數的呼叫異動類型不影響數據流程的改變,因此第二規則可不涉及檢查數據流程更動的部分。
于一實施例中,當改版程序異動比對及分類模塊130選取第三規則時,進入步驟S446。
于步驟S446中,資安檢測模塊150更新(或建立)數據流程,再依據函數呼叫流程及數據流程確認第一反編譯程序碼的檢測范圍。
例如,程序異動類型包含函數呼叫流程異動類型時,改版程序異動比對及分類模塊130選取第三規則。由于函數呼叫流程可能造成程序控制流及/或數據流程的改變,故通過第三規則可檢測第一反編譯程序碼中所有與函數呼叫流程異動及數據異動相關的程序區段。例如,追蹤多個函數彼此間呼叫的控制順序,及追蹤多個函數彼此傳遞的參數或數據。借此,檢測系統100可基于第三規則以更新(或建立)第一反編譯程序碼的函數呼叫流程及數據流程,并將與函數呼叫流程及數據流程異動相關的程序區段視為檢測范圍。
于步驟S450中,資安檢測模塊150用以檢測此檢測范圍,以產生一安全性檢測結果。由于步驟S450與圖2中的步驟S250相同,故此處不再贅述之。
于步驟S460中,儲存安全性檢測結果于儲存裝置180中。
借此,當應用程序更新時,資安檢測模塊150可僅透過檢測第一反編譯程 序碼(例如為新版應用程序封裝檔的反編譯程序碼)的一檢測范圍,即可針對新版應用程序所改變的部分進行檢測,并產生安全性檢測結果;換句話說,檢測系統100無須將整個第一反編譯程序碼都進行檢測,故本案可達到節省檢測時間與人力的效果。
通過上述技術方案,可檢測出改版前應用程序與新版應用程序的相異程序區段,故只需檢測此相異程序區段及與此相異程序區段相關的程序部分,即可取得此新版應用程序的安全性檢測結果,換言之,本案的檢測系統無需檢測整體新版的應用程序,因此,本案避免了檢測資源的重復耗用,且提供了一種更有效率的檢測系統及其方法。
雖然本發明已以較佳實施例揭露如上,然其并非用以限定本發明,任何熟悉此項技藝者,在不脫離本發明的精神和范圍內,當可做些許更動與潤飾,因此本發明的保護范圍當視所附的權利要求書所界定的范圍為準。