91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android中怎么新建一個過工程

發布時間:2022-01-12 16:12:08 來源:億速云 閱讀:139 作者:iii 欄目:網絡安全

這篇文章主要介紹“Android中怎么新建一個過工程”,在日常操作中,相信很多人在Android中怎么新建一個過工程問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Android中怎么新建一個過工程”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

內容

1.一個好用的工具簡單教程(Insight)

你可以學到什么?

一個超級厲害的分析輔助軟件。

2.Android 優化過程分析

你可以學到什么?

1.深度了解Android 優化過程
2.近距離觀察Android 源碼
2.可以見到大佬脫殼下段的函數

3.Android DEX文件解析分析

你可以學到什么?

1.其他可以下段的函數
2.dex文件解析的過程
3.脫殼下斷的小知識

4. Android DEX類加載過程分析

你可以學到什么?

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

0x01 一個好用的工具簡單教程(Insight)

這個軟件對于分析c/c++還有java源碼具有很強的輔助功能,之后要進行使用,所以進行簡單的介紹。

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

SI3US-205035-36448

這里提供一個注冊碼。

安裝,next,next就可以了。

Android中怎么新建一個過工程

新建一個工程

選擇new project。

Android中怎么新建一個過工程

單機OK
Android中怎么新建一個過工程

選擇第一個


Android中怎么新建一個過工程

選擇 Add Tree,意思就是說全部加在。
Android中怎么新建一個過工程

加載完成

Android中怎么新建一個過工程

之后我們會用到這個軟件進行分析。

Android 優化過程分析

我想啰嗦一下,這個時候就知道英語的重要性了,當然我的英語也不好,但是我會查字典呀。


Android中怎么新建一個過工程

1.extractAndProcessZip

我們先不說這個內容的事情,先來看看這個函數的名稱。extract:提取,and 和,Process 過程 Zip,壓縮文件格式,我們都知道apk其實就是一個zip壓縮包。
那么這個函數的意思就是提取 zip的過程。

然后我們來一步一步的分析。


Android中怎么新建一個過工程

這里是extractAndProcessZip的中間變量定義。不是我們研究的重點。


Android中怎么新建一個過工程

DexClassVerifyMode verifyMode = VERIFY_MODE_ALL;

這一句定義的是 verifyMode,就是驗證模塊,這里初始化的數據是VERIFY_MODE_ALL,也就是全部都進行驗證。

思考

如果我們對這里進行更改是不是就可以跳過這個驗證。

我們來看看其他的值。


Android中怎么新建一個過工程

如果有想法可以自己定義這個值。

DexOptimizerMode dexOptMode = OPTIMIZE_MODE_VERIFIED;


Android中怎么新建一個過工程

我們來接著往下看。
Android中怎么新建一個過工程

這里有一個函數,dexOptCreateEmptyHeader,看英文,創建一個dex優化的空的頭部。


Android中怎么新建一個過工程

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

接著來看下一個函數。
Android中怎么新建一個過工程

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

接著進行分析。


Android中怎么新建一個過工程

提取dex的一些偏移的函數。

Android中怎么新建一個過工程

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

以上就是處理部分。

接下來要說的是dex odex化的過程。


Android中怎么新建一個過工程

這里就是優化驗證的地方。

通過這里就可以修改優化的過程,甚至可以去除優化驗證。

思考
這里的數據是哪里來的,在什么地方進行對比。·
這些數據都是在build.prop中進行對比的。

2.繼續進行優化

我們來跟進dvmContinueOptimization這個函數。

PS:
馬上就要接觸到一個非常重要的和脫殼非常相關的地方了

打開dvmContinueOptimization函數

Android中怎么新建一個過工程

首先是一個判斷。


Android中怎么新建一個過工程

然后就是對dex文件的一個寫入。

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


Android中怎么新建一個過工程

dvmDexFileOpenPartial,如果之前看過別人脫殼的教程,肯定知道這里是經常使用的下端點的時候,以前只知道要下,現在知道,這個函數是存在于源碼之中的。

我們來查看下dvmDexFileOpenPartial這個函數的調用

Android中怎么新建一個過工程

這里調用了兩次,還有一次是自己的定義。

先來看一下dvmDexFileOpenPartial的原型

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


Android中怎么新建一個過工程

最后在這里寫入頭部的信息。


Android中怎么新建一個過工程

0x03 Android DEX文件解析分析

dvmRawDexFileOpen() 這個函數是我們要關鍵要了解的函數,它在RawDexFile.cpp函數中。


Android中怎么新建一個過工程

先對基本變量進行定義。


Android中怎么新建一個過工程

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


Android中怎么新建一個過工程

這里是對時間,以及文件大小的驗證。


Android中怎么新建一個過工程

這個函數是一個重點函數,也是我們要著重分析的一個函數,它的主要功能就是生成dex對應的odex文件,也就是所謂的odex化。我們跟進函數進行查看。

Android中怎么新建一個過工程

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

Android中怎么新建一個過工程

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

也就是說這里已經生成我們的odex文件了。

然后要做的事情就是這個函數了dvmDexFileOpenFromFd(),進一步進行優化,完成映射,設為可讀文件。打開這個函數。位置是在DvmDex.cpp里。

Android中怎么新建一個過工程

我們先來看一下調用這個函數的地方。

Android中怎么新建一個過工程

調用這個函數的地方,就是我們的重點函數dvmRawDexFileOpen,這個函數先調用dexOptGenerateCacheFileName生成odex,然后再調用dvmDexFileOpenFromFd進行再一次優化。

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

Android中怎么新建一個過工程

做一個簡單的總結。

dvmRawDexFileOpen()主控函數——dexOptGenerateCacheFileName()生成對應的odex——dvmDexFileOpenFromFd()進一步優化——dexFileParse()解析dex。

PS:小技巧

dexfileopenpartial在下段的時候,可能會發現沒有辦法斷下來,那么我們就可以選擇dexOptGenerateCacheFileNamePKcS0,dvmdexfileopenfromfd 等函數來進行下段。

一般來說dexfileopenpartial處理有殼的東西會比較好一點。

0x04 Android Dex類加載過程

其他源碼都是由一個主控函數來進行指引,引導其他關鍵函數進行運作,dex類加載過程也是這個樣子的。

它的主控函數就是Dalvik_dalvik_system_DexFile_defineClassNative()


Android中怎么新建一個過工程

還有一個需要注意的函數Dalvik_dalvik_system_DexFile_openDexFileNative

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


Android中怎么新建一個過工程

還是接著來看我們的主控函數。

在主控函數里有這樣一個調用。
Android中怎么新建一個過工程

這個調用是驗證cookie,但是這個cookie很有可能是解密后的dex的cookie,所以也可以在這里把這個cookie dump下來。

接著往下看。


Android中怎么新建一個過工程

dvmDefineClass這個函數,這個函數就是確認類加載的一個函數。

Android中怎么新建一個過工程

函數自己進行了一個判斷,但是return返回的東西確是一個大頭。我們跟進這個函數進行查看。

Android中怎么新建一個過工程

Android中怎么新建一個過工程

這里最重要的就是clazz,這個就是動態加載的類。

他的值是由loadClassFromDex這個函數進行返回的,所以我們就進行進一步的查看。

Android中怎么新建一個過工程

這里看到這樣的一個結構。

Android中怎么新建一個過工程

來看看這個結構的詳細內容。

Android中怎么新建一個過工程

這個結構是不是和dex的結構一模一樣,說明了這里就是我們需要東西。

到此,關于“Android中怎么新建一個過工程”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

泾源县| 济阳县| 延川县| 高淳县| 高青县| 鸡东县| 无为县| 娄烦县| 中阳县| 沾益县| 东阳市| 安平县| 乐至县| 栾城县| 淮阳县| 丹凤县| 长宁区| 沙洋县| 贞丰县| 杂多县| 东乌珠穆沁旗| 措勤县| 梅河口市| 孟州市| 黑水县| 峨眉山市| 田东县| 龙州县| 新邵县| 仙桃市| 射阳县| 右玉县| 麻栗坡县| 青海省| 利川市| 定兴县| 水富县| 五莲县| 武邑县| 稻城县| 临汾市|