本發(fā)明涉及信息安全技術(shù)領(lǐng)域,特別涉及一種提取Android系統(tǒng)QQ賬號的方法。
背景技術(shù):
隨著信息化技術(shù)的不斷發(fā)展與進步,眾所周知,Android設備已經(jīng)成為人們生活中不可替代:不可或缺的一個工具。Android設備也因此得到飛速發(fā)展,現(xiàn)已不僅僅是通話工具那么簡單,他依然成為生活的一部分,Android設備的各種各樣的功能也層出不窮,覆蓋了生活中的方方面面。但Android設備在獲取豐富資源:處理大量數(shù)據(jù)的同時面臨著被破壞的風險也越來越大,例如恢復出廠設置,誤刷機:中病毒等情況均會造成手機數(shù)據(jù)丟失,因此還原Android設備的數(shù)據(jù)顯得尤為重要。
QQ通訊類數(shù)據(jù)提取是電子物證的重要組成部分,由于QQ賬號實現(xiàn)第三方登錄是一種非常流行和便捷的方式,QQ賬號在很多應用之中都可以找到,因此基于QQ賬戶的提取是具有重要意義的。目前市面上的取證系統(tǒng)都是依靠root之后通過讀取數(shù)據(jù)庫的方式進行數(shù)據(jù)提取,這種提取方式在Android系統(tǒng)升級安全等級升高之后將會變得越發(fā)困難,同時修改權(quán)限也需要耗費一定的時間。
技術(shù)實現(xiàn)要素:
本發(fā)明針對現(xiàn)有技術(shù)的缺陷,提供了一種提取Android系統(tǒng)QQ賬號的方法,能有效的解決上述現(xiàn)有技術(shù)存在的問題。
一種提取Android系統(tǒng)QQ賬號的方法,包括以下步驟:
S1:提取QQ賬戶數(shù)據(jù)準備;以下為詳細步驟:
S1.1:使用系統(tǒng)API判斷sd卡是否掛載,當sd卡已經(jīng)掛載代表sd卡存在,執(zhí)行S1.2,否則表示該智能移動終端設備不存在sd卡,否則執(zhí)行結(jié)束解析執(zhí)行S5;
S1.2:使用系統(tǒng)API判斷sd卡的具體路徑,并記錄為sd_path;
S1.3:創(chuàng)建集合s_pkg,將騰訊QQ以及它的衍生產(chǎn)品的包名以字符串的形式存入s_pkg中;
S1.4:創(chuàng)建集合pkg_all,使用系統(tǒng)API獲取Android設備已經(jīng)加載的所有應用的包名信息,并將其以字符串的形式保存到pkg_all中;
S1.5:構(gòu)建集合pkg_exits,用于存儲Android智能設備中已經(jīng)安裝的QQ包名字符串信息;
S1.6:遍歷pkg_all,當遍歷存在結(jié)果時,記錄為temp_pkg執(zhí)行S1.7;否則表示遍歷結(jié)束,執(zhí)行S1.10;
S1.7:循環(huán)遍歷s_pkg,當遍歷結(jié)果存在時,記錄結(jié)果為pkg_equal,并執(zhí)行S1.8,否則繼續(xù)遍歷執(zhí)行S1.6;
S1.8:當temp_pkg與pkg_equal字符串完全匹配的時候,表示該類型QQ聊天產(chǎn)品存在,同時將temp_pkg加入pkg_exits中;當不匹配的時候執(zhí)行步驟S1.7;
S1.9:移除s_pkg中的pkg_equal選項,判定s_pkg中是否還存在數(shù)據(jù),當存在時執(zhí)行步驟S1.6;當不存在時直接執(zhí)行步驟S1.10;
S1.10:判定pkg_exits中是否存在數(shù)據(jù),當存在時執(zhí)行S2,否則表示該智能Android設備中不包含QQ通訊應用,執(zhí)行S5結(jié)束解析;
S2:提取包含QQ賬戶信息的文件,構(gòu)建字典Map用于存儲sd卡中包含QQ賬號的文件信息;以下為詳細步驟:
S2.1:根據(jù)路徑sd_path構(gòu)建關(guān)于sd卡的文件流,同時獲取該文件流下面的所有文件記錄sd_files;
S2.2:遍歷sd_files,當遍歷結(jié)果存在時,記錄結(jié)果為file_sigle,并執(zhí)行S2.3,當不存在表示sd卡中不存在騰訊應用sd緩存數(shù)據(jù)目錄,結(jié)束解析,執(zhí)行S5;
S2.3:獲取file_sigle的文件名,記錄為file_sigle_name,使用字符串tencent與file_sigle_name匹配,當匹配時,執(zhí)行S2.4,否則執(zhí)行S2.2;
S2.4:判斷file_sigle是否是一個文件夾,當是文件夾時,結(jié)束遍歷,執(zhí)行步驟S2.5,否則執(zhí)行S2.2繼續(xù)遍歷;
S2.5:獲取file_sigle目錄下的所有文件,記錄為file_figle_files;
S2.6:判斷file_figle_files是否存在數(shù)據(jù),執(zhí)行S2.7,否則表示不存在數(shù)據(jù),執(zhí)行S5;
S2.7:對file_figle_files執(zhí)行遍歷,當結(jié)果存在時,記錄遍歷文件file_figle_files_file,并執(zhí)行S2.8,否則執(zhí)行S5結(jié)束解析;
S2.8:判定file_figle_files_file文件的文件名,并記錄為f_f_fs_fn,將f_f_fs_fn與字符串msflogs做等值比較,當相等時,執(zhí)行S2.9,否則執(zhí)行S2.7;
S2.9:判定f_f_fs_fn是否為目錄,當是時,跳出循環(huán)執(zhí)行S2.10,否則執(zhí)行S2.7;
S2.10:獲取file_figle_files_file目錄下面所有的文件,并記錄f_f_fs_f_fs;
S2.11:對f_f_fs_f_fs執(zhí)行遍歷,當遍歷結(jié)果存在時,記錄結(jié)果f_f_fs_f_fs_f, 執(zhí)行步驟2.12,否則執(zhí)行S5;
S2.12:獲取文件f_f_fs_f_fs_f的文件名,并記錄為f_f_fs_f_fs_f_name同時與字符串com做等值比較,當相等時,執(zhí)行步驟S2.13,否則執(zhí)行S2.11;
S2.13:判定f_f_fs_f_fs_f是否為目錄,當是目錄時執(zhí)行S2.14,否則執(zhí)行S2.11;
S2.14:獲取f_f_fs_f_fs_f目錄下面所有的文件,并記錄f_f_fs_f_fs_f_fs;
S2.15:對f_f_fs_f_fs_f_fs執(zhí)行遍歷,當遍歷結(jié)果存在時,記錄結(jié)果f_f_fs_f_fs_f_fs_f,執(zhí)行步驟S2.16,否則執(zhí)行S5;
S2.16:獲取文件f_f_fs_f_fs_f_fs_f的文件名,并記錄為f_f_fs_f_fs_f_fs_f_name同時與字符串tencent做等值比較,當相等時,執(zhí)行步驟S2.17,否則執(zhí)行S2.15;
S2.17:判定f_f_fs_f_fs_f是否為目錄,當是目錄時執(zhí)行S2.18,否則執(zhí)行S2.15;
S2.18:f_f_fs_f_fs_f目錄下面的文件是騰訊QQ及其衍生通訊產(chǎn)品存放日志數(shù)據(jù)的地方,獲取該目錄下的文件,記錄為father_files;
S2.19:對father_files執(zhí)行遍歷,當遍歷結(jié)果存在時,記錄文件為father_file,執(zhí)行S2.20,否則結(jié)束解析執(zhí)行S3;
S2.20:判斷father_file是否為目錄,當是時執(zhí)行S2.21,否則執(zhí)行S2.19;
S2.21:獲取father_file的文件名記錄為father_file_name;
S2.21:構(gòu)建字典L_son,用于存儲有可能包含賬戶信息的文件名;
S2.22:獲取目錄father_file下面所有的文件,記錄為son_files;
S2.23:遍歷son_files,當遍歷結(jié)果存在時,記錄為son_file,否則,將 father_file_name作為鍵,將L_son作為值加入Map,并執(zhí)行S2.19;
S2.24:獲取son_file的文件名,記錄為son_file_name;
S2.25:判斷son_file_name根據(jù)正則式\\d{2}\\.\\d{2}\\.\\d{2}\\.\\d{2}\\.log進行文件篩選,當符合該正則式時,將son_file加入L_son,執(zhí)行S2.23;
S3:解析賬號數(shù)據(jù)文件;經(jīng)過S2的篩選,將所有可能包含QQ賬號的文件過濾,創(chuàng)建字典Map_account用于保存提取出來的數(shù)據(jù);
以下為S3的詳細步驟:
S3.1:遍歷Map,當數(shù)據(jù)存在時,獲取Map的值記錄為L_temp,獲取Map的鍵,記錄為pkg_name,然后執(zhí)行步驟S3.2,當結(jié)果不存在時執(zhí)行S4;
S3.2:創(chuàng)建集合L_account用來存儲每一種QQ聊天應用類型的賬戶;
S3.3:遍歷L_temp,當結(jié)果存在時記錄結(jié)果為L_temp_file,并執(zhí)行S3.4;當不存在數(shù)據(jù)時,將pkg_name作為key,L_account作為值,保存到Map_account,然后執(zhí)行S3.1;
S3.4:加載文件L_temp_file,按行讀取文件L_temp_file;當讀取內(nèi)容存在時,記錄為data,執(zhí)行S3.5:否則執(zhí)行S3.3;
S3.5:判斷data是否包含特定的字符,記錄特定字符charer,當不包含時執(zhí)行S3.3,否則執(zhí)行S3.6;特殊字符滿足以下需求,特殊字符檢測順序為qzone:MSF,當以上兩個字符都不滿足時記錄為other。
S3.6:根據(jù)正則式[1-9][0-9]{4,9},進行數(shù)據(jù)匹配,當匹配成功時,記錄為account,將account加入集合L_account,然后執(zhí)行S3.3;當沒有匹配到數(shù)據(jù)時直接執(zhí)行S3.3;
S4:賬戶信息展示;以下為詳細步驟:
S4.1:根據(jù)包名構(gòu)建字典M_p_a,該字典表示的是包名對應的實際應用名,比如移動QQ對應com.tencent.mobielqq,輕聊QQ對應com.tencent.qqlite;
S4.2:加載excel插件,構(gòu)建execl文件的頭信息,頭部信息包含應用名app_name,應用包名pkg_name,賬戶信息accout_name;
S4.3:遍歷Map_account,當數(shù)據(jù)存在時,記錄key為result_pkg,值為L_account。將result_pkg賦值給pkg_name。根據(jù)result_pkg從字典M_p_a獲取出該應用的實際應用名記錄為p_name,將p_name賦值給app_name,執(zhí)行S4.4,否則結(jié)束解析,執(zhí)行S5;
S4.4:遍歷L_account,當遍歷數(shù)據(jù)存在的時候記錄結(jié)果為account,并將account賦值給accout_name,當遍歷結(jié)果不存在時執(zhí)行S4.3;
S4.5:創(chuàng)建excel的一行單元格,將app_name,pkg_name,accout_name依次寫入,寫入完畢之后執(zhí)行S4.4;
S5:生成了excel表格,那么該表格就是該智能移動設備中的QQ賬號信息,否則代表沒有提取到QQ賬戶數(shù)據(jù)。
與現(xiàn)有技術(shù)相比本發(fā)明的優(yōu)點在于:不需要Root直接提取數(shù)據(jù),具有通用的可行性;不需要修改權(quán)限,直接針對sd卡進行解析,提取速度將大大提升,解析方法找數(shù)據(jù)效率高,數(shù)據(jù)展示針對數(shù)據(jù)取證,更加嚴格專業(yè)。
具體實施方式
為使本發(fā)明的目的:技術(shù)方案及優(yōu)點更加清楚明白,以下舉實施例,對本發(fā)明做進一步詳細說明。
S1:提取QQ賬戶數(shù)據(jù)準備;
QQ賬戶提取是解析騰訊應用在sd卡中特定的緩存文件進行分析,從而得出固定的提取算法,以解析文件的方式進行數(shù)據(jù)提取,在提取之前需要進行一些先覺條件判斷,只有滿足條件才能夠?qū)崿F(xiàn)QQ賬號的提取。
以下為S1的詳細步驟:
S1.1:使用系統(tǒng)API判斷sd卡是否掛載,當sd卡已經(jīng)掛載代表sd卡存在,執(zhí)行S1.2,否則表示該智能移動終端設備不存在sd卡,否則執(zhí)行結(jié)束解析執(zhí)行S5;
S1.2:使用系統(tǒng)API判斷sd卡的具體路徑,并記錄為sd_path;
S1.3:創(chuàng)建集合s_pkg,將騰訊QQ以及它的衍生產(chǎn)品的包名以字符串的形式存入s_pkg中;
S1.4:創(chuàng)建集合pkg_all,使用系統(tǒng)API獲取Android設備已經(jīng)加載的所有應用的包名信息,并將其以字符串的形式保存到pkg_all中;
S1.5:構(gòu)建集合pkg_exits,用于存儲Android智能設備中已經(jīng)安裝的QQ包名字符串信息;
S1.6:遍歷pkg_all,當遍歷存在結(jié)果時,記錄為temp_pkg執(zhí)行S1.7;否則表示遍歷結(jié)束,執(zhí)行S1.10;
S1.7:循環(huán)遍歷s_pkg,當遍歷結(jié)果存在時,記錄結(jié)果為pkg_equal,并執(zhí)行S1.8,否則繼續(xù)遍歷執(zhí)行S1.6;
S1.8:當temp_pkg與pkg_equal字符串完全匹配的時候,表示該類型QQ聊天產(chǎn)品存在,同時將temp_pkg加入pkg_exits中;當不匹配的時候執(zhí)行步驟S1.7;
S1.9:移除s_pkg中的pkg_equal選項,判定s_pkg中是否還存在數(shù)據(jù),當 存在時執(zhí)行步驟S1.6;當不存在時直接執(zhí)行步驟S1.10;
S1.10:判定pkg_exits中是否存在數(shù)據(jù),當存在時執(zhí)行S2,否則表示該智能Android設備中不包含QQ通訊應用,執(zhí)行S5結(jié)束解析。
S2:提取包含QQ賬戶信息的文件;
提取包含QQ賬戶文件是對sd卡中存在的大量文件進行一種過濾,是為了進一步縮減數(shù)據(jù)提取速度。構(gòu)建字典Map用于存儲sd卡中包含QQ賬號的文件信息。
以下為S2的詳細步驟:
S2.1:根據(jù)路徑sd_path構(gòu)建關(guān)于sd卡的文件流,同時獲取該文件流下面的所有文件記錄sd_files;
S2.2:遍歷sd_files,當遍歷結(jié)果存在時,記錄結(jié)果為file_sigle,并執(zhí)行S2.3,當不存在表示sd卡中不存在騰訊應用sd緩存數(shù)據(jù)目錄,結(jié)束解析,執(zhí)行S5;
S2.3:獲取file_sigle的文件名,記錄為file_sigle_name,使用字符串tencent與file_sigle_name匹配,當匹配時,執(zhí)行S2.4,否則執(zhí)行S2.2;
S2.4:判斷file_sigle是否是一個文件夾,當是文件夾時,結(jié)束遍歷,執(zhí)行步驟S2.5,否則執(zhí)行S2.2繼續(xù)遍歷;
S2.5:獲取file_sigle目錄下的所有文件,記錄為file_figle_files;
S2.6:判斷file_figle_files是否存在數(shù)據(jù),執(zhí)行S2.7,否則表示不存在數(shù)據(jù),執(zhí)行S5;
S2.7:對file_figle_files執(zhí)行遍歷,當結(jié)果存在時,記錄遍歷文件file_figle_files_file,并執(zhí)行S2.8,否則執(zhí)行S5結(jié)束解析;
S2.8:判定file_figle_files_file文件的文件名,并記錄為f_f_fs_fn,將f_f_fs_fn與字符串msflogs做等值比較,當相等時,執(zhí)行S2.9,否則執(zhí)行S2.7;
S2.9:判定f_f_fs_fn是否為目錄,當是時,跳出循環(huán)執(zhí)行S2.10,否則執(zhí)行S2.7;
S2.10:獲取file_figle_files_file目錄下面所有的文件,并記錄f_f_fs_f_fs;
S2.11:對f_f_fs_f_fs執(zhí)行遍歷,當遍歷結(jié)果存在時,記錄結(jié)果f_f_fs_f_fs_f,執(zhí)行步驟2.12,否則執(zhí)行S5;
S2.12:獲取文件f_f_fs_f_fs_f的文件名,并記錄為f_f_fs_f_fs_f_name同時與字符串com做等值比較,當相等時,執(zhí)行步驟S2.13,否則執(zhí)行S2.11;
S2.13:判定f_f_fs_f_fs_f是否為目錄,當是目錄時執(zhí)行S2.14,否則執(zhí)行S2.11;
S2.14:獲取f_f_fs_f_fs_f目錄下面所有的文件,并記錄f_f_fs_f_fs_f_fs;
S2.15:對f_f_fs_f_fs_f_fs執(zhí)行遍歷,當遍歷結(jié)果存在時,記錄結(jié)果f_f_fs_f_fs_f_fs_f,執(zhí)行步驟S2.16,否則執(zhí)行S5;
S2.16:獲取文件f_f_fs_f_fs_f_fs_f的文件名,并記錄為f_f_fs_f_fs_f_fs_f_name同時與字符串tencent做等值比較,當相等時,執(zhí)行步驟S2.17,否則執(zhí)行S2.15;
S2.17:判定f_f_fs_f_fs_f是否為目錄,當是目錄時執(zhí)行S2.18,否則執(zhí)行S2.15;
S2.18:f_f_fs_f_fs_f目錄下面的文件是騰訊QQ及其衍生通訊產(chǎn)品存放日志數(shù)據(jù)的地方,獲取該目錄下的文件,記錄為father_files;
S2.19:對father_files執(zhí)行遍歷,當遍歷結(jié)果存在時,記錄文件為father_file, 執(zhí)行S2.20,否則結(jié)束解析執(zhí)行S3;
S2.20:判斷father_file是否為目錄,當是時執(zhí)行S2.21,否則執(zhí)行S2.19;
S2.21:獲取father_file的文件名記錄為father_file_name;
S2.21:構(gòu)建字典L_son,用于存儲有可能包含賬戶信息的文件名;
S2.22:獲取目錄father_file下面所有的文件,記錄為son_files;
S2.23:遍歷son_files,當遍歷結(jié)果存在時,記錄為son_file,否則,將father_file_name作為鍵,將L_son作為值加入Map,并執(zhí)行S2.19;
S2.24:獲取son_file的文件名,記錄為son_file_name;
S2.25:判斷son_file_name根據(jù)正則式\\d{2}\\.\\d{2}\\.\\d{2}\\.\\d{2}\\.log進行文件篩選,當符合該正則式時,將son_file加入L_son,執(zhí)行S2.23。
S3:解析賬號數(shù)據(jù)文件;
經(jīng)過S2的篩選,將所有可能包含QQ賬號的文件過濾出現(xiàn),本步驟開始執(zhí)行具體賬號的提取,創(chuàng)建字典Map_account用于保存提取出來的數(shù)據(jù);
以下為S3的詳細步驟:
S3.1:遍歷Map,當數(shù)據(jù)存在時,獲取Map的值記錄為L_temp,獲取Map的鍵,記錄為pkg_name,然后執(zhí)行步驟S3.2,當結(jié)果不存在時執(zhí)行S4;
S3.2:創(chuàng)建集合L_account用來存儲每一種QQ聊天應用類型的賬戶;
S3.3:遍歷L_temp,當結(jié)果存在時記錄結(jié)果為L_temp_file,并執(zhí)行S3.4;當不存在數(shù)據(jù)時,將pkg_name作為key,L_account作為值,保存到Map_account,然后執(zhí)行S3.1;
S3.4:加載文件L_temp_file,按行讀取文件L_temp_file;當讀取內(nèi)容存在時,記錄為data,執(zhí)行S3.5:否則執(zhí)行S3.3;
S3.5:判斷data是否包含特定的字符,記錄特定字符charer,當不包含時執(zhí)行S3.3,否則執(zhí)行S3.6;特殊字符滿足以下需求,特殊字符檢測順序為qzone:MSF,當以上兩個字符都不滿足時記錄為other。
S3.6:根據(jù)正則式[1-9][0-9]{4,9},進行數(shù)據(jù)匹配,當匹配成功時,記錄為account,將account加入集合L_account,然后執(zhí)行S3.3;當沒有匹配到數(shù)據(jù)時直接執(zhí)行S3.3;
S4:賬戶信息展示;
經(jīng)過S3獲取到了sd卡中保存的QQ賬戶信息,Map_account的鍵是智能手機中包含的所有QQ聊天應用包名,Map_account的值是登錄這些聊天應用的賬號,介于本專利用于取證,因此對數(shù)據(jù)來源有嚴格的需求,因此采用以下方式進行展示。
以下為S4的詳細步驟:
S4.1:根據(jù)包名構(gòu)建字典M_p_a,該字典表示的是包名對應的實際應用名,比如移動QQ對應com.tencent.mobielqq,輕聊QQ對應com.tencent.qqlite;
S4.2:加載excel插件,構(gòu)建execl文件的頭信息,頭部信息包含應用名app_name,應用包名pkg_name,賬戶信息accout_name;
S4.3:遍歷Map_account,當數(shù)據(jù)存在時,記錄key為result_pkg,值為L_account。將result_pkg賦值給pkg_name。根據(jù)result_pkg從字典M_p_a獲取出該應用的實際應用名記錄為p_name,將p_name賦值給app_name,執(zhí)行S4.4,否則結(jié)束解析,執(zhí)行S5;
S4.4:遍歷L_account,當遍歷數(shù)據(jù)存在的時候記錄結(jié)果為account,并將account賦值給accout_name,當遍歷結(jié)果不存在時執(zhí)行S4.3;
S4.5:創(chuàng)建excel的一行單元格,將app_name,pkg_name,accout_name依次寫入,寫入完畢之后執(zhí)行S4.4;
S5:生成了excel表格,那么該表格就是該智能移動設備中的QQ賬號信息,否則代表沒有提取到QQ賬戶數(shù)據(jù)。
本領(lǐng)域的普通技術(shù)人員將會意識到,這里所述的實施例是為了幫助讀者理解本發(fā)明的實施方法,應被理解為本發(fā)明的保護范圍并不局限于這樣的特別陳述和實施例。本領(lǐng)域的普通技術(shù)人員可以根據(jù)本發(fā)明公開的這些技術(shù)啟示做出各種不脫離本發(fā)明實質(zhì)的其它各種具體變形和組合,這些變形和組合仍然在本發(fā)明的保護范圍內(nèi)。