溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Android中怎么新建一個(gè)過(guò)工程

發(fā)布時(shí)間:2022-01-12 16:12:08 來(lái)源:億速云 閱讀:132 作者:iii 欄目:網(wǎng)絡(luò)安全

這篇文章主要介紹“Android中怎么新建一個(gè)過(guò)工程”,在日常操作中,相信很多人在Android中怎么新建一個(gè)過(guò)工程問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”Android中怎么新建一個(gè)過(guò)工程”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

內(nèi)容

1.一個(gè)好用的工具簡(jiǎn)單教程(Insight)

你可以學(xué)到什么?

一個(gè)超級(jí)厲害的分析輔助軟件。

2.Android 優(yōu)化過(guò)程分析

你可以學(xué)到什么?

1.深度了解Android 優(yōu)化過(guò)程
2.近距離觀察Android 源碼
2.可以見(jiàn)到大佬脫殼下段的函數(shù)

3.Android DEX文件解析分析

你可以學(xué)到什么?

1.其他可以下段的函數(shù)
2.dex文件解析的過(guò)程
3.脫殼下斷的小知識(shí)

4. Android DEX類加載過(guò)程分析

你可以學(xué)到什么?

1.類加載的完整過(guò)程
2.脫殼加固類的選擇

0x01 一個(gè)好用的工具簡(jiǎn)單教程(Insight)

這個(gè)軟件對(duì)于分析c/c++還有java源碼具有很強(qiáng)的輔助功能,之后要進(jìn)行使用,所以進(jìn)行簡(jiǎn)單的介紹。

工具在附件中找。單獨(dú)上傳下載就可以了。

SI3US-205035-36448

這里提供一個(gè)注冊(cè)碼。

安裝,next,next就可以了。

Android中怎么新建一個(gè)過(guò)工程

新建一個(gè)工程

選擇new project。

Android中怎么新建一個(gè)過(guò)工程

單機(jī)OK
Android中怎么新建一個(gè)過(guò)工程

選擇第一個(gè)


Android中怎么新建一個(gè)過(guò)工程

選擇 Add Tree,意思就是說(shuō)全部加在。
Android中怎么新建一個(gè)過(guò)工程

加載完成

Android中怎么新建一個(gè)過(guò)工程

之后我們會(huì)用到這個(gè)軟件進(jìn)行分析。

Android 優(yōu)化過(guò)程分析

我想啰嗦一下,這個(gè)時(shí)候就知道英語(yǔ)的重要性了,當(dāng)然我的英語(yǔ)也不好,但是我會(huì)查字典呀。


Android中怎么新建一個(gè)過(guò)工程

1.extractAndProcessZip

我們先不說(shuō)這個(gè)內(nèi)容的事情,先來(lái)看看這個(gè)函數(shù)的名稱。extract:提取,and 和,Process 過(guò)程 Zip,壓縮文件格式,我們都知道apk其實(shí)就是一個(gè)zip壓縮包。
那么這個(gè)函數(shù)的意思就是提取 zip的過(guò)程。

然后我們來(lái)一步一步的分析。


Android中怎么新建一個(gè)過(guò)工程

這里是extractAndProcessZip的中間變量定義。不是我們研究的重點(diǎn)。


Android中怎么新建一個(gè)過(guò)工程

DexClassVerifyMode verifyMode = VERIFY_MODE_ALL;

這一句定義的是 verifyMode,就是驗(yàn)證模塊,這里初始化的數(shù)據(jù)是VERIFY_MODE_ALL,也就是全部都進(jìn)行驗(yàn)證。

思考

如果我們對(duì)這里進(jìn)行更改是不是就可以跳過(guò)這個(gè)驗(yàn)證。

我們來(lái)看看其他的值。


Android中怎么新建一個(gè)過(guò)工程

如果有想法可以自己定義這個(gè)值。

DexOptimizerMode dexOptMode = OPTIMIZE_MODE_VERIFIED;


Android中怎么新建一個(gè)過(guò)工程

我們來(lái)接著往下看。
Android中怎么新建一個(gè)過(guò)工程

這里有一個(gè)函數(shù),dexOptCreateEmptyHeader,看英文,創(chuàng)建一個(gè)dex優(yōu)化的空的頭部。


Android中怎么新建一個(gè)過(guò)工程

dexOffset,record the file position so we can get back here later,其實(shí)就是讀取dex文件的起始位置。

接著來(lái)看下一個(gè)函數(shù)。
Android中怎么新建一個(gè)過(guò)工程

Open the zip archive, find the DEX entry.
很明顯,這個(gè)部分在做的事情就是,從apk中找到dex文件。

接著進(jìn)行分析。


Android中怎么新建一個(gè)過(guò)工程

提取dex的一些偏移的函數(shù)。

Android中怎么新建一個(gè)過(guò)工程

Extract the DEX data into the cache file at the current offset.對(duì)dex文件的一些偏移進(jìn)行記錄。

以上就是處理部分。

接下來(lái)要說(shuō)的是dex odex化的過(guò)程。


Android中怎么新建一個(gè)過(guò)工程

這里就是優(yōu)化驗(yàn)證的地方。

通過(guò)這里就可以修改優(yōu)化的過(guò)程,甚至可以去除優(yōu)化驗(yàn)證。

思考
這里的數(shù)據(jù)是哪里來(lái)的,在什么地方進(jìn)行對(duì)比?!?/strong>
這些數(shù)據(jù)都是在build.prop中進(jìn)行對(duì)比的。

2.繼續(xù)進(jìn)行優(yōu)化

我們來(lái)跟進(jìn)dvmContinueOptimization這個(gè)函數(shù)。

PS:
馬上就要接觸到一個(gè)非常重要的和脫殼非常相關(guān)的地方了

打開(kāi)dvmContinueOptimization函數(shù)

Android中怎么新建一個(gè)過(guò)工程

首先是一個(gè)判斷。


Android中怎么新建一個(gè)過(guò)工程

然后就是對(duì)dex文件的一個(gè)寫(xiě)入。

接著往下看(重點(diǎn)要到了)


Android中怎么新建一個(gè)過(guò)工程

dvmDexFileOpenPartial,如果之前看過(guò)別人脫殼的教程,肯定知道這里是經(jīng)常使用的下端點(diǎn)的時(shí)候,以前只知道要下,現(xiàn)在知道,這個(gè)函數(shù)是存在于源碼之中的。

我們來(lái)查看下dvmDexFileOpenPartial這個(gè)函數(shù)的調(diào)用

Android中怎么新建一個(gè)過(guò)工程

這里調(diào)用了兩次,還有一次是自己的定義。

先來(lái)看一下dvmDexFileOpenPartial的原型

int dvmDexFileOpenPartial(const void* addr, int len, DvmDex** ppDvmDex)
參數(shù)1:加載的DEX文件在內(nèi)存中的基址.(也就是DEX.035)
參數(shù)2:加載的DEX文件的文件長(zhǎng)度,
參數(shù)3:出參, DEX 文件轉(zhuǎn)成DvmDex結(jié)構(gòu),里面包含Dex文件的類,字段,方法,字符串信息。Dalivk操作Dex文件的對(duì)象這是結(jié)構(gòu)結(jié)構(gòu)體


Android中怎么新建一個(gè)過(guò)工程

最后在這里寫(xiě)入頭部的信息。


Android中怎么新建一個(gè)過(guò)工程

0x03 Android DEX文件解析分析

dvmRawDexFileOpen() 這個(gè)函數(shù)是我們要關(guān)鍵要了解的函數(shù),它在RawDexFile.cpp函數(shù)中。


Android中怎么新建一個(gè)過(guò)工程

先對(duì)基本變量進(jìn)行定義。


Android中怎么新建一個(gè)過(guò)工程

都知道文件格式一個(gè)很重要的東西就是魔數(shù),那么這里就是首先判斷魔數(shù),verifyMagicAndGetAdler32。這里的magic就是魔數(shù)。


Android中怎么新建一個(gè)過(guò)工程

這里是對(duì)時(shí)間,以及文件大小的驗(yàn)證。


Android中怎么新建一個(gè)過(guò)工程

這個(gè)函數(shù)是一個(gè)重點(diǎn)函數(shù),也是我們要著重分析的一個(gè)函數(shù),它的主要功能就是生成dex對(duì)應(yīng)的odex文件,也就是所謂的odex化。我們跟進(jìn)函數(shù)進(jìn)行查看。

Android中怎么新建一個(gè)過(guò)工程

這個(gè)就是dexOptGenerateCacheFileName()函數(shù)部分。我們主要的是看它輸出的位置是什么地方。

Android中怎么新建一個(gè)過(guò)工程

在這里可以看到是在data目錄下生成, ALOGV("Cache file for '%s' '%s' is '%s'", fileName, subFileName, nameBuf);
這個(gè)樣子的格式。

也就是說(shuō)這里已經(jīng)生成我們的odex文件了。

然后要做的事情就是這個(gè)函數(shù)了dvmDexFileOpenFromFd(),進(jìn)一步進(jìn)行優(yōu)化,完成映射,設(shè)為可讀文件。打開(kāi)這個(gè)函數(shù)。位置是在DvmDex.cpp里。

Android中怎么新建一個(gè)過(guò)工程

我們先來(lái)看一下調(diào)用這個(gè)函數(shù)的地方。

Android中怎么新建一個(gè)過(guò)工程

調(diào)用這個(gè)函數(shù)的地方,就是我們的重點(diǎn)函數(shù)dvmRawDexFileOpen,這個(gè)函數(shù)先調(diào)用dexOptGenerateCacheFileName生成odex,然后再調(diào)用dvmDexFileOpenFromFd進(jìn)行再一次優(yōu)化。

優(yōu)化中的最后一步就是dexFileParse(),也就是解析DEX。這個(gè)位置在DexFile

Android中怎么新建一個(gè)過(guò)工程

做一個(gè)簡(jiǎn)單的總結(jié)。

dvmRawDexFileOpen()主控函數(shù)——dexOptGenerateCacheFileName()生成對(duì)應(yīng)的odex——dvmDexFileOpenFromFd()進(jìn)一步優(yōu)化——dexFileParse()解析dex。

PS:小技巧

dexfileopenpartial在下段的時(shí)候,可能會(huì)發(fā)現(xiàn)沒(méi)有辦法斷下來(lái),那么我們就可以選擇dexOptGenerateCacheFileNamePKcS0,dvmdexfileopenfromfd 等函數(shù)來(lái)進(jìn)行下段。

一般來(lái)說(shuō)dexfileopenpartial處理有殼的東西會(huì)比較好一點(diǎn)。

0x04 Android Dex類加載過(guò)程

其他源碼都是由一個(gè)主控函數(shù)來(lái)進(jìn)行指引,引導(dǎo)其他關(guān)鍵函數(shù)進(jìn)行運(yùn)作,dex類加載過(guò)程也是這個(gè)樣子的。

它的主控函數(shù)就是Dalvik_dalvik_system_DexFile_defineClassNative()


Android中怎么新建一個(gè)過(guò)工程

還有一個(gè)需要注意的函數(shù)Dalvik_dalvik_system_DexFile_openDexFileNative

這里需要注意的是有兩個(gè)可以dump的地方。


Android中怎么新建一個(gè)過(guò)工程

還是接著來(lái)看我們的主控函數(shù)。

在主控函數(shù)里有這樣一個(gè)調(diào)用。
Android中怎么新建一個(gè)過(guò)工程

這個(gè)調(diào)用是驗(yàn)證cookie,但是這個(gè)cookie很有可能是解密后的dex的cookie,所以也可以在這里把這個(gè)cookie dump下來(lái)。

接著往下看。


Android中怎么新建一個(gè)過(guò)工程

dvmDefineClass這個(gè)函數(shù),這個(gè)函數(shù)就是確認(rèn)類加載的一個(gè)函數(shù)。

Android中怎么新建一個(gè)過(guò)工程

函數(shù)自己進(jìn)行了一個(gè)判斷,但是return返回的東西確是一個(gè)大頭。我們跟進(jìn)這個(gè)函數(shù)進(jìn)行查看。

Android中怎么新建一個(gè)過(guò)工程

Android中怎么新建一個(gè)過(guò)工程

這里最重要的就是clazz,這個(gè)就是動(dòng)態(tài)加載的類。

他的值是由loadClassFromDex這個(gè)函數(shù)進(jìn)行返回的,所以我們就進(jìn)行進(jìn)一步的查看。

Android中怎么新建一個(gè)過(guò)工程

這里看到這樣的一個(gè)結(jié)構(gòu)。

Android中怎么新建一個(gè)過(guò)工程

來(lái)看看這個(gè)結(jié)構(gòu)的詳細(xì)內(nèi)容。

Android中怎么新建一個(gè)過(guò)工程

這個(gè)結(jié)構(gòu)是不是和dex的結(jié)構(gòu)一模一樣,說(shuō)明了這里就是我們需要東西。

到此,關(guān)于“Android中怎么新建一個(gè)過(guò)工程”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI