本發(fā)明涉及信息安全
技術領域:
:,特別涉及一種提取Android系統(tǒng)百度地圖基站數(shù)據(jù)的方法。
背景技術:
::隨著信息化技術的不斷發(fā)展與進步,眾所周知,Android設備已經(jīng)成為人們生活中不可替代:不可或缺的一個工具。Android設備也因此得到飛速發(fā)展,現(xiàn)已不僅僅是通話工具那么簡單,他依然成為生活的一部分,Android設備的各種各樣的功能也層出不窮,覆蓋了生活中的方方面面。但Android設備在獲取豐富資源:處理大量數(shù)據(jù)的同時面臨著被破壞的風險也越來越大,例如恢復出廠設置,誤刷機:中病毒等情況均會造成手機數(shù)據(jù)丟失,因此還原Android設備的數(shù)據(jù)顯得尤為重要。百度地圖是在中國地區(qū)使用非常廣泛的地圖導航類應用,基于龐大的用戶量,針對百度地圖數(shù)據(jù)的恢復就更加具有普遍性的意義;目前比較成熟的是提取百度地圖中包含的經(jīng)緯度定位痕跡,但是針對百度地圖中包含基站數(shù)據(jù)的提取卻屬于空白狀態(tài)。技術實現(xiàn)要素:本發(fā)明針對現(xiàn)有技術的缺陷,提供了一種提取Android系統(tǒng)百度地圖基站數(shù)據(jù)的方法,能有效的解決上述現(xiàn)有技術存在的問題。一種提取Android系統(tǒng)百度地圖基站數(shù)據(jù)的方法,包括以下步驟:S1:訪問百度地圖保存基站文件,步驟如下:S1.1:判斷提取數(shù)據(jù)手機是否Root,記錄布爾值類型標志F1;S1.1.1:判定系統(tǒng)中是否包含su文件,當不包含su文件時,直接判定F1為False,執(zhí)行S5,當包含su文件時執(zhí)行S1.1.2;S1.1.2:調(diào)用原生接口,開啟PROCESS進程;S1.1.3:執(zhí)行SHELL指令su,保存執(zhí)行指令后的結果,當返回結果為0時,記錄標志F1為True,否則記錄為False;S1.1.4:判斷F1的標志,當F1為True時執(zhí)行操作S1.2,當F1為false時,代表操作系統(tǒng)沒有root無法獲取到數(shù)據(jù)區(qū)域的內(nèi)容,結束解析,執(zhí)行S5;S1.2:判定系統(tǒng)中是否存在百度地圖應用,記錄布爾值類型標志F2;S1.2.1:調(diào)用原生接口,開啟PROCESS進程;S1.2.2:執(zhí)行指令“l(fā)s/data/data/com.baidu.BaiduMap”,保存執(zhí)行指令后的結果,當返回結果為包含“Nosuchfileordirectory”時代表百度地圖應用不存在,記錄F2為false,否則記錄F2為true;S1.2.3:當F2為true時執(zhí)行S1.3,當F2為false時,代表百度地圖應用不存在,結束解析,執(zhí)行S5;S1.3:訪問保存基站數(shù)據(jù)的數(shù)據(jù)庫文件;S1.3.1:調(diào)用原生接口,開啟PROCESS進程;S1.3.2:對百度地圖的files目錄執(zhí)行chmod命令,獲取該目錄的最高權限;S1.3.3:使用各自系統(tǒng)下面的文件獲取api,獲取該目錄下面的所有的具體文件,記錄為集合L1;S1.3.4:遍歷L1,當遍歷未結束時,記錄遍歷結果為R1,執(zhí)行S1.3.5,當遍歷結束,代表目標文件夾沒有找到,結束解析,執(zhí)行S5;S1.3.5:判斷R1是文件夾還是文件,當是文件夾時執(zhí)行S1.3.6,當是文件時執(zhí)行S1.3.4;S1.3.6:獲取R1的名稱,記錄為DirName1,將DirName1與字符串“ofld”做等值比較,當結果相等時執(zhí)行S1.3.7,否者執(zhí)行S1.3.4;S1.3.7:使用各自系統(tǒng)下面的文件獲取api和DirName1文件夾下面的所有文件,記錄為集合L2;S1.3.8:遍歷L2,當遍歷未結束時,記錄遍歷結果為R2并執(zhí)行S1.3.9,當遍歷結束時,代表目標文件沒有找到,結束解析,執(zhí)行S5;S1.3.9:判斷R2是文件夾還是文件,當是文件時執(zhí)行S1.3.10,當不是文件時執(zhí)行S1.3.8;S1.3.10:獲取R2的名稱,記錄為fileName1,將fileName1和字符串“ofl_statistics”做等值比較。當相等時執(zhí)行S1.4,當不相等時執(zhí)行S1.3.8;S1.4:對文件R2使用chmod指令,獲取到文件的最高權限。S2:解析文件,獲取其中保存基站的數(shù)據(jù),步驟如下:S2.1:創(chuàng)建基站實體BS,包含MCC、MNC、LAC、CELLID、FREQ字段,同時創(chuàng)建保存基站的集合L2;S2.2:判定R2文件類型;S2.2.1:使用各自平臺的api,判斷R2文件的大小,當長度小于16字節(jié)時,代表該文件不為數(shù)據(jù)庫文件,結束解析,執(zhí)行S5,當大于16字節(jié)執(zhí)行S2.2.2;S2.2.2:將R2文件使用流的方式讀取R2的最開始的16個字節(jié)記錄為filehead,將filehead依次與0X53,0X51,0X4C,0X69,0X74,0X65,0X20,0X66,0X6F,0X72,0X6D,0X61,0X74,0X20,0X33,0X00這16個字節(jié)做等值比較;當完全相同時執(zhí)行S2.3,當不完全相同時,代表該文件不為數(shù)據(jù)庫文件,結束解析,執(zhí)行S5;S2.3:讀取數(shù)據(jù)庫文件;S2.3.1:使用各自平臺的api,加載數(shù)據(jù)庫文件R2,當加載成功時,執(zhí)行S2.3.2,當加載失敗時,代表數(shù)據(jù)庫無法加載,結束解析,執(zhí)行S5;S2.3.2:使用sql語句“SELECTnameFROMsqlite_masterWHEREtype='table'ORDERBYname”獲取該數(shù)據(jù)庫的所有表名的游標,記錄為C1;S2.3.3:循環(huán)解析C1,當遍歷未結束時,記錄結果為R3,執(zhí)行S2.3.4,當遍歷結束時,保存基站數(shù)據(jù)的表不存在,結束解析,執(zhí)行S5;S2.3.4:R3為游標的一行完整的數(shù)據(jù),獲取該行的第一列數(shù)據(jù),記錄為字符串tbName;S2.3.5:將tbName與字符串“CL”做等值比較,當相等時執(zhí)行S2.4,當不相等時執(zhí)行S2.3.3;S2.4:使用各自平臺的api,解析表tbName,同時至少必須獲取指定列名為“originid”,“frequency”;這兩個列表分別代表基站數(shù)據(jù)和該基站訪問的次數(shù),記錄結果為C2,C2是一個關于表tbName的游標;S2.4.1:循環(huán)遍歷C2,當存在數(shù)據(jù)時記錄結果為R3,執(zhí)行S2.4.2,不存在數(shù)據(jù)時,代表解析結束,執(zhí)行S3;S2.4.2:以字符串的形式獲取R3的列名為“originid”的數(shù)據(jù),記為data1,data1保存有基站信息,獲取frequency數(shù)據(jù),記為data2,data2是訪問該基站的次數(shù);S2.4.3:解析data1,獲取基站數(shù)據(jù);S2.4.3.1:使用“|”分割data1,結果記錄為split_array數(shù)組;S2.4.3.2:判斷split_array數(shù)組中含有多少個數(shù)據(jù),記為len,當len的長度是4時執(zhí)行S2.4.3.3,當長度不為4時執(zhí)行S2.4.1;S2.4.3.3:split_array的第一個值記為mcc,split_array的第二個值記為mnc,split_array的第三個值記為lac,split_array的第四個值記為cid;S2.4.4:創(chuàng)建基站實體BS;S2.4.5:將BS的MCC設置為mcc,MNC設置為mnc,LAC設置lac,CELLID設置為cid,F(xiàn)REQ設置為data2;S2.4.6:將BS加入L2,并執(zhí)行S2.4.1。S3:逆解析基站信息,步驟如下:S3.1:構建經(jīng)緯度實體,實體應當包含經(jīng)度、維度、坐標系、訪問次數(shù),分別是Lat,Lon,Coord,F(xiàn)req,創(chuàng)建經(jīng)緯度集合L3;判斷集合L2中的大小,記錄為size。若size不為0,代表數(shù)據(jù)存在,執(zhí)行S3.2,若size為0,代表基站數(shù)據(jù)不存在,執(zhí)行S5;S3.2:遍歷L2,當存在數(shù)據(jù)時,記錄數(shù)據(jù)為BS2,執(zhí)行S3.3,當不存在數(shù)據(jù)時,代表數(shù)據(jù)遍歷結束,執(zhí)行S4;S3.3:根據(jù)相應平臺自定義的規(guī)則,傳入BS2的MCC,MNC,LAC,CELLID選項,得到解析結果為result2;S3.4:根據(jù)相應平臺返回結果規(guī)則,獲取基站BS2逆解析的經(jīng)度、緯度,記錄為lat、lon,逆解析BS2時選擇的坐標系,記錄為coord;S3.5:當lat和lon同時不為空字符串時,執(zhí)行S3.6,否則執(zhí)行S3.2;S3.6:創(chuàng)建經(jīng)緯度實體P,將P的Lat,Lon,Coord設置從result2中獲取的lat,lon,coord,P的Freq設置為基站實體BS2中記錄的FREQ;S3.7:將P加入經(jīng)緯度集合L3,并執(zhí)行S3.2。S4:地圖展示基站數(shù)據(jù),步驟如下:S4.1:選擇展示經(jīng)緯度數(shù)據(jù)的地圖類型;S4.2:判斷集合L3的大小,記錄為size2,當size2為0時代表數(shù)據(jù)不存在,執(zhí)行S5,當size2不為0時,執(zhí)行4.3;S4.3:遍歷L3,當遍歷結果存在時記錄為p1,執(zhí)行S4.4,當遍歷結果不存在時,代表遍歷結束,執(zhí)行S4.7;S4.4:根據(jù)p1中記錄的coord進行坐標系準確度修正。修正的方式有兩種,一是使用所選地圖平臺的api進行修正,二是直接根據(jù)坐標系之間的轉換算法進行強制性的修正;S4.5:傳入p1的Lat,Lon,Coord,進行修正得到該平臺的修正經(jīng)緯度,lat1,lon1,同時根據(jù)各自地圖平臺確認其固定的坐標系,記為coord1;S4.6:將p1的Lat,Lon,Coord重新賦值為lat1,lon1,coord1,執(zhí)行S4.3;S4.7:遍歷L3,當遍歷結果存在時記錄為p2,執(zhí)行S4.8,當遍歷結果不存在時,代表遍歷結束,執(zhí)行S5;S4.8:根據(jù)p2中的經(jīng)度:緯度在地圖中進行標注;S4.9:根據(jù)p2中的Freq,標注出該智能手機所訪問的地點的頻率,從而標注出該智能手機經(jīng)常訪問地點,執(zhí)行S4.7。S5:地圖展示完成,結束解析。與現(xiàn)有技術相比本發(fā)明的優(yōu)點在于:1、補充了百度地圖基站數(shù)據(jù)的提取方案,使得數(shù)據(jù)的完整性得到補充;2、歸納百度地圖訪問基站的次數(shù),直觀展示用戶到達地點的頻率;3、提取的基站是基于百度地圖導航定位產(chǎn)生,因此準確性得到保證。具體實施方式為使本發(fā)明的目的:技術方案及優(yōu)點更加清楚明白,以下舉實施例,對本發(fā)明做進一步詳細說明。S1:訪問百度地圖保存基站文件。該步驟主要是在數(shù)據(jù)提取之前進行一些先決性條件判定,只有完整執(zhí)行該步驟,獲取到具體的文件,才可以執(zhí)行數(shù)據(jù)提取,由于是針對數(shù)據(jù)分區(qū)(Data分區(qū))進行數(shù)據(jù)提取,詳細步驟如下:S1.1:判斷提取數(shù)據(jù)手機是否Root,記錄布爾值類型標志F1;S1.1.1:判定系統(tǒng)中是否包含su文件,當不包含su文件時,直接判定F1為False,執(zhí)行S5,當包含su文件時執(zhí)行S1.1.2;S1.1.2:調(diào)用原生接口,開啟PROCESS進程;S1.1.3:執(zhí)行SHELL指令su,保存執(zhí)行指令后的結果,當返回結果為0時,記錄標志F1為True,否則記錄為False;S1.1.4:判斷F1的標志,當F1為True時執(zhí)行操作S1.2,當F1為false時,代表操作系統(tǒng)沒有root無法獲取到數(shù)據(jù)區(qū)域的內(nèi)容,結束解析,執(zhí)行S5;S1.2:判定系統(tǒng)中是否存在百度地圖應用,記錄布爾值類型標志F2;S1.2.1:調(diào)用原生接口,開啟PROCESS進程;S1.2.2:執(zhí)行指令“l(fā)s/data/data/com.baidu.BaiduMap”,保存執(zhí)行指令后的結果,當返回結果為包含“Nosuchfileordirectory”時代表百度地圖應用不存在,記錄F2為false,否則記錄F2為true;S1.2.3:當F2為true時執(zhí)行S1.3,當F2為false時,代表百度地圖應用不存在,結束解析,執(zhí)行S5;S1.3:訪問保存基站數(shù)據(jù)的數(shù)據(jù)庫文件;S1.3.1:調(diào)用原生接口,開啟PROCESS進程;S1.3.2:對百度地圖的files目錄執(zhí)行chmod命令,獲取該目錄的最高權限;S1.3.3:使用各自系統(tǒng)下面的文件獲取api,獲取該目錄下面的所有的具體文件,記錄為集合L1;S1.3.4:遍歷L1,當遍歷未結束時,記錄遍歷結果為R1,執(zhí)行S1.3.5,當遍歷結束,代表目標文件夾沒有找到,結束解析,執(zhí)行S5;S1.3.5:判斷R1是文件夾還是文件,當是文件夾時執(zhí)行S1.3.6,當是文件時執(zhí)行S1.3.4;S1.3.6:獲取R1的名稱,記錄為DirName1,將DirName1與字符串“ofld”做等值比較,當結果相等時執(zhí)行S1.3.7,否者執(zhí)行S1.3.4;S1.3.7:使用各自系統(tǒng)下面的文件獲取api和DirName1文件夾下面的所有文件,記錄為集合L2;S1.3.8:遍歷L2,當遍歷未結束時,記錄遍歷結果為R2并執(zhí)行S1.3.9,當遍歷結束時,代表目標文件沒有找到,結束解析,執(zhí)行S5;S1.3.9:判斷R2是文件夾還是文件,當是文件時執(zhí)行S1.3.10,當不是文件時執(zhí)行S1.3.8;S1.3.10:獲取R2的名稱,記錄為fileName1,將fileName1和字符串“ofl_statistics”做等值比較。當相等時執(zhí)行S1.4,當不相等時執(zhí)行S1.3.8;S1.4:對文件R2使用chmod指令,獲取到文件的最高權限。S2:解析文件,獲取其中保存基站的數(shù)據(jù)。根據(jù)S1獲取到了目標文件R2,該文件是一個數(shù)據(jù)庫文件,保存用戶通過百度地圖訪問過的所有基站。百度地圖的基站均是以移動:聯(lián)通基站的形式存儲,而對電信的基站仍舊以移動:聯(lián)通基站的形式保存,對應存儲的方式是,MNC(SID):LAC(NID):CELLID(BID)。括號前為移動聯(lián)通標志,括號后為電信標志,具體標志意思見基站類型描述。首先需要創(chuàng)建基站實體BS,至少應當包含MCC,MNC,LAC,CELLID:FREQ字段,F(xiàn)REQ是訪問該基站的頻率。同時創(chuàng)建保存基站的集合L2?;绢愋兔枋觯河捎谶\營商的不同,基站數(shù)據(jù)存儲格式會有一定的變化,這里以國內(nèi)的基站為列,國內(nèi)基站分為三種,移動,聯(lián)通,電信。其中移動:聯(lián)通格式一致,而電信則不同。電信基站,包含屬性BID:SID:NID;BID基站編號;SID系統(tǒng)識別碼,每個地級市只有唯一一個碼;NID網(wǎng)絡識別碼,由各本地網(wǎng)管理,可以有多個;移動、聯(lián)通基站,包含屬性MNC:LAC:CID;MNC網(wǎng)絡類型識別碼其中00:02:04:07代表移動,01:06代表聯(lián)通,03:05代表是電信;LAC位置區(qū)域碼;CID基站編號;S2的具體步驟如下:S2.1:創(chuàng)建基站實體BS,包含MCC、MNC、LAC、CELLID、FREQ字段,同時創(chuàng)建保存基站的集合L2;S2.2:判定R2文件類型;S2.2.1:使用各自平臺的api,判斷R2文件的大小,當長度小于16字節(jié)時,代表該文件不為數(shù)據(jù)庫文件,結束解析,執(zhí)行S5,當大于16字節(jié)執(zhí)行S2.2.2;S2.2.2:將R2文件使用流的方式讀取R2的最開始的16個字節(jié)記錄為filehead,將filehead依次與0X53,0X51,0X4C,0X69,0X74,0X65,0X20,0X66,0X6F,0X72,0X6D,0X61,0X74,0X20,0X33,0X00這16個字節(jié)做等值比較;當完全相同時執(zhí)行S2.3,當不完全相同時,代表該文件不為數(shù)據(jù)庫文件,結束解析,執(zhí)行S5;S2.3:讀取數(shù)據(jù)庫文件;S2.3.1:使用各自平臺的api,加載數(shù)據(jù)庫文件R2,當加載成功時,執(zhí)行S2.3.2,當加載失敗時,代表數(shù)據(jù)庫無法加載,結束解析,執(zhí)行S5;S2.3.2:使用sql語句“SELECTnameFROMsqlite_masterWHEREtype='table'ORDERBYname”獲取該數(shù)據(jù)庫的所有表名的游標,記錄為C1;S2.3.3:循環(huán)解析C1,當遍歷未結束時,記錄結果為R3,執(zhí)行S2.3.4,當遍歷結束時,保存基站數(shù)據(jù)的表不存在,結束解析,執(zhí)行S5;S2.3.4:R3為游標的一行完整的數(shù)據(jù),獲取該行的第一列數(shù)據(jù),記錄為字符串tbName;S2.3.5:將tbName與字符串“CL”做等值比較,當相等時執(zhí)行S2.4,當不相等時執(zhí)行S2.3.3;S2.4:使用各自平臺的api,解析表tbName,同時至少必須獲取指定列名為“originid”,“frequency”;這兩個列表分別代表基站數(shù)據(jù)和該基站訪問的次數(shù),記錄結果為C2,C2是一個關于表tbName的游標;S2.4.1:循環(huán)遍歷C2,當存在數(shù)據(jù)時記錄結果為R3,執(zhí)行S2.4.2,不存在數(shù)據(jù)時,代表解析結束,執(zhí)行S3;S2.4.2:以字符串的形式獲取R3的列名為“originid”的數(shù)據(jù),記為data1,data1保存有基站信息,獲取frequency數(shù)據(jù),記為data2,data2是訪問該基站的次數(shù);S2.4.3:解析data1,獲取基站數(shù)據(jù);S2.4.3.1:使用“|”分割data1,結果記錄為split_array數(shù)組;S2.4.3.2:判斷split_array數(shù)組中含有多少個數(shù)據(jù),記為len,當len的長度是4時執(zhí)行S2.4.3.3,當長度不為4時執(zhí)行S2.4.1;S2.4.3.3:split_array的第一個值記為mcc,split_array的第二個值記為mnc,split_array的第三個值記為lac,split_array的第四個值記為cid;S2.4.4:創(chuàng)建基站實體BS;S2.4.5:將BS的MCC設置為mcc,MNC設置為mnc,LAC設置lac,CELLID設置為cid,F(xiàn)REQ設置為data2;S2.4.6:將BS加入L2,并執(zhí)行S2.4.1。S3:逆解析基站信息;逆向解析基站數(shù)據(jù)是將基站數(shù)據(jù)轉化為常見的經(jīng)緯度格式,便于數(shù)據(jù)展示,目前市面上并沒有官方的解析平臺,一般民用的都是第三方平臺提供的解析方案,若想要使用官方的數(shù)據(jù)庫,請自行想辦法。構建經(jīng)緯度實體,實體至少應當包含經(jīng)度:維度:坐標系:訪問次數(shù),分別是Lat,Lon,Coord,F(xiàn)req。創(chuàng)建經(jīng)緯度集合L3;詳細步驟如下:S3.1:構建經(jīng)緯度實體,實體應當包含經(jīng)度、維度、坐標系、訪問次數(shù),分別是Lat,Lon,Coord,F(xiàn)req,創(chuàng)建經(jīng)緯度集合L3;判斷集合L2中的大小,記錄為size。若size不為0,代表數(shù)據(jù)存在,執(zhí)行S3.2,若size為0,代表基站數(shù)據(jù)不存在,執(zhí)行S5;S3.2:遍歷L2,當存在數(shù)據(jù)時,記錄數(shù)據(jù)為BS2,執(zhí)行S3.3,當不存在數(shù)據(jù)時,代表數(shù)據(jù)遍歷結束,執(zhí)行S4;S3.3:根據(jù)相應平臺自定義的規(guī)則,傳入BS2的MCC,MNC,LAC,CELLID選項,得到解析結果為result2;S3.4:根據(jù)相應平臺返回結果規(guī)則,獲取基站BS2逆解析的經(jīng)度、緯度,記錄為lat、lon,逆解析BS2時選擇的坐標系,記錄為coord;S3.5:當lat和lon同時不為空字符串時,執(zhí)行S3.6,否則執(zhí)行S3.2;S3.6:創(chuàng)建經(jīng)緯度實體P,將P的Lat,Lon,Coord設置從result2中獲取的lat,lon,coord,P的Freq設置為基站實體BS2中記錄的FREQ;S3.7:將P加入經(jīng)緯度集合L3,并執(zhí)行S3.2。S4:地圖展示基站數(shù)據(jù);基站數(shù)據(jù)的地圖展示的目的是為了直觀的向用戶展示所提取的基站數(shù)據(jù)代表的實際地址信息。目前常見的地圖有谷歌地圖:百度地圖等。基于地圖類型的不同,所以不同平臺的坐標系對經(jīng)緯度的封裝也有所不同,但是坐標系均是固定的,比如谷歌地球使用WGS84,谷歌使用的是GCJ02,百度地圖使用的是它自己封裝的坐標系BD09。詳細步驟如下:S4.1:選擇展示經(jīng)緯度數(shù)據(jù)的地圖類型;S4.2:判斷集合L3的大小,記錄為size2,當size2為0時代表數(shù)據(jù)不存在,執(zhí)行S5,當size2不為0時,執(zhí)行4.3;S4.3:遍歷L3,當遍歷結果存在時記錄為p1,執(zhí)行S4.4,當遍歷結果不存在時,代表遍歷結束,執(zhí)行S4.7;S4.4:根據(jù)p1中記錄的coord進行坐標系準確度修正。修正的方式有兩種,一是使用所選地圖平臺的api進行修正,二是直接根據(jù)坐標系之間的轉換算法進行強制性的修正;S4.5:傳入p1的Lat,Lon,Coord,進行修正得到該平臺的修正經(jīng)緯度,lat1,lon1,同時根據(jù)各自地圖平臺確認其固定的坐標系,記為coord1;S4.6:將p1的Lat,Lon,Coord重新賦值為lat1,lon1,coord1,執(zhí)行S4.3;S4.7:遍歷L3,當遍歷結果存在時記錄為p2,執(zhí)行S4.8,當遍歷結果不存在時,代表遍歷結束,執(zhí)行S5;S4.8:根據(jù)p2中的經(jīng)度:緯度在地圖中進行標注;S4.9:根據(jù)p2中的Freq,標注出該智能手機所訪問的地點的頻率,從而標注出該智能手機經(jīng)常訪問地點,執(zhí)行S4.7。S5:地圖展示完成,解析結束。本領域的普通技術人員將會意識到,這里所述的實施例是為了幫助讀者理解本發(fā)明的實施方法,應被理解為本發(fā)明的保護范圍并不局限于這樣的特別陳述和實施例。本領域的普通技術人員可以根據(jù)本發(fā)明公開的這些技術啟示做出各種不脫離本發(fā)明實質(zhì)的其它各種具體變形和組合,這些變形和組合仍然在本發(fā)明的保護范圍內(nèi)。當前第1頁1 2 3 當前第1頁1 2 3