一種基于安卓平臺(tái)獲取手機(jī)分區(qū)掛載信息的方法
【專利摘要】本發(fā)明公開了一種基于安卓平臺(tái)獲取手機(jī)分區(qū)掛載信息的方法,其特征在于包括以下步驟:一、構(gòu)建分區(qū)信息實(shí)體;二、獲取分區(qū)大小、分區(qū)掛載路徑;三、確認(rèn)分區(qū)名獲取方式;四、分區(qū)邏輯名稱和實(shí)際掛載路徑的匹配。本發(fā)明的有益效果如下:依靠智能手機(jī)便可分區(qū)掛載信息的獲取,可以適應(yīng)手機(jī)的移動(dòng)性,現(xiàn)場(chǎng)取證,防止證據(jù)被破壞,能夠準(zhǔn)確獲取智能手機(jī)的完整分區(qū)掛載信息。
【專利說(shuō)明】
一種基于安卓平臺(tái)獲取手機(jī)分區(qū)掛載信息的方法
技術(shù)領(lǐng)域
[0001]本發(fā)明涉及信息安全技術(shù)領(lǐng)域,特別涉及一種基于安卓平臺(tái)獲取手機(jī)分區(qū)掛載信息的方法。
【背景技術(shù)】
[0002]電子取證是指利用計(jì)算機(jī)軟硬件技術(shù),以符合法律規(guī)范的方式對(duì)犯罪行為進(jìn)行證據(jù)獲取、保存、分析和出示的過(guò)程;其中犯罪分子或受害人智能手機(jī)中可能存在大量可用電子證據(jù),因此針對(duì)智能手機(jī)信息的提取技術(shù)增在快速發(fā)展。
[0003]目前在提取智能手機(jī)數(shù)據(jù)時(shí)為了不污染手機(jī)中的數(shù)據(jù),通常都是采用鏡像智能手機(jī)分區(qū)的方式進(jìn)行數(shù)據(jù)備份,從而可以對(duì)手機(jī)鏡像執(zhí)行數(shù)據(jù)分析操作,進(jìn)行取證工作,該種方式的最重要的一步便是獲取智能手機(jī)的分區(qū)掛載點(diǎn)信息,目前的智能手機(jī)分區(qū)掛載信息主要是由PC端軟件完成,但PC端軟件必然依托于PC,其便攜性太差,不方便到現(xiàn)場(chǎng)恢復(fù)數(shù)據(jù)。
【發(fā)明內(nèi)容】
[0004]本發(fā)明針對(duì)現(xiàn)有技術(shù)的缺陷,提供了一種基于安卓平臺(tái)獲取手機(jī)分區(qū)掛載信息的方法,能有效的解決上述現(xiàn)有技術(shù)存在的問(wèn)題。
[0005]—種基于安卓平臺(tái)獲取手機(jī)分區(qū)掛載信息的方法,包括以下步驟:
[0006]—、構(gòu)建分區(qū)信息實(shí)體;
[0007]該實(shí)體類的構(gòu)建用于描述分區(qū)信息,它包括最基本的三個(gè)屬性:分區(qū)名、分區(qū)大小和分區(qū)位置;
[0008]其中,分區(qū)名是分區(qū)在邏輯層的名稱;分區(qū)位置是分區(qū)的在系統(tǒng)中的掛載路徑;
[0009]實(shí)體類的創(chuàng)建方式是直接利于系統(tǒng)方法,新建分區(qū)信息實(shí)體,新建實(shí)體的方法為new;
[0010]創(chuàng)建分區(qū)信息實(shí)體集合L,該集合專門用于保存分區(qū)信息實(shí)體,當(dāng)解析結(jié)束之后,集合L保存有該智能手機(jī)的完整分區(qū)信息;
[0011]二、獲取分區(qū)大小、分區(qū)掛載路徑;
[0012]三、確認(rèn)分區(qū)名獲取方式;
[0013]四、分區(qū)邏輯名稱和實(shí)際掛載路徑的匹配。
[0014]作為優(yōu)選,獲取分區(qū)大小、分區(qū)掛載路徑的詳細(xì)步驟如下:
[0015]2.1:調(diào)用原生借口,開啟PROCESS進(jìn)程;
[0016]2.2:執(zhí)行SHELL指令cat/proc/part it 1ns,并保存執(zhí)行指令的結(jié)果,記錄為SI ;
[0017]2.3:按行讀取SI,記錄結(jié)果為I ine,若I ine不為null執(zhí)行2.4,若I ine為null,代表結(jié)果解析結(jié)束執(zhí)行步驟三;
[0018]2.4:去除I ine的空字符串,使得結(jié)果變?yōu)橛行?shù)據(jù);
[0019]2.5:判斷I ine是否包含“major”,若是則代表本行不是有效數(shù)據(jù),重新執(zhí)行2.3操作;
[0020]2.6:利用正則式“\\s*”,判斷本行是否全是特殊字符。如果是執(zhí)行2.3操作,如果不是執(zhí)行則2.7操作;
[0021 ] 2.7:根據(jù)正則式“\\s+”,分割I(lǐng) ine,分割結(jié)果是為4的固定長(zhǎng)度,將結(jié)果保存在長(zhǎng)度為4的數(shù)組Al中;
[0022]2.8:創(chuàng)建分區(qū)信息實(shí)體,并根據(jù)以上獲取的數(shù)據(jù)對(duì)分區(qū)信息實(shí)體設(shè)置具體的值。其中分區(qū)大小Al第3個(gè)值,掛載路徑名為Al第4個(gè)值,將該實(shí)體加入L中;將Al的第一個(gè)值al_I和第二個(gè)al_2值合并,合并方式al_l + “:”+al_2;作為key,分區(qū)實(shí)體信息作為值保存在MAP_P起來(lái);
[0023]2.9:執(zhí)行 2.3操作。
[0024]作為優(yōu)選,確認(rèn)分區(qū)名獲取方式的詳細(xì)步驟如下:
[0025]3.1:ΒΥ_ΝΑΜΕ方式讀取分區(qū)名信息;
[0026]3.1.1:獲取根目錄下所有文件名稱,根目錄是/dev/block/platform/;
[0027]3.1.2:判斷該目錄下是否存在目錄,如果存在執(zhí)行3.1.3,如果不存在那么執(zhí)行3.2;
[0028]3.1.3:遍歷目錄,在每個(gè)目錄的后面添加7by_name”,并判斷該目錄是否存在。如果存在,保存路徑記為Pl,記錄BY_NAME讀取方式Fl為TURE,并執(zhí)行步驟四。如果不存在則記錄標(biāo)記Fl為FALSE,那么執(zhí)行3.2 ;
[0029]3.2:BY_NUM方式讀取分區(qū)名信息;
[°03°] 3.2.1:獲取根目錄下所有文件名稱,根目錄是/dev/block/platform/;
[0031 ] 3.2.2:判斷該目錄下是否存在目錄。如果存在執(zhí)行3.2.3,如果不存在那么執(zhí)行3.3操作;
[0032]3.2.3:遍歷目錄,在每個(gè)目錄的后面添加“/by_num”,并判斷該目錄是否存在,如果存在,保存路徑記為P2,記錄BY_NAME讀取方式標(biāo)記F2為TRUE,并執(zhí)行步驟四;如果不存在,則記錄標(biāo)記F2為FALSE,那么執(zhí)行3.3操作;
[0033]3.3:DEFALUT方式讀取分區(qū)名信息;
[0034]當(dāng)BY_NAME和BY_NUM方式均不成立,即Fl,F(xiàn)2均為FALSE時(shí)則直接執(zhí)行步驟四。
[0035]作為優(yōu)選,分區(qū)邏輯名稱和實(shí)際掛載路徑的匹配,根據(jù)步驟三執(zhí)行后得到的標(biāo)志Fl,F(xiàn)2,F(xiàn)3標(biāo)志進(jìn)行分區(qū)邏輯名和分區(qū)掛載路徑的匹配;
[0036]情況有三種,第一種若Fl為TRUE執(zhí)行4.1操作;第二種若Fl為FALSE,F(xiàn)2為TRUE,執(zhí)行4.2操作;第三種若Fl,F(xiàn)2均為FALSE,則執(zhí)行4.3操作;
[0037]4.1:NAME匹配方式執(zhí)行匹配分區(qū)邏輯和實(shí)際掛載路徑,詳細(xì)步驟如下:
[0038]4.1.1:調(diào)用原生借口,開啟PROCESS進(jìn)程;
[0039]4.1.2:執(zhí)行SHELL指令I(lǐng)s-1Pl,并保存結(jié)果為S2;
[0040]4.1.3:按行讀取S2,記錄結(jié)果為line,若line不為null執(zhí)行4.1.4,若line為null,代表結(jié)果解析結(jié)束,并執(zhí)行4.3 ;
[0041 ] 4.1.4:去除I ine的空字符串,使得結(jié)果為變?yōu)橛行?shù)據(jù);
[0042]4.1.5:根據(jù)正則式“\\s+,,,分割I(lǐng) ine,分割結(jié)果是為8的固定長(zhǎng)度,將結(jié)果保存在長(zhǎng)度為8的數(shù)組A2中;[0043 ] 4.1.6: A2第6個(gè)值代表分區(qū)邏輯名,A2第8個(gè)值代表分區(qū)掛載名;
[0044]4.1.7:遍歷L,根據(jù)掛載名找到匹配的分區(qū)信息實(shí)體,若找到則對(duì)其中的分區(qū)邏輯名進(jìn)行設(shè)值;
[0045]4.1.8:重復(fù)執(zhí)行 4.1.3。
[0046]4.2: NUM匹配方式執(zhí)行匹配分區(qū)邏輯和實(shí)際掛載路徑,詳細(xì)步驟如下:
[0047]4.2.1:判斷文目錄/proc/emmc是否存在,若存在執(zhí)行4.2.2,若不存在執(zhí)行4.3;
[0048]4.2.2:創(chuàng)建字典MAP,執(zhí)行SHELL指令cat/proc/emmc,并保存結(jié)果為S3 ;
[0049]4.2.3:按行讀取S3,記錄結(jié)果為I ine,若I ine不為null執(zhí)行4.2.4,若I ine為null,代表結(jié)果解析結(jié)束,并執(zhí)行4.2.9;
[0050]4.2.4:去除I ine的空字符串,使得結(jié)果為變?yōu)橛行?shù)據(jù);
[0051 ] 4.2.5:根據(jù)正則式“\\s+,,,分割I(lǐng) ine,分割結(jié)果是為8的固定長(zhǎng)度,將結(jié)果保存在長(zhǎng)度為8的數(shù)組A3中;
[0052]4.2.6:若A3第三位包含“fat”字符串,則將其替換為“internal_sdcard” ;
[0053]4.2.7:A3第I個(gè)值和A3第4個(gè)值為作為鍵和值保存在MAP中;
[0054]4.2.8:重復(fù)執(zhí)行 4.2.3;
[0055]4.2.9:執(zhí)行SHELL指令ls-1 P2,并保存結(jié)果為S4;
[0056]4.2.10:按行讀取S4,記錄結(jié)果為line,若line不為null執(zhí)行4.2.11,若line為null,代表結(jié)果解析結(jié)束,并執(zhí)行4.3 ;
[0057]4.2.11:去除I ine的空字符串,使得結(jié)果為變?yōu)橛行?shù)據(jù);
[0058]4.2.12:根據(jù)正則式“\\s+”,分割line,分割結(jié)果是為8的固定長(zhǎng)度,將結(jié)果保存在長(zhǎng)度為8的數(shù)組A4中;
[0059 ] 4.2.13: A4第6個(gè)值代表分區(qū)邏輯名,A4第8個(gè)值代表分區(qū)掛載名簡(jiǎn)寫;
[0060]4.2.14:遍歷L,根據(jù)掛載名找到匹配的分區(qū)信息實(shí)體,并構(gòu)建KEY: 〃emmC_〃+掛載名+〃:〃,從MAP根據(jù)KEY找到具體的分區(qū)邏輯名,并對(duì)分區(qū)信息實(shí)體中的分區(qū)邏輯名進(jìn)行設(shè)值,重復(fù)執(zhí)行4.2.10;
[0061]4.3:補(bǔ)充匹配方式執(zhí)行匹配分區(qū)邏輯和實(shí)際掛載路徑,詳細(xì)步驟如下:
[0062]4.3.1:LS方式進(jìn)行獲取虛擬名稱和分區(qū)實(shí)際名稱的映射關(guān)系;
[0063]4.3.1.1:創(chuàng)建字典MAP_LS,執(zhí)行SHELL指令“l(fā)s-1”,并保存結(jié)果為S5;
[0064]4.3.1.2:按行讀取S5,記錄結(jié)果為line,若line不為null執(zhí)行4.3.1.3,若line為null,代表結(jié)果解析結(jié)束,并執(zhí)行4.3.2;
[0065]4.3.1.3:去除I ine的空字符串,并判斷I ine是否包含“/dev/block”,若包含則執(zhí)行4.3.1.4,若不包含則執(zhí)行4.3.1.2;
[0066]4.3.1.4:根據(jù)正則式“\\s+”,分割I(lǐng) ine,分割結(jié)果是為8的固定長(zhǎng)度,將結(jié)果保存在長(zhǎng)度為8的數(shù)組A5中;
[0067]4.3.1.5:A5第6個(gè)值和A3第8個(gè)值為作為鍵和值保存在MAP中;
[0068]4.3.1.6:重復(fù)執(zhí)行 4.3.1.2;
[0069]4.3.2:M0UNT方式獲取分區(qū)實(shí)際名稱和分區(qū)掛載路徑的映射關(guān)系;
[0070]4.3.2.1:創(chuàng)建字典MAP_M0UNT,執(zhí)行SHELL指令“mount”,并保存結(jié)果為S6;
[0071]4.3.2.2:按行讀取S6,記錄結(jié)果為I ine,若I ine不為null執(zhí)行4.2.4,若I ine為null,代表結(jié)果解析結(jié)束,并執(zhí)行4.3.2;
[0072]4.3.2.3:去除line的空字符串,并判斷l(xiāng)ine是否包含“ext4”、“vfat”、“yaffs2”,若包含則執(zhí)行4.3.2.4,若不包含執(zhí)行4.3.2.2;
[0073]4.3.2.4:若A6第一個(gè)值的是以“/dev/block/vold”開始則執(zhí)行4.3.2.4.I,若否則執(zhí)行 4.3.2.5;
[0074]4.3.2.4.1:根據(jù)正則式“\\s+”,分割I(lǐng) ine,結(jié)果保存到數(shù)組A6中;
[0075]4.3.2.4.2:將A6的第一個(gè)值,最后包含的地方開始分割,并作為KEY;
[0076]4.3.2.4.3:根據(jù)KEY從MAP_P中獲取分區(qū)信息實(shí)體,若不為空則代表該實(shí)體為sd卡實(shí)體執(zhí)行4.3.2.4.4,若為空則執(zhí)行4.3.2.5;
[0077]4.3.2.4.4:判斷8(1卡實(shí)體是否是的掛載路徑是否是1]111101311^]^1,若是則將“611:_sdcard”作為值,〃/dev/block/mmcblklpr作為鍵,保存到MAP_M0UNT中,若否則執(zhí)行A6第二個(gè)值作為值,〃/dev/block/mmcblklpr作為鍵,保存到MAP_M0UNT中;
[0078]4.3.2.5:判斷A6第一個(gè)值是否以“/dev/block/”開始,若是則將A6第一個(gè)值作為鍵,A6第二個(gè)值作為值,保存到MAP_M0UNT中,若否將A6第一個(gè)值a6_l,將+a6 j作為鍵,A6第二個(gè)值作為值,保存到MAP_M0UNT中;
[0079]4.3.2.6:遍歷分區(qū)信息實(shí)體集合1^,獲取分區(qū)實(shí)體中的掛載路徑?_111(1以,并用7dev/block/”+p_indeX作為鍵在MAP_M0UNT獲取值,當(dāng)獲取成功是將該分區(qū)實(shí)體的分區(qū)名改為該值。
[0080]與現(xiàn)有技術(shù)相比本發(fā)明的優(yōu)點(diǎn)在于:依靠智能手機(jī)便可分區(qū)掛載信息的獲取,可以適應(yīng)手機(jī)的移動(dòng)性,現(xiàn)場(chǎng)取證,防止證據(jù)被破壞,能夠準(zhǔn)確獲取智能手機(jī)的完整分區(qū)掛載
?目息O
【具體實(shí)施方式】
[0081]為使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下舉實(shí)施例,對(duì)本發(fā)明做進(jìn)一步詳細(xì)說(shuō)明。
[0082]—種基于安卓平臺(tái)獲取手機(jī)分區(qū)掛載信息的方法,包括以下步驟:
[0083]一、構(gòu)建分區(qū)信息實(shí)體;
[0084]二、獲取分區(qū)大小、分區(qū)掛載路徑;
[0085]三、確認(rèn)分區(qū)名獲取方式;
[0086]四、分區(qū)邏輯名稱和實(shí)際掛載路徑的匹配。
[0087]一、構(gòu)建分區(qū)信息實(shí)體類,類名為Cl。
[0088]該實(shí)體類的構(gòu)建用于描述分區(qū)信息,它包括最基本的三個(gè)屬性:分區(qū)名、分區(qū)大小和分區(qū)位置;
[0089]其中,分區(qū)名是分區(qū)在邏輯層的名稱;分區(qū)位置是分區(qū)的在系統(tǒng)中的掛載路徑。
[0090]實(shí)體類的創(chuàng)建方式是直接利于系統(tǒng)方法,新建分區(qū)信息實(shí)體,新建實(shí)體的方法為
newo
[0091]創(chuàng)建分區(qū)信息實(shí)體集合L,該集合專門用于保存分區(qū)信息實(shí)體,當(dāng)解析結(jié)束之后,集合L保存有該智能手機(jī)的完整分區(qū)信息。
[0092]二、獲取分區(qū)大小、分區(qū)掛載路徑。
[0093]確認(rèn)分區(qū)大小可以直接通過(guò)執(zhí)行SHELL指令的方式,然后處理SHELL指令返回結(jié)果的方式進(jìn)行。
[0094]創(chuàng)建合用于保存所有的分區(qū)信息實(shí)體。
[0095]2.1:調(diào)用原生借口,開啟PROCESS進(jìn)程;
[0096]2.2:執(zhí)行SHELL指令cat/proc/part it 1ns,并保存執(zhí)行指令的結(jié)果,記錄為SI ;
[0097]2.3:按行讀取SI,記錄結(jié)果為I ine,若I ine不為null執(zhí)行2.4,若I ine為null,代表結(jié)果解析結(jié)束執(zhí)行步驟三;
[0098]2.4:去除line的空字符串,使得結(jié)果變?yōu)橛行?shù)據(jù);
[0099]2.5:判斷I ine是否包含“major”,若是則代表本行不是有效數(shù)據(jù),重新執(zhí)行2.3操作;
[0100]2.6:利用正則式“\\s*”,判斷本行是否全是特殊字符。如果是執(zhí)行2.3操作,如果不是執(zhí)行則2.7操作;
[0101]2.7:根據(jù)正則式“\\s+”,分割line,分割結(jié)果是為4的固定長(zhǎng)度,將結(jié)果保存在長(zhǎng)度為4的數(shù)組Al中;
[0102]2.8:創(chuàng)建分區(qū)信息實(shí)體,并根據(jù)以上獲取的數(shù)據(jù)對(duì)分區(qū)信息實(shí)體設(shè)置具體的值。其中分區(qū)大小Al第3個(gè)值,掛載路徑名為Al第4個(gè)值,將該實(shí)體加入L中;將Al的第一個(gè)值al_I和第二個(gè)al_2值合并,合并方式al_l + “:”+al_2;作為key,分區(qū)實(shí)體信息作為值保存在MAP_P起來(lái);
[0103]2.9:執(zhí)行 2.3操作。
[0104]三、確認(rèn)分區(qū)名獲取方式。
[0105]通過(guò)步驟二已經(jīng)將分區(qū)的信息保存在MAP_P之中,但是步驟二并沒(méi)有獲取到分區(qū)的邏輯名稱,我們必須要將分區(qū)邏輯名和實(shí)際掛載路徑匹配起來(lái)。而分區(qū)名信息的獲取方法是通過(guò)讀取文件的方法獲取,獲取文件名的方式有三種,第一是BY_NUM方式讀取,第二是BY_NAME方式讀取,第三種DEFALUT方式讀取方式。該三種分區(qū)名稱獲取的方式BY_NAME為最優(yōu)先方式,并且該種分區(qū)名讀取方式最為簡(jiǎn)單和有效,其次是執(zhí)行BY_NUM,最后為執(zhí)行DEFAULT 方式。
[0106]3.1:BY_NAME方式讀取分區(qū)名信息;
[0?07] 3.1.1:獲取根目錄下所有文件名稱,根目錄是/dev/block/platform/;
[0108]3.1.2:判斷該目錄下是否存在目錄,如果存在執(zhí)行3.1.3,如果不存在那么執(zhí)行3.2操作;
[0109]3.1.3:遍歷目錄,在每個(gè)目錄的后面添加7by_name”,并判斷該目錄是否存在。如果存在,保存路徑記為Pl,記錄BY_NAME讀取方式Fl為TURE,并執(zhí)行操作四。如果不存在則記錄標(biāo)記Fl為FALSE,那么執(zhí)行3.2操作。
[0110]3.2:BY_NUM方式讀取分區(qū)名信息;
[0?11 ] 3.2.1:獲取根目錄下所有文件名稱,根目錄是/dev/block/platform/;
[0112]3.2.2:判斷該目錄下是否存在目錄。如果存在執(zhí)行3.2.3,如果不存在那么執(zhí)行3.3操作;
[0113]3.2.3:遍歷目錄,在每個(gè)目錄的后面添加“/by_num”,并判斷該目錄是否存在,如果存在,保存路徑記為P2,記錄BY_NAME讀取方式標(biāo)記F2為TRUE,并執(zhí)行操作四;如果不存在,則記錄標(biāo)記F2為FALSE,那么執(zhí)行3.3操作。
[0114]3.3:DEFALUT方式讀取分區(qū)名信息;
[0115]當(dāng)BY_NAME和BY_NUM方式均不成立,即Fl,F(xiàn)2均為FALSE時(shí)則直接執(zhí)行步驟四。
[0116]四、分區(qū)邏輯名稱和實(shí)際掛載路徑的匹配,根據(jù)第三步執(zhí)行后得到的標(biāo)志Fl,F(xiàn)2,F(xiàn)3標(biāo)志進(jìn)行分區(qū)邏輯名和分區(qū)掛載路徑的匹配;
[0117]情況有三種第一種若Fl為TRUE執(zhí)行4.1操作,第二種若Fl為FALSE,F(xiàn)2為TRUE,執(zhí)行4.2操作,第三種若Fl,F(xiàn)2均為FALSE,則執(zhí)行4.3操作。
[0118]4.1: NAME匹配方式執(zhí)行匹配分區(qū)邏輯和實(shí)際掛載路徑,詳細(xì)步驟如下:
[0119]4.1.1:調(diào)用原生借口,開啟PROCESS進(jìn)程;
[0120]4.1.2:執(zhí)行SHELL指令I(lǐng)s-1Pl,并保存結(jié)果為S2;
[0121 ] 4.1.3:按行讀取S2,記錄結(jié)果為I ine,若I ine不為null執(zhí)行4.1.4,若I ine為null,代表結(jié)果解析結(jié)束,并執(zhí)行4.3 ;
[0122]4.1.4:去除I ine的空字符串,使得結(jié)果為變?yōu)橛行?shù)據(jù);
[0123]4.1.5:根據(jù)正則式“\\s+,,,分割I(lǐng) ine,分割結(jié)果是為8的固定長(zhǎng)度,將結(jié)果保存在長(zhǎng)度為8的數(shù)組A2中;
[0124]4.1.6:A2第6個(gè)值代表分區(qū)邏輯名,A2第8個(gè)值代表分區(qū)掛載名;
[0125]4.1.7:遍歷L,根據(jù)掛載名找到匹配的分區(qū)信息實(shí)體,若找到則對(duì)其中的分區(qū)邏輯名進(jìn)行設(shè)值;
[0126]4.1.8:重復(fù)執(zhí)行 4.1.3。
[0127]4.2:NUM匹配方式執(zhí)行匹配分區(qū)邏輯和實(shí)際掛載路徑,詳細(xì)步驟如下:
[0128]4.2.1:判斷文目錄/proc/emmc是否存在,若存在執(zhí)行4.2.2,若不存在執(zhí)行4.3;
[0129]4.2.2:創(chuàng)建字典MAP,執(zhí)行SHELL指令cat/proc/emmc,并保存結(jié)果為S3 ;
[0130]4.2.3:按行讀取S3,記錄結(jié)果為I ine,若I ine不為null執(zhí)行4.2.4,若I ine為null,代表結(jié)果解析結(jié)束,并執(zhí)行4.2.9;
[0131 ] 4.2.4:去除I ine的空字符串,使得結(jié)果為變?yōu)橛行?shù)據(jù);
[0132]4.2.5:根據(jù)正則式“\\s+,,,分割I(lǐng) ine,分割結(jié)果是為8的固定長(zhǎng)度,將結(jié)果保存在長(zhǎng)度為8的數(shù)組A3中;
[0133]4.2.6:若A3第三位包含“fat”字符串,則將其替換為“internal_sdcard” ;
[0134]4.2.7:A3第I個(gè)值和A3第4個(gè)值為作為鍵和值保存在MAP中;
[0135]4.2.8:重復(fù)執(zhí)行 4.2.3;
[0136]4.2.9:執(zhí)行SHELL指令ls-1 P2,并保存結(jié)果為S4;
[ΟΙ37] 4.2.10:按行讀取S4,記錄結(jié)果為I ine,若I ine不為null執(zhí)行4.2.11,若line為null,代表結(jié)果解析結(jié)束,并執(zhí)行4.3 ;
[0138]4.2.11:去除I ine的空字符串,使得結(jié)果為變?yōu)橛行?shù)據(jù);
[0139]4.2.12:根據(jù)正則式“\\s+”,分割line,分割結(jié)果是為8的固定長(zhǎng)度,將結(jié)果保存在長(zhǎng)度為8的數(shù)組A4中;
[0140]4.2.13: A4第6個(gè)值代表分區(qū)邏輯名,A4第8個(gè)值代表分區(qū)掛載名簡(jiǎn)寫;
[0141]4.2.14:遍歷L,根據(jù)掛載名找到匹配的分區(qū)信息實(shí)體,并構(gòu)建KEY: 〃emmC_〃+掛載名+〃:〃,從MAP根據(jù)KEY找到具體的分區(qū)邏輯名,并對(duì)分區(qū)信息實(shí)體中的分區(qū)邏輯名進(jìn)行設(shè)值,重復(fù)執(zhí)行4.2.10;
[0142]4.3:補(bǔ)充匹配方式執(zhí)行匹配分區(qū)邏輯和實(shí)際掛載路徑,詳細(xì)步驟如下:
[0143]當(dāng)NUM和NAME方式均無(wú)法獲取到分區(qū)邏輯名和實(shí)際掛載名的匹配時(shí),執(zhí)行最后的補(bǔ)充方式匹配。
[0144]4.3.1:LS方式進(jìn)行獲取虛擬名稱和分區(qū)實(shí)際名稱的映射關(guān)系;
[0145]4.3.1.1:創(chuàng)建字典MAP_LS,執(zhí)行SHELL指令“l(fā)s-1”,并保存結(jié)果為S5;
[0146]4.3.1.2:按行讀取S5,記錄結(jié)果為I ine,若I ine不為null執(zhí)行4.3.1.3,若I ine為null,代表結(jié)果解析結(jié)束,并執(zhí)行4.3.2;
[0147]4.3.1.3:去除I ine的空字符串,并判斷I ine是否包含“/dev/block”,若包含則執(zhí)行4.3.1.4,若不包含則執(zhí)行4.3.1.2;
[0148]4.3.1.4:根據(jù)正則式“\\s+”,分割line,分割結(jié)果是為8的固定長(zhǎng)度,將結(jié)果保存在長(zhǎng)度為8的數(shù)組A5中;
[0149]4.3.1.5:A5第6個(gè)值和A3第8個(gè)值為作為鍵和值保存在MAP中;
[0150]4.3.1.6:重復(fù)執(zhí)行 4.3.1.2。
[0151]4.3.2:M0UNT方式獲取分區(qū)實(shí)際名稱和分區(qū)掛載路徑的映射關(guān)系;
[0152]4.3.2.1:創(chuàng)建字典MAP_M0UNT,執(zhí)行SHELL指令“mount”,并保存結(jié)果為S6;
[0153]4.3.2.2:按行讀取S6,記錄結(jié)果為I ine,若I ine不為null執(zhí)行4.2.4,若I ine為null,代表結(jié)果解析結(jié)束,并執(zhí)行4.3.2;
[0154]4.3.2.3:去除line的空字符串,并判斷l(xiāng)ine是否包含“ext4”、“vfat”、“yaffs2”,若包含則執(zhí)行4.3.2.4,若不包含執(zhí)行4.3.2.2;
[0155]4.3.2.4:若A6第一個(gè)值的是以“/dev/block/vold”開始則執(zhí)行4.3.2.4.1,若否則執(zhí)行 4.3.2.5;
[0156]4.3.2.4.1:根據(jù)正則式“\\奸”,分割1加,結(jié)果保存到數(shù)組46中;
[0157]4.3.2.4.2:將A6的第一個(gè)值,最后包含的地方開始分割,并作為KEY;
[0158]4.3.2.4.3:根據(jù)KEY從MAP_P中獲取分區(qū)信息實(shí)體,若不為空則代表該實(shí)體為sd卡實(shí)體執(zhí)行4.3.2.4.4,若為空則執(zhí)行4.3.2.5;
[0159]4.3.2.4.4:判斷8(1卡實(shí)體是否是的掛載路徑是否是麵1(^11^1?1,若是則將“以七_(dá)sdcard”作為值,〃/dev/block/mmcblklpr作為鍵,保存到MAP_M0UNT中,若否則執(zhí)行A6第二個(gè)值作為值,〃/dev/block/mmcblklpr作為鍵,保存到MAP_M0UNT中。
[0160]4.3.2.5:判斷A6第一個(gè)值是否以“/dev/block/”開始,若是則將A6第一個(gè)值作為鍵,A6第二個(gè)值作為值,保存到MAP_M0UNT中,若否將A6第一個(gè)值a6_l,將+a6 j作為鍵,A6第二個(gè)值作為值,保存到MAP_M0UNT中。
[0161]4.3.2.6:遍歷分區(qū)信息實(shí)體集合1^,獲取分區(qū)實(shí)體中的掛載路徑?」11(1^,并用7dev/block/”+p_indeX作為鍵在MAP_M0UNT獲取值,當(dāng)獲取成功是將該分區(qū)實(shí)體的分區(qū)名改為該值。
[0162]本領(lǐng)域的普通技術(shù)人員將會(huì)意識(shí)到,這里所述的實(shí)施例是為了幫助讀者理解本發(fā)明的實(shí)施方法,應(yīng)被理解為本發(fā)明的保護(hù)范圍并不局限于這樣的特別陳述和實(shí)施例。本領(lǐng)域的普通技術(shù)人員可以根據(jù)本發(fā)明公開的這些技術(shù)啟示做出各種不脫離本發(fā)明實(shí)質(zhì)的其它各種具體變形和組合,這些變形和組合仍然在本發(fā)明的保護(hù)范圍內(nèi)。
【主權(quán)項(xiàng)】
1.一種基于安卓平臺(tái)獲取手機(jī)分區(qū)掛載信息的方法,其特征在于包括以下步驟: 一、構(gòu)建分區(qū)信息實(shí)體; 該實(shí)體類的構(gòu)建用于描述分區(qū)信息,它包括最基本的三個(gè)屬性:分區(qū)名、分區(qū)大小和分區(qū)位置; 其中,分區(qū)名是分區(qū)在邏輯層的名稱;分區(qū)位置是分區(qū)的在系統(tǒng)中的掛載路徑; 實(shí)體類的創(chuàng)建方式是直接利于系統(tǒng)方法,新建分區(qū)信息實(shí)體,新建實(shí)體的方法為new; 創(chuàng)建分區(qū)信息實(shí)體集合L,該集合專門用于保存分區(qū)信息實(shí)體,當(dāng)解析結(jié)束之后,集合L保存有該智能手機(jī)的完整分區(qū)信息; 二、獲取分區(qū)大小、分區(qū)掛載路徑; 三、確認(rèn)分區(qū)名獲取方式; 四、分區(qū)邏輯名稱和實(shí)際掛載路徑的匹配。2.根據(jù)權(quán)利要求1所述的一種基于安卓平臺(tái)獲取手機(jī)分區(qū)掛載信息的方法,其特征在于步驟二獲取分區(qū)大小、分區(qū)掛載路徑的詳細(xì)步驟如下: 2.1:調(diào)用原生借口,開啟PROCESS進(jìn)程; 2.2:執(zhí)行SHELL指令cat/proc/partit1ns,并保存執(zhí)行指令的結(jié)果,記錄為SI ; 2.3:按行讀取SI,記錄結(jié)果為line,若line不為null執(zhí)行2.4,若line為null,代表結(jié)果解析結(jié)束執(zhí)行步驟三; 2.4:去除Iine的空字符串,使得結(jié)果變?yōu)橛行?shù)據(jù); 2.5:判斷I ine是否包含“major”,若是則代表本行不是有效數(shù)據(jù),重新執(zhí)行2.3操作;2.6:利用正則式“\\s*”,判斷本行是否全是特殊字符。如果是執(zhí)行2.3操作,如果不是執(zhí)行則2.7操作; 2.7:根據(jù)正則式“\\s+”,分割line,分割結(jié)果是為4的固定長(zhǎng)度,將結(jié)果保存在長(zhǎng)度為4的數(shù)組Al中; 2.8:創(chuàng)建分區(qū)信息實(shí)體,并根據(jù)以上獲取的數(shù)據(jù)對(duì)分區(qū)信息實(shí)體設(shè)置具體的值。其中分區(qū)大小Al第3個(gè)值,掛載路徑名為Al第4個(gè)值,將該實(shí)體加入L中;將Al的第一個(gè)值alj和第二個(gè)al_2值合并,合并方式al_l + +al_2;作為key,分區(qū)實(shí)體信息作為值保存在MAP_P起來(lái); 2.9:執(zhí)行2.3操作。3.根據(jù)權(quán)利要求2所述的一種基于安卓平臺(tái)獲取手機(jī)分區(qū)掛載信息的方法,其特征在于步驟三確認(rèn)分區(qū)名獲取方式的詳細(xì)步驟如下: 3.1: BY_NAME方式讀取分區(qū)名信息; 3.1.1:獲取根目錄下所有文件名稱,根目錄是/dev/block/platform/; 3.1.2:判斷該目錄下是否存在目錄,如果存在執(zhí)行3.1.3,如果不存在那么執(zhí)行3.2; 3.1.3:遍歷目錄,在每個(gè)目錄的后面添加7by_name”,并判斷該目錄是否存在。如果存在,保存路徑記為Pl,記錄BY_NAME讀取方式Fl為TURE,并執(zhí)行步驟四。如果不存在則記錄標(biāo)記Fl為FALSE,那么執(zhí)行3.2; 3.2: BY_NUM方式讀取分區(qū)名信息; 3.2.1:獲取根目錄下所有文件名稱,根目錄是/dev/block/platform/; 3.2.2:判斷該目錄下是否存在目錄。如果存在執(zhí)行3.2.3,如果不存在那么執(zhí)行3.3操作; 3.2.3:遍歷目錄,在每個(gè)目錄的后面添加“/by_num”,并判斷該目錄是否存在,如果存在,保存路徑記為P2,記錄BY_NAME讀取方式標(biāo)記F2為TRUE,并執(zhí)行步驟四;如果不存在,則記錄標(biāo)記F2為FALSE,那么執(zhí)行3.3操作; 3.3: DEFALUT方式讀取分區(qū)名信息; 當(dāng)BY_NAME和BY_NUM方式均不成立,S卩Fl,F(xiàn)2均為FALSE時(shí)則直接執(zhí)行步驟四。4.根據(jù)權(quán)利要求3所述的一種基于安卓平臺(tái)獲取手機(jī)分區(qū)掛載信息的方法,其特征在于:步驟四分區(qū)邏輯名稱和實(shí)際掛載路徑的匹配,需根據(jù)步驟三執(zhí)行后得到的標(biāo)志Fl,F(xiàn)2,F(xiàn)3標(biāo)志進(jìn)行分區(qū)邏輯名和分區(qū)掛載路徑的匹配; 情況有三種,第一種若Fl為TRUE執(zhí)行4.1操作;第二種若Fl為FALSE,F(xiàn)2為TRUE,執(zhí)行4.2操作;第三種若Fl,F(xiàn)2均為FALSE,則執(zhí)行4.3操作; 4.1:NAME匹配方式執(zhí)行匹配分區(qū)邏輯和實(shí)際掛載路徑,詳細(xì)步驟如下: 4.1.1:調(diào)用原生借口,開啟PROCESS進(jìn)程; 4.1.2:執(zhí)行SHELL指令I(lǐng)s-1Pl,并保存結(jié)果為S2; 4.1.3:按行讀取S2,記錄結(jié)果為line,若line不為null執(zhí)行4.1.4,若line為null,代表結(jié)果解析結(jié)束,并執(zhí)行4.3 ; 4.1.4:去除I ine的空字符串,使得結(jié)果為變?yōu)橛行?shù)據(jù); 4.1.5:根據(jù)正則式“\\s+”,分割I(lǐng) ine,分割結(jié)果是為8的固定長(zhǎng)度,將結(jié)果保存在長(zhǎng)度為8的數(shù)組A2中; 4.1.6:A2第6個(gè)值代表分區(qū)邏輯名,A2第8個(gè)值代表分區(qū)掛載名; 4.1.7:遍歷L,根據(jù)掛載名找到匹配的分區(qū)信息實(shí)體,若找到則對(duì)其中的分區(qū)邏輯名進(jìn)行設(shè)值; 4.1.8:重復(fù)執(zhí)行4.1.3。 4.2: NUM匹配方式執(zhí)行匹配分區(qū)邏輯和實(shí)際掛載路徑,詳細(xì)步驟如下: 4.2.1:判斷文目錄/proc/emmc是否存在,若存在執(zhí)行4.2.2,若不存在執(zhí)行4.3 ; 4.2.2:創(chuàng)建字典MAP,執(zhí)行SHELL指令cat/proc/emmc,并保存結(jié)果為S3 ; 4.2.3:按行讀取S3,記錄結(jié)果為I ine,若I ine不為null執(zhí)行4.2.4,若I ine為null,代表結(jié)果解析結(jié)束,并執(zhí)行4.2.9; 4.2.4:去除I ine的空字符串,使得結(jié)果為變?yōu)橛行?shù)據(jù); 4.2.5:根據(jù)正則式“\\s+”,分割I(lǐng) ine,分割結(jié)果是為8的固定長(zhǎng)度,將結(jié)果保存在長(zhǎng)度為8的數(shù)組A3中; 4.2.6:若A3第三位包含“fat”字符串,則將其替換為“internal_sdcard” ; 4.2.7:A3第I個(gè)值和A3第4個(gè)值為作為鍵和值保存在MAP中; 4.2.8:重復(fù)執(zhí)行4.2.3; 4.2.9:執(zhí)行SHELL指令I(lǐng)s-1 P2,并保存結(jié)果為S4; 4.2.10:按行讀取S4,記錄結(jié)果為I ine,若I ine不為null執(zhí)行4.2.11,若line為null,代表結(jié)果解析結(jié)束,并執(zhí)行4.3 ; 4.2.11:去除I ine的空字符串,使得結(jié)果為變?yōu)橛行?shù)據(jù); 4.2.12:根據(jù)正則式“\\s+”,分割line,分割結(jié)果是為8的固定長(zhǎng)度,將結(jié)果保存在長(zhǎng)度為8的數(shù)組A4中; 4.2.13:A4第6個(gè)值代表分區(qū)邏輯名,A4第8個(gè)值代表分區(qū)掛載名簡(jiǎn)寫; 4.2.14:遍歷L,根據(jù)掛載名找到匹配的分區(qū)信息實(shí)體,并構(gòu)建KEY: 〃emmC_〃+掛載名+〃:〃,從MAP根據(jù)KEY找到具體的分區(qū)邏輯名,并對(duì)分區(qū)信息實(shí)體中的分區(qū)邏輯名進(jìn)行設(shè)值,重復(fù)執(zhí)行4.2.10; 4.3:補(bǔ)充匹配方式執(zhí)行匹配分區(qū)邏輯和實(shí)際掛載路徑,詳細(xì)步驟如下: 4.3.1:LS方式進(jìn)行獲取虛擬名稱和分區(qū)實(shí)際名稱的映射關(guān)系; 4.3.1.1:創(chuàng)建字典MAP_LS,執(zhí)行SHELL指令“l(fā)s-1”,并保存結(jié)果為S5; 4.3.1.2:按行讀取S5,記錄結(jié)果為I ine,若I ine不為null執(zhí)行4.3.1.3,若I ine為null,代表結(jié)果解析結(jié)束,并執(zhí)行4.3.2; 4.3.1.3:去除I ine的空字符串,并判斷I ine是否包含“/dev/block”,若包含則執(zhí)行4.3.1.4,若不包含則執(zhí)行4.3.1.2; 4.3.1.4:根據(jù)正則式“\\s+”,分割line,分割結(jié)果是為8的固定長(zhǎng)度,將結(jié)果保存在長(zhǎng)度為8的數(shù)組A5中; 4.3.1.5:A5第6個(gè)值和A3第8個(gè)值為作為鍵和值保存在MAP中; 4.3.1.6:重復(fù)執(zhí)行 4.3.1.2; 4.3.2:M0UNT方式獲取分區(qū)實(shí)際名稱和分區(qū)掛載路徑的映射關(guān)系; 4.3.2.1:創(chuàng)建字典MAP_M0UNT,執(zhí)行SHELL指令“mount”,并保存結(jié)果為S6; 4.3.2.2:按行讀取S6,記錄結(jié)果為line,若I ine不為null執(zhí)行4.2.4,若line為null,代表結(jié)果解析結(jié)束,并執(zhí)行4.3.2; 4.3.2.3:去除line的空字符串,并判斷l(xiāng)ine是否包含“ext4”、“vfat”、“yaffs2”,若包含則執(zhí)行4.3.2.4,若不包含執(zhí)行4.3.2.2; 4.3.2.4:若A6第一個(gè)值的是以“/dev/block/void”開始則執(zhí)行4.3.2.4.1,若否則執(zhí)行4.3.2.5; 4.3.2.4.1:根據(jù)正則式“\\s+”,分割I(lǐng) ine,結(jié)果保存到數(shù)組A6中; 4.3.2.4.2:將A6的第一個(gè)值,最后包含的地方開始分割,并作為KEY; 4.3.2.4.3:根據(jù)KEY從MAP_P中獲取分區(qū)信息實(shí)體,若不為空則代表該實(shí)體為sd卡實(shí)體執(zhí)行4.3.2.4.4,若為空則執(zhí)行4.3.2.5; 4.3.2.4.4:判斷sd卡實(shí)體是否是的掛載路徑是否是mmcbIkIpI,若是則將“ext_sdcard”作為值,〃/dev/block/mmcblklpr作為鍵,保存到MAP_M0UNT中,若否則執(zhí)行A6第二個(gè)值作為值,〃/dev/block/mmcblklpr作為鍵,保存到MAP_M0UNT中; 4.3.2.5:判斷A6第一個(gè)值是否以“/dev/block/”開始,若是則將A6第一個(gè)值作為鍵,A6第二個(gè)值作為值,保存到MAP_M0UNT中,若否將A6第一個(gè)值a6_l,將+a6_l作為鍵,A6第二個(gè)值作為值,保存到MAP_M0UNT中; 4.3.2.6:遍歷分區(qū)信息實(shí)體集合L,獲取分區(qū)實(shí)體中的掛載路徑p_index,并用“/dev/block/”+pjndex作為鍵在MAP_M0UNT獲取值,當(dāng)獲取成功是將該分區(qū)實(shí)體的分區(qū)名改為該值。
【文檔編號(hào)】G06F3/06GK105892940SQ201610188485
【公開日】2016年8月24日
【申請(qǐng)日】2016年3月29日
【發(fā)明人】黃旭, 聶學(xué)良
【申請(qǐng)人】四川秘?zé)o痕信息安全技術(shù)有限責(zé)任公司