一種測試Android應(yīng)用程序的方法和裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及軟件測試,并且尤其涉及一種測試Android應(yīng)用程序的方法和裝置。
【背景技術(shù)】
[0002]在應(yīng)用程序中,通常會使用標(biāo)準(zhǔn)的密碼算法和協(xié)議來保護(hù)數(shù)據(jù)。但是,在應(yīng)用程序的開發(fā)過程中可能會錯誤地設(shè)置參數(shù)(例如,密鑰長度、密鑰內(nèi)容)和/或使用步驟(例如,是否使用證書、是否校驗證書鏈),使得安全性得不到保證。為此,需要對應(yīng)用程序進(jìn)行測試來避免這樣的問題。
[0003]現(xiàn)有技術(shù)未公開針對上述問題的解決方案?,F(xiàn)有技術(shù)中的靜態(tài)自動化測試方法存在的問題是無法獲取運行時參數(shù),而運行時的參數(shù)對于應(yīng)用程序的涉及密碼算法與協(xié)議使用的部分的分析是至關(guān)重要的?,F(xiàn)有技術(shù)中的動態(tài)測試方法往往需要修改應(yīng)用程序或者添加斷點來調(diào)試,而這樣做將降低程序監(jiān)控的透明性和穩(wěn)定性,例如,修改應(yīng)用程序可能導(dǎo)致應(yīng)用程序運行錯誤,也會破壞應(yīng)用程序的簽名機(jī)制。
[0004]另一方面,現(xiàn)有技術(shù)的測試方法僅僅針對通用性的代碼問題,而無法正對應(yīng)用程序中的特定命令調(diào)用進(jìn)行測試和分析。例如,無法對應(yīng)用程序的涉及密碼算法與協(xié)議使用的部分進(jìn)行特定性的安全分析(例如,證書是否缺失或者被篡改),從而無法進(jìn)行測試并發(fā)現(xiàn)應(yīng)用程序中的錯誤的密碼算法和協(xié)議使用。
[0005]為此,本發(fā)明提出一種測試Android應(yīng)用程序的方法和裝置。
【發(fā)明內(nèi)容】
[0006]根據(jù)本發(fā)明的一個目的,公開一種測試Android應(yīng)用程序的方法,包括以下步驟: A:定位應(yīng)用程序的命令調(diào)用,
B:監(jiān)控所述命令調(diào)用并獲取運行時數(shù)據(jù),
C:對獲取的運行時數(shù)據(jù)進(jìn)行分析。
[0007]在一個技術(shù)方案中,步驟A包括:
對應(yīng)用程序進(jìn)行靜態(tài)代碼反編譯,獲取類描述符;
根據(jù)類描述符,定位命令調(diào)用。
[0008]在一個技術(shù)方案中,步驟A包括:
定位與密碼算法和/或協(xié)議使用相關(guān)的命令調(diào)用。
[0009]在一個技術(shù)方案中,步驟B包括:
利用被附加到Dalvik虛擬機(jī)的Zygote進(jìn)程上的監(jiān)控模塊來監(jiān)控所述命令調(diào)用并獲取運行時數(shù)據(jù)。
[0010]在一個技術(shù)方案中,所述運行時數(shù)據(jù)是與密碼算法和/或協(xié)議使用相關(guān)的參數(shù)。
[0011]在一個技術(shù)方案中,在步驟A中,在應(yīng)用程序的二進(jìn)制代碼中定位其命令調(diào)用。
[0012]在一個技術(shù)方案中,所述命令調(diào)用是方法調(diào)用或者指令調(diào)用。
[0013]根據(jù)本發(fā)明的另一個目的,公開一種測試Android應(yīng)用程序的裝置,包括: 定位模塊,用于定位應(yīng)用程序的命令調(diào)用,
監(jiān)控模塊,用于監(jiān)控所述命令調(diào)用并獲取運行時數(shù)據(jù),
分析模塊,用于對獲取的運行時數(shù)據(jù)進(jìn)行分析。
[0014]在一個技術(shù)方案中,定位模塊被配置成:
對應(yīng)用程序進(jìn)行靜態(tài)代碼反編譯,獲取類描述符;
根據(jù)類描述符,定位命令調(diào)用。
[0015]在一個技術(shù)方案中,定位模塊被配置成:
定位與密碼算法和/或協(xié)議使用相關(guān)的命令調(diào)用。
[0016]在一個技術(shù)方案中,所述監(jiān)控模塊被附加到Dalvik虛擬機(jī)的Zygote進(jìn)程上,由此來監(jiān)控所述命令調(diào)用并獲取運行時數(shù)據(jù)。
[0017]在一個技術(shù)方案中,所述運行時數(shù)據(jù)是與密碼算法和/或協(xié)議使用相關(guān)的參數(shù)。
[0018]在一個技術(shù)方案中,所述定位模塊在應(yīng)用程序的二進(jìn)制代碼中定位其命令調(diào)用。
[0019]本發(fā)明對待測試程序進(jìn)行動態(tài)監(jiān)控,獲取其密碼算法和協(xié)議使用的操作內(nèi)容。本發(fā)明的一個優(yōu)勢是在程序運行期間能夠主動檢查代碼運行的機(jī)制、模式、問題以及收集代碼的各種運行信息,從而可以分階段執(zhí)行匯總分析,根據(jù)指定的標(biāo)準(zhǔn),獲得代碼質(zhì)量相關(guān)判斷結(jié)果。特別地,本發(fā)明可以直接對程序的二進(jìn)制代碼進(jìn)行分析,無需依賴于程序的源代碼,并且在程序運行的時候,本發(fā)明的技術(shù)方案動態(tài)地對內(nèi)存中加載的程序代碼進(jìn)行分析,找到插入指令的位置,并加入特定指令進(jìn)行程序監(jiān)控。
【附圖說明】
[0020]在參照附圖閱讀了本發(fā)明的【具體實施方式】以后,本領(lǐng)域技術(shù)人員將會更清楚地了解本發(fā)明的各個方面。本領(lǐng)域技術(shù)人員應(yīng)當(dāng)理解的是,這些附圖僅僅用于配合【具體實施方式】說明本發(fā)明的技術(shù)方案,而并非意在對本發(fā)明的保護(hù)范圍構(gòu)成限制。
[0021]圖1是根據(jù)本發(fā)明實施例的測試Android應(yīng)用程序的方法的步驟示意圖。
[0022]圖2是根據(jù)本發(fā)明實施例的測試Android應(yīng)用程序的裝置的結(jié)構(gòu)示意圖。
【具體實施方式】
[0023]下面參照附圖,對本發(fā)明的【具體實施方式】作進(jìn)一步的詳細(xì)描述。在下面的描述中,為了解釋的目的,陳述許多具體細(xì)節(jié)以便提供對實施例的一個或多個方面的透徹理解。然而,對于本領(lǐng)域技術(shù)人員可以顯而易見的是,可以這些具體細(xì)節(jié)的較少程度來實踐各實施例的一個或多個方面。因此下面的描述不被視為局限性的,而是通過所附權(quán)利要求來限定保護(hù)范圍。
[0024]圖1是根據(jù)本發(fā)明實施例的測試Android應(yīng)用程序的方法的步驟示意圖。如圖1所示,該方法包括以下步驟:
A:定位應(yīng)用程序的命令調(diào)用,
B:監(jiān)控所述命令調(diào)用并獲取運行時數(shù)據(jù),
C:對獲取的運行時數(shù)據(jù)進(jìn)行分析。
[0025]在步驟A中,可以定位應(yīng)用程序的特定命令調(diào)用,例如與密碼算法和/或協(xié)議使用相關(guān)的命令調(diào)用。命令調(diào)用可以是該應(yīng)用程序的方法調(diào)用、接口調(diào)用或更細(xì)粒度的指令調(diào)用。在一個示例中,對應(yīng)用程序進(jìn)行靜態(tài)代碼反編譯,獲取APK程序的類描述符;根據(jù)類描述符,對方法調(diào)用進(jìn)行篩選,過濾出特定的方法調(diào)用。
[0026]在步驟B中,利用被附加到Dalvik虛擬機(jī)(Dalvik VM)的Zygote進(jìn)程上的監(jiān)控模塊來監(jiān)控所述命令調(diào)用并獲取運行時數(shù)據(jù)。
[0027]在一個示例中,在應(yīng)用程序的二進(jìn)制代碼中定位其命令調(diào)用。