两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

一種基于相似內(nèi)核的手機(jī)動(dòng)態(tài)內(nèi)存提取方法與流程

文檔序號(hào):11154563閱讀:405來(lái)源:國(guó)知局
本發(fā)明涉及一種手機(jī)動(dòng)態(tài)內(nèi)存提取方法,特別是關(guān)于一種基于相似內(nèi)核的手機(jī)動(dòng)態(tài)內(nèi)存提取方法。
背景技術(shù)
::相比于傳統(tǒng)的手機(jī)取證方向,動(dòng)態(tài)內(nèi)存取證作為一個(gè)新興的領(lǐng)域,因此在動(dòng)態(tài)內(nèi)存取證和分析方面的研究還比較少。目前在國(guó)內(nèi)還沒(méi)有發(fā)表相關(guān)的研究成果,相關(guān)研究成果主要集中在國(guó)外的一些數(shù)字調(diào)查研究機(jī)構(gòu)。到目前為止,手機(jī)動(dòng)態(tài)內(nèi)存取證的研究主要經(jīng)歷了三個(gè)階段,即基于命令行的取證方式,主要代表為Android終端下的kill命令;基于Android調(diào)試工具的取證方式,即Android調(diào)試工具DDMS;以及基于編譯模塊的取證方式,主要為基于LiME的取證工具。國(guó)內(nèi)手機(jī)取證研究主要集中在SIM卡、SD卡和flash閃存數(shù)據(jù)的提取,尚無(wú)有關(guān)此類研究的報(bào)道。目前的研究趨勢(shì)為基于LiME和基于ReKall。(1)基于LiME:現(xiàn)有技術(shù)中的一種在低溫狀態(tài)下提取android手機(jī)隨機(jī)訪問(wèn)內(nèi)存的方法原理是剩磁原理,在低溫狀態(tài)下隨機(jī)訪問(wèn)內(nèi)存的數(shù)據(jù)在斷電的情況下還能持續(xù)一段時(shí)間。該文章用了samsungGalaxyNexus手機(jī)進(jìn)行測(cè)試,即使在引導(dǎo)程序加密的情況下,也能在低溫環(huán)境下直接從RAM中恢復(fù)了磁盤中的加密密鑰、通訊錄、訪問(wèn)過(guò)的網(wǎng)站等敏感數(shù)據(jù)。其中FROST技術(shù)的實(shí)現(xiàn)也是基于LiME工具,但該文章沒(méi)有對(duì)提取的數(shù)據(jù)做任何分析,而且用于試驗(yàn)的手機(jī)型號(hào)也僅限于samsungGalaxyNexus。(2)基于ReKall:現(xiàn)有技術(shù)中通過(guò)基于硬件或軟件兩個(gè)方面,采用傳統(tǒng)的物理內(nèi)存提取技術(shù),并在使用了反取證技術(shù)的環(huán)境下進(jìn)行內(nèi)存提取測(cè)試。傳統(tǒng)的物理內(nèi)存提取技術(shù)在使用反取證技術(shù)的環(huán)境中,不能成功、或僅能提取到不完整的內(nèi)存?,F(xiàn)有技術(shù)中還有一種新的物理內(nèi)存提取技術(shù),原理是通過(guò)PTE(pagetableentry,頁(yè)面表入口)來(lái)獲取物理地址空間。然而使用的PMEM工具僅能在Windows、Linux、MacOSX運(yùn)行,尚不能提取Android手機(jī)的物理內(nèi)存。目前基于Linux物理內(nèi)存提取的問(wèn)題,即需要對(duì)相應(yīng)的內(nèi)核版本分別編譯,增加的取證工作的難度,因此還有一種新的方法,能夠產(chǎn)生一個(gè)通用內(nèi)核模塊適用于一定范圍的Linux內(nèi)核版本,原理是將一個(gè)很小的內(nèi)存提取模塊注入到目標(biāo)系統(tǒng)中的一個(gè)有效內(nèi)核模塊中,并通過(guò)重定向技術(shù)使被寄生的模塊執(zhí)行提取內(nèi)存的代碼段,實(shí)驗(yàn)對(duì)象是2.6.38至3.10的Linux發(fā)行版,并沒(méi)有在Android上進(jìn)行測(cè)試。還有一種方案是在一個(gè)完整的開(kāi)源的動(dòng)態(tài)內(nèi)存提取與分析,該系列工具的支持對(duì)象有Windows,OSXandLinux。在2015年最新發(fā)布的版本中,該框架可以對(duì)Android的動(dòng)態(tài)內(nèi)存進(jìn)行分析,然而尚未能提取到Android的動(dòng)態(tài)內(nèi)存。而且,國(guó)內(nèi)手機(jī)取證研究主要集中在SIM卡、SD卡和flash閃存數(shù)據(jù)的提取,尚無(wú)有關(guān)此類研究的報(bào)道。對(duì)于動(dòng)態(tài)內(nèi)存的取證研究,目前只有LiME工具是最適合提取Android手機(jī)動(dòng)態(tài)內(nèi)存,無(wú)論在法律效應(yīng),技術(shù)特性和可行性上,LiME工具目前為止都是調(diào)查人員研究動(dòng)態(tài)內(nèi)存的提取的唯一選擇。由于LiME應(yīng)用時(shí)間不久,而且使用過(guò)程需要獲取對(duì)應(yīng)設(shè)備源代碼,進(jìn)行一定的編譯,缺乏一套成熟系統(tǒng)的提取程序,極大的限制了調(diào)查人員提取動(dòng)態(tài)內(nèi)存的工作效率。技術(shù)實(shí)現(xiàn)要素:針對(duì)上述問(wèn)題,本發(fā)明的目的是提供一種基于相似內(nèi)核的手機(jī)動(dòng)態(tài)內(nèi)存提取方法,該方法基于LiME工具的ELF格式與內(nèi)核符號(hào)機(jī)制進(jìn)行內(nèi)核配置,利用手機(jī)相似內(nèi)核進(jìn)行手機(jī)動(dòng)態(tài)內(nèi)存提取的方法。為實(shí)現(xiàn)上述目的,本發(fā)明采取以下技術(shù)方案:一種基于相似內(nèi)核的手機(jī)動(dòng)態(tài)內(nèi)存提取方法,其特征在于包括以下步驟:1)確定待取證的目標(biāo)Android手機(jī)的基本詳細(xì)信息,選取相似內(nèi)核源碼;2)收集目標(biāo)系統(tǒng)信息,由vermagic的定義得知需要進(jìn)行收集的信息,在目標(biāo)手機(jī)系統(tǒng)中使用shell基本命令獲取;3)編譯內(nèi)核源代碼,在Linux終端中切換至內(nèi)核源碼目錄,配置交叉編譯工具鏈;初始化內(nèi)核配置;4)編譯成功后在根目錄下生成.config文件,確認(rèn)配置中是否開(kāi)啟了可裝載模塊的相關(guān)功能,使用gedit編輯.config文件;5)按照目標(biāo)系統(tǒng)的內(nèi)核配置信息來(lái)構(gòu)造內(nèi)核模塊,構(gòu)造與目標(biāo)系統(tǒng)中一樣的vermagic字符串,由收集到的SMP、PREEMPT配置信息,進(jìn)一步對(duì).config進(jìn)行配置,將PREEMPT相關(guān)配置關(guān)閉,使模塊與目標(biāo)系統(tǒng)中的版本控制信息達(dá)到一致;6)對(duì)于出現(xiàn)模塊的modversions校驗(yàn)機(jī)制情況時(shí),關(guān)閉該校驗(yàn)機(jī)制并重新編譯內(nèi)核;7)對(duì)源代碼進(jìn)行交叉編譯,編譯時(shí)需要強(qiáng)制對(duì)內(nèi)核版本信息賦值;8)根據(jù)編譯完成的內(nèi)核源碼,使用LiME工具編譯外部模塊;9)將使用相似內(nèi)核構(gòu)造的LiME模塊上傳至目標(biāo)手機(jī)中,使用insmod命令加載模塊;10)在相似內(nèi)核源碼中尋找與__gnu_mcount_nc符號(hào)變量具有依賴性關(guān)系的函數(shù);11)當(dāng)內(nèi)核配置中啟用CONFIG_FUNCTION_TRACER相關(guān)選項(xiàng)時(shí),編譯內(nèi)核時(shí)就會(huì)觸發(fā)目標(biāo)系統(tǒng)對(duì)該符號(hào)的依賴,在內(nèi)核開(kāi)啟ftrace功能的初始階段,所有函數(shù)都會(huì)調(diào)用該符號(hào),編譯后的內(nèi)核向外界導(dǎo)出了__gnu_mcount_nc符號(hào);12)在相似內(nèi)核代碼中進(jìn)行內(nèi)核配置,將與ftrace有關(guān)的內(nèi)核編譯選項(xiàng)關(guān)閉,尋找與__gnu_mcount_nc符號(hào)有關(guān)的配置對(duì)內(nèi)核代碼目錄進(jìn)行遍歷,分析該函數(shù)調(diào)用間的關(guān)系,找出所有與該符號(hào)相關(guān)的配置選項(xiàng);13)進(jìn)入LiME目錄,將外部源碼路徑指定給相似內(nèi)核代碼,通過(guò)SD轉(zhuǎn)儲(chǔ)方式,以lime格式提取動(dòng)態(tài)內(nèi)存;14)提取完成后,在Android終端的SD存儲(chǔ)卡內(nèi)生成dump內(nèi)存文件,在本地終端使用pull操作將手機(jī)中的內(nèi)存文件取回至本地計(jì)算機(jī)中。進(jìn)一步,所述步驟3)中,根據(jù)設(shè)備默認(rèn)的配置文件,在終端下輸入以下命令開(kāi)始配置內(nèi)核功能:#makearch=armm0duosctc_00_defconfig。進(jìn)一步,所述步驟5)中,構(gòu)造內(nèi)核模塊是通過(guò)偽造vermagic字符串值的方法實(shí)現(xiàn),是根據(jù)目標(biāo)終端的系統(tǒng)內(nèi)核配置信息,在編譯源碼時(shí)使用與其一模一樣的配置選項(xiàng),偽造具有目標(biāo)信息特征的可裝載模塊,進(jìn)而欺騙系統(tǒng)對(duì)vermagic信息的機(jī)制,繞過(guò)目標(biāo)系統(tǒng)的內(nèi)核校驗(yàn)機(jī)制加載目標(biāo)模塊。進(jìn)一步,所述內(nèi)核模塊構(gòu)造過(guò)程為:5.1)指定UTS_RELEASE字段的值,由源碼根目錄下的Makefile中宏變量KERNELRELEASE設(shè)置,在編譯時(shí)對(duì)KERNELRELEASE變量進(jìn)行強(qiáng)制賦值,編譯后的模塊信息中就包含強(qiáng)制指定的內(nèi)核版本信息;5.2)模塊vermagic的其他字段信息與內(nèi)核配置有關(guān),獲取目標(biāo)系統(tǒng)對(duì)應(yīng)的內(nèi)核配置信息,在編譯前指定具體的功能配置,即能構(gòu)造功能相近的可裝載模塊;5.3)在終端下對(duì)根目錄下的.config文件進(jìn)行二次編輯,使得編譯后的外部模塊具有目標(biāo)系統(tǒng)相近的功能;5.4)完成vermagic字符串的構(gòu)造,模塊中的vermagic信息與目標(biāo)系統(tǒng)中的信息完全一致。進(jìn)一步,所述步驟6)中,具體過(guò)程為:編輯內(nèi)核源碼的.config文件,將配置文件中的CONFIG_MODVERSIONS選項(xiàng)關(guān)閉,然后在vermagic的定義頭文件中偽造modversions字段的存在;通過(guò)編輯內(nèi)核源碼目錄下的/include/linux/vermagic.h文件,修改關(guān)于CONFIG_MODVERSIONS段的代碼,保存后即完成配置。進(jìn)一步,所述步驟8)中,具體過(guò)程為:8.1)在終端中通過(guò)gedit編輯LiME目錄下的Makefile文件,指定源碼路徑和Android交叉編譯工具,配置完成;8.2)在終端輸入make命令編譯LiME,成功后,在根目錄下生成文件為lime-android.ko的模塊;8.3)使用modinfo命令確認(rèn)lime-android.ko模塊的版本控制信息,若與收集的目標(biāo)系統(tǒng)信息不一致,則再次進(jìn)行內(nèi)核配置的修改,重復(fù)步驟8.1)-8.3)重新編譯LiME模塊,當(dāng)兩者的vermagic值完全匹配時(shí),將該模塊上傳至目標(biāo)Android手機(jī)中。進(jìn)一步,所述步驟10)中,確定__gnu_mcount_nc符號(hào)變量是由于ftrace的操作而產(chǎn)生的,而ftrace是Linux內(nèi)核中的一種跟蹤調(diào)試工具,其作用是為了使開(kāi)發(fā)者動(dòng)態(tài)的了解Linux內(nèi)核的行為,該定義在ftrace.h查看。進(jìn)一步,所述步驟12)中,具體過(guò)程為:12.1)在終端使用gedit編輯源碼根目錄下的.config文件,定位至相關(guān)選項(xiàng)并關(guān)閉,完成后保存配置文件并編譯內(nèi)核源碼,并再次對(duì)根目錄進(jìn)行遍歷操作,確定是否還有導(dǎo)出__gnu_mcount_nc的符號(hào);12.2)經(jīng)過(guò)遍歷后發(fā)現(xiàn)目錄下的底層數(shù)據(jù)文件/kernel/bounds.s與/arch/arm/kernel/asm-offsets.s具有該符號(hào)信息;12.3)使用gedit編輯器打開(kāi)底層數(shù)據(jù)文件/kernel/bounds.s和/arch/arm/kernel/asm-offsets.s,定位至符號(hào)所在代碼段,刪除該段代碼后保存退出。進(jìn)一步,所述步驟12.3)中,刪除操作后無(wú)須重新編譯內(nèi)核,直接進(jìn)行下一步LiME模塊的編譯工作。本發(fā)明由于采取以上技術(shù)方案,其具有以下優(yōu)點(diǎn):1、本發(fā)明針對(duì)Android低版本2.2、2.3和高版本4.0、4.1都可以成功提取Android手機(jī)動(dòng)態(tài)內(nèi)存數(shù)據(jù)。2、本發(fā)明針對(duì)Android低版本2.2、2.3和高版本4.0、4.1都可以成功解決模塊中內(nèi)核符號(hào)的不一致問(wèn)題導(dǎo)致加載失敗的問(wèn)題,成功加載相似版本內(nèi)核。具體實(shí)施方式下面結(jié)合實(shí)施例對(duì)本發(fā)明進(jìn)行詳細(xì)的描述。本發(fā)明提供一種基于相似內(nèi)核的手機(jī)動(dòng)態(tài)內(nèi)存提取方法,該方法包括以下步驟:1)確定待取證的目標(biāo)Android手機(jī)的基本詳細(xì)信息,選取相似內(nèi)核源碼;進(jìn)入手機(jī)設(shè)置中的關(guān)于手機(jī)選項(xiàng),該選項(xiàng)詳細(xì)的給出了目標(biāo)手機(jī)的型號(hào)、Android系統(tǒng)版本、內(nèi)核版本、運(yùn)行內(nèi)存等系統(tǒng)概況。其中,Android系統(tǒng)版本和內(nèi)核版本是最為關(guān)鍵的信息,選取相似內(nèi)核源碼的首要原則是保證Android版本和內(nèi)核版本的完全一致,進(jìn)而尋找與目標(biāo)設(shè)備型號(hào)相近的手機(jī)型號(hào),最好與目標(biāo)設(shè)備為同一系列的型號(hào)。由于內(nèi)核版本的不同對(duì)手機(jī)本身存在本質(zhì)的區(qū)別,在內(nèi)核源碼的層面上,表現(xiàn)為底層架構(gòu)和編碼的不同。例如,所用的手機(jī)型號(hào)為HTC的S710d,進(jìn)入目標(biāo)手機(jī)內(nèi)的系統(tǒng)信息頁(yè)面可知,該手機(jī)的Android系統(tǒng)版本為Android2.2,內(nèi)核版本為2.6.35,對(duì)該手機(jī)作進(jìn)一步的了解后,得知S710d屬于HTC手機(jī)的S系列。進(jìn)入HTC廠商的官方開(kāi)源網(wǎng)站,該網(wǎng)站支持對(duì)設(shè)備內(nèi)核源碼的篩選查找,在Android版本選項(xiàng)中選擇Android2.2,即可輸出所有基于Android2.2的手機(jī)型號(hào),在結(jié)果中選擇內(nèi)核版本為2.6.35的內(nèi)核源碼,本實(shí)驗(yàn)所選源碼代號(hào)為flyer-hc-mr-2.6.35-f4a346d。2)收集目標(biāo)系統(tǒng)信息,由vermagic的定義可得知需要進(jìn)行收集的信息,而這些信息可通過(guò)連接手機(jī)后,在目標(biāo)手機(jī)系統(tǒng)中使用shell基本命令獲取。Android系統(tǒng)的基本信息可在/proc文件系統(tǒng)中查看,/proc文件系統(tǒng)包含了系統(tǒng)中大量的只讀數(shù)據(jù),內(nèi)核和很多設(shè)備驅(qū)動(dòng)程序都使用該系統(tǒng)向外界導(dǎo)出信息。很多關(guān)鍵信息都可以從系統(tǒng)入口讀取,如/proc/meminfo輸出設(shè)備的內(nèi)存使用情況、/proc/cpuinfo輸出設(shè)備的CPU情況,而/proc/versions輸出設(shè)備的版本信息情況,這是對(duì)于構(gòu)造可信模塊最有價(jià)值的數(shù)據(jù)。在本地終端輸入adbshell命令進(jìn)入Android手機(jī)內(nèi)的終端,輸入cat/proc/versions后可讀取該信息,其中3.0.31-1005594是本手機(jī)的內(nèi)核版本信息,后半部分的SMP、PREEMPT標(biāo)志則說(shuō)明手機(jī)啟用了SMP、PREEMPT功能,于是在編譯內(nèi)核源碼前,就需要將CONFIG_SMP_與CONFIG_PREEMPT_相關(guān)選項(xiàng)組加入內(nèi)核配置中。如需獲取更詳細(xì)完整的信息,可參考目標(biāo)終端中自有的系統(tǒng)模塊信息。3)開(kāi)始編譯內(nèi)核源代碼。在Linux終端中切換至內(nèi)核源碼目錄,配置交叉編譯工具鏈。初始化內(nèi)核配置,由于該源碼下的說(shuō)明文檔中存在默認(rèn)的配置選項(xiàng),故不需使用makemenuconfig進(jìn)行手動(dòng)配置。根據(jù)設(shè)備默認(rèn)的配置文件,在終端下輸入以下命令開(kāi)始配置內(nèi)核功能:#makearch=armm0duosctc_00_defconfig。4)編譯成功后在根目錄下生成.config文件,由于使用設(shè)備默認(rèn)配置,還需要確認(rèn)配置中是否開(kāi)啟了可裝載模塊的相關(guān)功能。使用gedit編輯.config文件,確保CONFIG_MODULE_等選項(xiàng)已經(jīng)打開(kāi)。5)基于前期的信息收集,必須按照目標(biāo)系統(tǒng)的內(nèi)核配置信息來(lái)構(gòu)造內(nèi)核模塊,以繞過(guò)內(nèi)核中的校驗(yàn)機(jī)制。構(gòu)造與目標(biāo)系統(tǒng)中一樣的vermagic字符串,因此由收集到的SMP、PREEMPT等配置信息,進(jìn)一步對(duì).config中的相關(guān)的功能進(jìn)行配置,如目標(biāo)系統(tǒng)中存在SMP而不具備PREEMPT,則在配置文件中需要將SMP相關(guān)配置打開(kāi),將PREEMPT相關(guān)配置關(guān)閉,即可使模塊與目標(biāo)系統(tǒng)中的版本控制信息達(dá)到一致。其中,構(gòu)造內(nèi)核模塊是通過(guò)偽造vermagic字符串值的方法實(shí)現(xiàn),是根據(jù)目標(biāo)終端的系統(tǒng)內(nèi)核配置信息,在編譯源碼時(shí)使用與其一模一樣的配置選項(xiàng),偽造具有目標(biāo)信息特征的可裝載模塊,進(jìn)而欺騙系統(tǒng)對(duì)vermagic信息的機(jī)制,繞過(guò)目標(biāo)系統(tǒng)的內(nèi)核校驗(yàn)機(jī)制加載目標(biāo)模塊,實(shí)現(xiàn)內(nèi)存提取。其過(guò)程如下:5.1)對(duì)于內(nèi)核版本信息的構(gòu)造,即指定UTS_RELEASE字段的值,由源碼根目錄下的Makefile中宏變量KERNELRELEASE設(shè)置,在編譯時(shí)對(duì)KERNELRELEASE變量進(jìn)行強(qiáng)制賦值,編譯后的模塊信息中就包含強(qiáng)制指定的內(nèi)核版本信息。由vermagic的定義可知,該字符串的構(gòu)成有內(nèi)核版本信息,與對(duì)應(yīng)的模塊功能配置。因此,編譯前,首先獲取目標(biāo)系統(tǒng)內(nèi)核的版本信息,再使用該信息在編譯模塊時(shí)進(jìn)行強(qiáng)制賦值,使得與目標(biāo)系統(tǒng)的版本信息完全一致。5.2)模塊vermagic的其他字段信息與內(nèi)核配置有關(guān),目標(biāo)系統(tǒng)相關(guān)的內(nèi)核配置代表系統(tǒng)所必需要的某種功能,因此獲取目標(biāo)系統(tǒng)對(duì)應(yīng)的內(nèi)核配置信息(如SMP功能、PREEMPT功能),在編譯前指定具體的功能配置,即可構(gòu)造功能相近的可裝載模塊。5.3)完成編譯前基本的內(nèi)核配置后,在終端下可對(duì)根目錄下的.config文件進(jìn)行二次編輯,使得編譯后的外部模塊具有目標(biāo)系統(tǒng)相近的功能。5.4)完成vermagic字符串的構(gòu)造,模塊中的vermagic信息與目標(biāo)系統(tǒng)中的信息完全一致,就能通過(guò)內(nèi)核中的校驗(yàn)機(jī)制,系統(tǒng)就會(huì)認(rèn)為該模塊為系統(tǒng)內(nèi)可信模塊,將其加載到內(nèi)核當(dāng)中,就能實(shí)現(xiàn)后續(xù)的動(dòng)態(tài)內(nèi)存提取工作。6)對(duì)于出現(xiàn)模塊的modversions校驗(yàn)機(jī)制情況時(shí),關(guān)閉該校驗(yàn)機(jī)制并重新編譯內(nèi)核。具體過(guò)程為:編輯內(nèi)核源碼的.config文件,將配置文件中的CONFIG_MODVERSIONS選項(xiàng)關(guān)閉,然后在vermagic的定義頭文件中偽造modversions字段的存在。通過(guò)編輯內(nèi)核源碼目錄下的/include/linux/vermagic.h文件,將關(guān)于CONFIG_MODVERSIONS段的代碼修改如下,保存后即完成配置。#ifdefCONFIG_MODVERSIONS#defineMODULE_VERMAGIC_MODVERSIONS“modversions“#else#defineMODULE_VERMAGIC_MODVERSIONS“modversions“#endif由于高版本內(nèi)核的Android系統(tǒng)還具有第二層modversions模塊校驗(yàn)機(jī)制,該檢驗(yàn)機(jī)制是基于模塊的CRC值校驗(yàn),編譯內(nèi)核時(shí)配置CONFIG_MODVERSIONS選項(xiàng)打開(kāi)此檢查機(jī)制。該機(jī)制通過(guò)循環(huán)計(jì)算內(nèi)核模塊中_versions的CRC值,由于Android源碼目錄下的源文件數(shù)量巨大,函數(shù)之間的相互調(diào)用非常復(fù)雜,基于源碼定義的校驗(yàn)算法和相關(guān)信息進(jìn)行暴力破解不具備可行性,因此只能繞過(guò)內(nèi)核模塊的CRC值校驗(yàn)。7)完成內(nèi)核功能的配置后,開(kāi)始對(duì)源代碼進(jìn)行交叉編譯,編譯時(shí)需要強(qiáng)制對(duì)內(nèi)核版本信息賦值,以達(dá)到繞過(guò)內(nèi)核的vermagic檢查機(jī)制;例如本實(shí)施例中目標(biāo)手機(jī)的內(nèi)核版本信息為3.0.31-1005594,則在終端中輸入以下命令進(jìn)行編譯,其中內(nèi)核版本信息變量為KERNELRELEASE:#makeKERNELRELEASE=3.0.31-1005594modules_prepare。8)根據(jù)編譯完成的內(nèi)核源碼,使用LiME工具編譯外部模塊。8.1)首先在終端中通過(guò)gedit編輯LiME目錄下的Makefile文件,指定源碼路徑和Android交叉編譯工具,配置完成。8.2)在終端輸入make命令編譯LiME,成功后,在根目錄下生成文件為lime-android.ko的模塊。8.3)使用modinfo命令確認(rèn)lime-android.ko模塊的版本控制信息,若與收集的目標(biāo)系統(tǒng)信息不一致,則再次進(jìn)行內(nèi)核配置的修改,重復(fù)步驟8.1)-8.3)重新編譯LiME模塊,當(dāng)兩者的vermagic值完全匹配時(shí),即可將該模塊上傳至目標(biāo)Android手機(jī)中,進(jìn)行動(dòng)態(tài)內(nèi)存提取。9)將使用相似內(nèi)核構(gòu)造的LiME模塊上傳至目標(biāo)手機(jī)中,使用insmod命令加載模塊;由于使用的內(nèi)核源碼非手機(jī)本身,因此會(huì)產(chǎn)生加載錯(cuò)誤,但在前期的模塊構(gòu)造工作中,已經(jīng)可以使模塊繞過(guò)內(nèi)核校驗(yàn)機(jī)制,所以加載出錯(cuò)的原因并不是版本校驗(yàn)機(jī)制,而是模塊中內(nèi)核符號(hào)的引用錯(cuò)誤。10)在相似內(nèi)核源碼中尋找與__gnu_mcount_nc符號(hào)變量具有依賴性關(guān)系的函數(shù);經(jīng)過(guò)對(duì)源碼的分析排除,確定__gnu_mcount_nc符號(hào)變量是由于ftrace的操作而產(chǎn)生的。而ftrace是Linux內(nèi)核中的一種跟蹤調(diào)試工具,主要作用是為了使開(kāi)發(fā)者動(dòng)態(tài)的了解Linux內(nèi)核的行為,該定義可在ftrace.h查看,如下:#ifdefCONFIG_FUNCTION_TRACER#defineMCOUNT_ADDR((unsignedlong)(__gnu_mcount_nc))#defineMCOUNT_INSN_SIZE4/*sizeofmcountcall*/#ifndef__ASSEMBLY__externvoidmcount(void);externvoid__gnu_mcount_nc(void)。11)當(dāng)內(nèi)核配置中啟用CONFIG_FUNCTION_TRACER相關(guān)選項(xiàng)時(shí),編譯內(nèi)核時(shí)就會(huì)觸發(fā)目標(biāo)系統(tǒng)對(duì)該符號(hào)的依賴,在內(nèi)核開(kāi)啟ftrace功能的初始階段,所有函數(shù)都會(huì)調(diào)用該符號(hào),編譯后的內(nèi)核向外界導(dǎo)出了__gnu_mcount_nc符號(hào)。因此若目標(biāo)系統(tǒng)內(nèi)核中沒(méi)有導(dǎo)出該函數(shù),就會(huì)導(dǎo)致該模塊不能加載。12)在相似內(nèi)核代碼中進(jìn)行內(nèi)核配置,將與ftrace有關(guān)的內(nèi)核編譯選項(xiàng)關(guān)閉。尋找與__gnu_mcount_nc符號(hào)有關(guān)的配置可對(duì)內(nèi)核代碼目錄進(jìn)行遍歷,分析該函數(shù)調(diào)用間的關(guān)系,確保找出所有與該__gnu_mcount_nc符號(hào)相關(guān)的配置選項(xiàng)。具體過(guò)程為:12.1)在終端使用gedit編輯源碼根目錄下的.config文件,定位至相關(guān)選項(xiàng)并關(guān)閉,完成后保存配置文件并編譯內(nèi)核源碼,并再次對(duì)根目錄進(jìn)行遍歷操作,確定是否還有導(dǎo)出__gnu_mcount_nc的符號(hào)。12.2)經(jīng)過(guò)遍歷后發(fā)現(xiàn)目錄下的底層數(shù)據(jù)文件/kernel/bounds.s與/arch/arm/kernel/asm-offsets.s具有該符號(hào)信息,對(duì)這兩個(gè)文件分析可知,這兩個(gè)文件是基于ARM的匯編代碼段,構(gòu)造外部模塊時(shí)需要依賴這些底層代碼,于是編譯LiME模塊時(shí)也會(huì)引入這些符號(hào),需要手動(dòng)對(duì)這些匯編數(shù)據(jù)進(jìn)行刪除操作。12.3)使用gedit編輯器打開(kāi)上述兩個(gè)文件,定位至符號(hào)所在代碼段,刪除該段代碼后保存退出。刪除操作后無(wú)須重新編譯內(nèi)核,直接可進(jìn)行下一步LiME模塊的編譯工作,實(shí)驗(yàn)證明刪除操作不影響對(duì)后續(xù)模塊的編譯。13)進(jìn)入LiME目錄,將外部源碼路徑指定給相似內(nèi)核代碼,通過(guò)SD轉(zhuǎn)儲(chǔ)方式,以lime格式提取動(dòng)態(tài)內(nèi)存,成功裝載模塊后,系統(tǒng)開(kāi)始在后臺(tái)進(jìn)行動(dòng)態(tài)內(nèi)存的提取操作。14)提取完成后,在Android終端的SD存儲(chǔ)卡內(nèi)生成dump內(nèi)存文件,在本地終端使用pull操作將手機(jī)中的內(nèi)存文件取回至本地計(jì)算機(jī)中。上述步驟12)中,當(dāng)出現(xiàn)其他未知符號(hào)時(shí),按照步驟12)中的方法進(jìn)行分析調(diào)試。在本實(shí)施例中除__gnu_mcount_nc未知符號(hào)外,還出現(xiàn)以下未知符號(hào):mem_section:經(jīng)分析與內(nèi)核中內(nèi)存管理的編譯選項(xiàng)有關(guān),主要關(guān)于高端內(nèi)存的特殊映射,與內(nèi)核配置中的CONFIG_SPARSEMEM_組相關(guān)。__pv_phys_offset:經(jīng)分析與內(nèi)核中虛擬地址、物理地址的管理有關(guān),對(duì)應(yīng)內(nèi)核配置中的CONFIG_ARM_PATCH_PHYS_相關(guān)編譯選項(xiàng)。__aeabi_unwind_cpp_:經(jīng)分析與內(nèi)核中unwind函數(shù)有關(guān),對(duì)應(yīng)內(nèi)核配置編譯選項(xiàng)為CONFIG_ARM_UNWIND。對(duì)于上述出現(xiàn)的未知符號(hào),經(jīng)過(guò)調(diào)試重新編譯內(nèi)核后,最終編譯生成的LiME模塊全部能夠在目標(biāo)設(shè)備上成功加載,并能提取該手機(jī)設(shè)備的動(dòng)態(tài)內(nèi)存。上述各實(shí)施例僅用于說(shuō)明本發(fā)明,各部件的結(jié)構(gòu)、尺寸、設(shè)置位置及形狀都是可以有所變化的,在本發(fā)明技術(shù)方案的基礎(chǔ)上,凡根據(jù)本發(fā)明原理對(duì)個(gè)別部件進(jìn)行的改進(jìn)和等同變換,均不應(yīng)排除在本發(fā)明的保護(hù)范圍之外。當(dāng)前第1頁(yè)1 2 3 當(dāng)前第1頁(yè)1 2 3 
當(dāng)前第1頁(yè)1 2 3 
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
腾冲县| 潍坊市| 庄浪县| 临武县| 营口市| 尼木县| 遂宁市| 泰安市| 铁岭县| 民乐县| 乐安县| 那曲县| 福泉市| 福建省| 青川县| 来凤县| 比如县| 万盛区| 公主岭市| 滕州市| 南华县| 万年县| 大悟县| 和平县| 新丰县| 固安县| 庆云县| 北碚区| 闽侯县| 太仓市| 哈尔滨市| 广饶县| 达尔| 博野县| 浦江县| 朝阳县| 东乌珠穆沁旗| 弋阳县| 全椒县| 盖州市| 大悟县|