安卓應(yīng)用的口令處理路徑識別方法及使用該方法的裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及安卓應(yīng)用程序安全檢測技術(shù)領(lǐng)域,更具體地說,涉及一種安卓應(yīng)用的口令處理路徑識別方法及使用該方法的裝置。
【背景技術(shù)】
[0002]通常,在對安卓應(yīng)用用戶名、口令信息處理的分析中,主要依賴網(wǎng)絡(luò)數(shù)據(jù)抓包的人工分析手段。人工分析手段的檢測分析工作量大,還容易產(chǎn)生檢測遺漏,效果不理想。伴隨著反編譯和靜態(tài)分析技術(shù)的發(fā)展,反編譯和靜態(tài)分析技術(shù)開始運(yùn)用于安卓應(yīng)用代碼邏輯分析之中。
[0003]目前,常見的識別安卓應(yīng)用用戶口令處理方法主要為前向識別方法。
[0004]該前向識別方法包括以下幾個(gè)步驟:
[0005]—、定位用戶密碼輸入框的位置,確定存儲(chǔ)用戶輸入密碼的關(guān)鍵變量;
[0006]二、按照傳統(tǒng)的控制流分析技術(shù),找尋到所有可能的函數(shù)調(diào)用路徑;
[0007]三、對每一條路徑進(jìn)行分析,確定哪些路徑包含了口令處理機(jī)制;
[0008]四、判定該安卓應(yīng)用的口令處理機(jī)制是否存在安全隱患。
[0009]盡管前向識別方法能夠快速準(zhǔn)確的定位到密碼輸入框,但是,該方法無法準(zhǔn)確有效地識別口令處理路徑,該方法的誤報(bào)率高,且該方法的口令處理路徑分析及路徑排查環(huán)節(jié)需消耗大量人力。
【發(fā)明內(nèi)容】
[0010]本發(fā)明要解決的技術(shù)問題在于針對現(xiàn)有技術(shù)的上述缺陷,提供一種安卓應(yīng)用的口令處理路徑識別方法及使用該方法的裝置。
[0011]本發(fā)明解決其技術(shù)問題所采用的技術(shù)方案是:構(gòu)造一種安卓應(yīng)用的口令處理路徑識別方法,包括以下步驟;
[0012]S1、對待測安卓應(yīng)用進(jìn)行反匯編,以還原編譯該款安卓應(yīng)用的Smali代碼;
[0013]S2、從該款安卓應(yīng)用的Smali代碼中查找該款安卓應(yīng)用的口令輸入框的標(biāo)識符以及確定存在口令安全隱患的多個(gè)API在Smali代碼中的位置;
[0014]S3、將各API的位置分別作為與該API對應(yīng)的口令處理路徑的起點(diǎn),將存儲(chǔ)口令輸入框標(biāo)識符的指令寄存器的位置作為與該API對應(yīng)的口令處理路徑的終點(diǎn),依照設(shè)定的遍歷規(guī)則對涉及該款安卓應(yīng)用口令處理的特定指令的執(zhí)行路徑進(jìn)行反向遍歷,在反向遍歷中繪制特定指令的執(zhí)行路徑,并將所繪制的特定指令執(zhí)行路徑作為口令處理路徑進(jìn)行輸出顯不O
[0015]在本發(fā)明上述安卓應(yīng)用的口令處理路徑識別方法中,所述步驟S2中所述確定存在口令安全隱患的多個(gè)API在Smali代碼中的位置的步驟包括:
[0016]對名稱分別為SQLite、SharedPreference、File 及 ContentProvider 的 API 在該款安卓應(yīng)用的Smali代碼中的位置進(jìn)行掃描,并記錄各個(gè)API在該款安卓應(yīng)用的Smali代碼中的位置信息。
[0017]在本發(fā)明上述安卓應(yīng)用的口令處理路徑識別方法中,所述步驟S3具體包括如下步驟:
[0018]S31、將各個(gè)API的位置分別作為執(zhí)行與該API對應(yīng)的口令處理路徑反向遍歷工作的起點(diǎn),從起點(diǎn)位置查找存儲(chǔ)任意一條特定指令的指令寄存器,讀取該指令寄存器中的該條特定指令的代碼,從該條特定指令的代碼中截取涉及用戶口令處理的一段切片代碼;
[0019]S32、判斷該段切片代碼中是否包含有口令輸入框的標(biāo)識符,并記錄口令輸入框標(biāo)識符判斷結(jié)果;如該段切片代碼中未包含口令輸入框的標(biāo)識符,則對該條特定指令進(jìn)行解析,及判斷該款安卓應(yīng)用指令的執(zhí)行流程圖中是否存在與該條特定指令滿足定義使用鏈條件的另一條特定指令;
[0020]S33、如判斷該款安卓應(yīng)用的指令執(zhí)行流程圖中存在與該條特定指令滿足定義使用鏈條件的另一條特定指令,則對存儲(chǔ)另一條特定指令的另一個(gè)指令寄存器進(jìn)行訪問,讀取另一條特定指令的代碼,從另一條特定指令代碼中截取涉及口令處理的一段切片代碼,之后返回上一步驟S32 ;否則,執(zhí)行下一步驟S34 ;
[0021]S34、將該API位置作為與該API對應(yīng)的口令處理路徑反向遍歷工作的起點(diǎn),將存儲(chǔ)有該條特定指令的指令寄存器的位置作為與該API對應(yīng)的口令處理路徑反向遍歷的終點(diǎn),繪制口令處理路徑。
[0022]在本發(fā)明上述安卓應(yīng)用的口令處理路徑識別方法中,所述步驟S32中對該條特定指令進(jìn)行解析的步驟包括:
[0023]解析該條特定指令,將解析所得的第一函數(shù)名稱、第一參數(shù)、第一參數(shù)類型、第一返回值及第一返回值類型作為第一指令解析參考信息。
[0024]在本發(fā)明上述安卓應(yīng)用的口令處理路徑識別方法中,所述步驟S32還包括:判斷該段切片代碼中是否包含有用于表示口令處理路徑沿反向出現(xiàn)分支及指向其它API的分支關(guān)鍵詞,及在該段切片代碼中出現(xiàn)該類分支關(guān)鍵詞時(shí),記錄該類分支關(guān)鍵詞,將該類分支關(guān)鍵詞所指向的API作為執(zhí)行本次口令處理路徑反向遍歷工作的續(xù)接位置,并在該續(xù)接位置繼續(xù)執(zhí)行本次口令處理路徑反向遍歷工作;其中,該類分支關(guān)鍵詞包括if、switch。
[0025]在本發(fā)明上述安卓應(yīng)用的口令處理路徑識別方法中,所述步驟S33還包括:
[0026]對另一條特定指令進(jìn)行解析,得到包含第二函數(shù)名稱、第二參數(shù)類型、第二返回值及第二返回值類型的第二指令解析參考信息,將第二指令解析參考信息與第一指令解析參考信息進(jìn)行比較;如第二指令解析參考信息與第一指令參考信息完全相同,則將與第一指令參考信息對應(yīng)的特定指令的執(zhí)行路徑走向作為另一條特定指令的執(zhí)行路徑走向的判斷依據(jù)。
[0027]在本發(fā)明上述安卓應(yīng)用的口令處理路徑識別方法中,在所述步驟S34之后還包括如下步驟:
[0028]S35、讀取作為口令處理路徑反向遍歷終點(diǎn)的該指令寄存器中的該條特定指令,從該條特定指令代碼中截取涉及用戶口令處理的一段切片代碼,判斷該段切片代碼是否包含有口令輸入框的標(biāo)識符;如該條切片代碼包含有口令輸入框的標(biāo)識符,則將所繪制的該款安卓應(yīng)用的口令處理路徑進(jìn)行輸出顯示;否則,停止以該API作為起點(diǎn)的口令處理路徑反向遍歷工作。
[0029]本發(fā)明還構(gòu)造一種安卓應(yīng)用的口令處理路徑識別裝置,所述裝置包括反編譯模塊、API定位模塊、口令輸入框探測模塊、口令處理路徑識別模塊、口令處理路徑繪制模塊及顯示模塊;
[0030]所述反編譯模塊用于對待測安卓應(yīng)用進(jìn)行反匯編,以還原用于編譯該款安卓應(yīng)用的Smali代碼;
[0031]所述API定位模塊用于確定存在口令安全隱患的多個(gè)API在該Smali代碼中的位置;
[0032]所述口令輸入框探測模塊用于從該Smali代碼中查找口令輸入框的標(biāo)識符;
[0033]所述口令處理路徑識別模塊用于將各個(gè)API的位置分別作為與該API對應(yīng)的口令處理路徑的起點(diǎn),將存儲(chǔ)口令輸入框標(biāo)識符的指令寄存器的位置作為該API對應(yīng)的口令處理路徑的終點(diǎn),依著設(shè)定的口令處理路徑反向遍歷規(guī)則對涉及該款安卓應(yīng)用口令處理的特定指令執(zhí)行路徑進(jìn)行反向遍歷;
[0034]所述口令處理路徑繪制模塊用于在該反向遍歷過程中繪制特定指令執(zhí)行路徑,并將所繪制的特定指令執(zhí)行路徑作為該款安卓應(yīng)用的口令處理路徑輸出到所述顯示模塊;
[0035]所述顯示模塊用于接收及顯示該款安卓應(yīng)用的口令處理路徑。
[0036]在本發(fā)明上述安卓應(yīng)用的口令處理路徑識別裝置中,所述裝置還包括指令解析模塊,用于對在前的特定指令進(jìn)行解析,并將解析的函數(shù)、參數(shù)類型、返回值及返回值類型作為用于判斷在后的特定指令的執(zhí)行路徑走向的指令解析參考信息。
[0037]在本發(fā)明上述安卓應(yīng)用的口令處理路徑識別裝置中,所述口令處理路徑識別模塊還用于從每條特定指令的代碼中截取涉及用戶口令處理的一段切片代碼,判斷該段切片代碼中是否包含有用于表示口令處理路徑的反向出現(xiàn)分支并指向其它API位置的分支關(guān)鍵詞,及在該段切片代碼中出現(xiàn)該類分支關(guān)鍵詞時(shí),記錄該類分支關(guān)鍵詞,將該類分支關(guān)鍵詞指向的API作為本次口令處理路徑反向遍歷的續(xù)接位置,并在該續(xù)接位置繼續(xù)執(zhí)行口令處理路徑反向遍歷工作;
[0038]所述口令處理路徑識別模塊還用于判斷該段切片代碼是否包含有口令輸入框的標(biāo)識符;如該段切片代碼包含有口令輸入框的標(biāo)識符,則控制所述口令處理路徑繪制模塊將所繪制的特定指令執(zhí)行路徑作為該款安卓應(yīng)用的口令處理路徑輸出到所述顯示模塊上進(jìn)行顯示;否則,停止本次口令處理路徑反向遍歷工作。
[0039]實(shí)施本發(fā)明安卓應(yīng)用的口令處理路徑識別方法及使用該方法的裝置,可實(shí)現(xiàn)以下有益效果:
[0040]1、本發(fā)明采用了安卓應(yīng)用口令處理路徑的反向識別機(jī)制,將待測安卓應(yīng)用中存在口令安全隱患的多個(gè)API的位置分別作為與該API對應(yīng)的口令處理路徑的起點(diǎn),將存儲(chǔ)口令輸入框標(biāo)識符的指令寄存器的位置作為與該API對應(yīng)的口令處理路徑的終點(diǎn),將該款安卓應(yīng)用的各條特定指令之間存在的定義使用鏈關(guān)系作為口令處理路徑反向識別規(guī)則,對待測安卓應(yīng)用的口令處理路徑進(jìn)行反向識別,并在口令路徑反向識別過程中繪制出口令處理路徑,實(shí)現(xiàn)了安卓應(yīng)用口令處理路徑的自動(dòng)化識別,節(jié)省了大量的人力資源。
[0041]2