在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Android下的DEX文件和SO文件梳理總結

哆啦安全 ? 來源:編碼安全 ? 作者:編碼安全 ? 2022-11-04 09:32 ? 次閱讀

背景

android逆向分析、脫殼破解分析過程中免不了和android的各種文件格式打交道(so、dex、xml、art、oat等等)。

Android下的兩個最重要的文件是DEX文件和SO文件,下面重點對這兩個文件及關聯文件進行下文的梳理總結,以此用于溫故知新。

DEX文件

DEX它是android虛擬機的可執行字節碼文件,我們知道java文件需要經過javac編譯成class文件,dx工具會將所有的class文件合并處理最終生成dex文件。

dex文件分為四大部分: DEX文件頭,索引結構區,data數據區,靜態鏈接數據區。

在dex文件中所有的代碼和數據都放在data數據區中,索引結構區中存放的是data中各種數據的對應的偏移和索引。

ee0a68e4-5bd3-11ed-a3b6-dac502259ad0.png

ODEX文件

ODEX它的英文全稱為Optimized DEX;即優化過的DEX。

在android5.0之前,Android采用的是JIT(just-in-time)即時編譯,也就是程序邊執行邊編譯。為了增加程序執行的效率,android在APK第一次安裝的時候將程序的dex文件進行優化生成odex文件,并將其放在了/data/dalvik-cache目錄下,等待下次apk運行時直接加載這個目錄中經過優化的odex文件(優化基于當前系統的dalvik虛擬機版本,不同版本上的odex文件無法進行兼容),避免重復驗證提高執行效率,加快APK的響應時間。

OAT文件

在android5.0之后,android使用的是AOT(Ahead-of-time)事前編譯,也就是程序在運行前先編譯。oat是ART虛擬機運行的文件,是ELF格式二進制文件,包含DEX和編譯的本地機器指令,oat文件包含DEX文件,因此比ODEX文件占用空間更大。

程序在首次安裝的時候,dex2oat默認會把classes.dex翻譯成本地機器指令,生成ELF格式的OAT文件,并將其放在了/data/dalvik-cache或者是/data/app/packagename/目錄下。ART加載OAT文件后不需要經過處理就可以直接運行,它在編譯時就從字節碼裝換成機器碼了,因此運行速度更快。

在android5.0之后oat文件的后綴還是odex,但是已經不是android5.0之前的文件格式,而是ELF格式封裝的本地機器碼,可以認為oat在dex上加了一層殼,可以從oat里提取出dex。

ee2fa0a0-5bd3-11ed-a3b6-dac502259ad0.png

(elf格式的oat)

因為此時的oat文件是一個標準的elf文件,識別其實其是不是oat文件的標準就是看其符號表。

ee6d2362-5bd3-11ed-a3b6-dac502259ad0.png

oatdata指向的是ELF文件的.rodata節區,存放了OAT文件頭OATHeader,OAT的DEX文件頭,原始DEX文件的DexFile等信息。

oatexec指向的是ELF文件的.text節區,這里存放的是編譯生成的指定平臺的二進制代碼。

oatlastword指向的是對應oat文件的結尾。

OAT文件大小差不多= dex文件+art文件

eeb91f1a-5bd3-11ed-a3b6-dac502259ad0.png

vdex文件

android8.0(Android O)之前dex文件嵌入到oat文件本身中,在Android 8.0之后dex2oat將classes.dex優化生成兩個文件oat文件(.odex)和vdex文件(.vdex),其中包含APK的未壓縮DEX代碼,以及一些旨在加快驗證速度的元數據。

odex文件中包含了本機代碼的OAT

vdex文件包含了原始的DEX文件副本

eed35e66-5bd3-11ed-a3b6-dac502259ad0.png

ART文件

ART虛擬機在執行dex文件時,需要將dex文件中使用的類,字符串等信息轉換為自定義的結構。art文件就是保存APK中使用的一些類,字符串等信息的ART內部表示,可以加快APK程序啟動的速度。

ELF文件

ELF文件格式提供了兩種不同的視,在匯編器和鏈接器看來,ELF文件是由Section Header Table描述的一系列Section的集合,而執行一個ELF文件時,在加載器(Loader)看來它是由Program Header Table描述的一系列Segment的集合。

ELF它是 Executable and Linking Format 的縮寫,它是android平臺上通用的二進制文件格式。在 Android 的 NDK 開發中,幾乎都是和 ELF 打交道。

比如:

1、c / c++ 文件編譯得到的 .o(或者 .obj)文件就是 ELF 格式的文件;

2、動態庫(.so)文件、可執行文件也是 ELF 文件;

3、動態庫的字符串擦除、動態庫加殼、動態庫修復等都離不開 ELF;

ELF文件名稱中的Executable和 Linking表明 ELF 有兩種重要的特性。

1、Executable表示可執行的。ELF 文件將參與程序的執行(Execution)過程。包括二進制程序的運行以及動態庫 .so 文件的加載。

2、Linking表示可連接的。ELF 文件參與編譯鏈接過程。

eef87890-5bd3-11ed-a3b6-dac502259ad0.png

ef54be16-5bd3-11ed-a3b6-dac502259ad0.png

ef8e158a-5bd3-11ed-a3b6-dac502259ad0.png

文件加載

Android中Java層通過System.load或System.loadLibrary來加載一個so文件,它的定義在Android源碼中的路徑

為/libcore/luni/src/main/java/java/lang/System.java,執行流程如下:

加載so的兩種方式

1、System.loadLibrary(path),只能加載jniLIbs目錄下的so文件,這個的執行流程

1.1、先讀取so文件的.init_array段

1.2、執行JNI_OnLoad函數

1.3、JNI_ONLoad是.so文件的初始函數

1.4、最后調用具體的native方法

2、System.load(path),可以加載任意路徑下的so

這兩種方式最終都會調用Android底層的dlopen來打開so

efd981b4-5bd3-11ed-a3b6-dac502259ad0.png

dlopen用來打開一個動態鏈接庫,并將其裝入內存。它的定義在Android源碼中的路徑為/bionic/linker/dlfcn.cpp,執行流程如下:

f02a25ec-5bd3-11ed-a3b6-dac502259ad0.png

So文件的入口為init_array、init_func這些初始化函數。這部分在dlopen的過程中就會執行,再之后的是JNI_Onload方法的調用。這里面可以注冊一些本地方法,也可以繼續做些變量的初始化等操作。






審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Android系統
    +關注

    關注

    0

    文章

    56

    瀏覽量

    13675
  • 虛擬機
    +關注

    關注

    1

    文章

    955

    瀏覽量

    28870
  • ELF文件
    +關注

    關注

    0

    文章

    14

    瀏覽量

    7252

原文標題:Android逆向基礎(DEX/ELF文件格式)

文章出處:【微信號:哆啦安全,微信公眾號:哆啦安全】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    Android文件格式詳解

    dexandroid虛擬機的可執行字節碼文件,java文件經過javac編譯成class文件,class
    的頭像 發表于 01-02 10:21 ?2870次閱讀
    <b class='flag-5'>Android</b><b class='flag-5'>文件</b>格式詳解

    #硬聲創作季 #智能手機 #Android -2.7.1AndroidManifest.xml項目配置文件-視

    Android文件
    學習電子知識
    發布于 :2022年11月15日 22:21:13

    #硬聲創作季 #智能手機 #Android ]--3.4編寫主界面布局文件(視頻)

    Android文件
    學習電子知識
    發布于 :2022年11月15日 22:22:54

    #硬聲創作季 #智能手機 #Android 5編寫選擇計算類型頁面布局文件(視頻)

    Android文件
    學習電子知識
    發布于 :2022年11月15日 22:23:19

    [4.7.3]--4.8.3編寫主界面布局文件(#硬聲創作季 #智能手機 #Android

    Android文件
    學習電子知識
    發布于 :2022年11月15日 22:37:18

    DEX加密效果分析

    dex加密目的:保護安卓應用的Java源代碼,避免被惡意分析,技術被竊取準備工具:1、apktool :反編譯apk,提取smali代碼2、dex2jar :將dex轉化為jar文件3
    發表于 12-12 16:56

    App加固技術解析:DEX文件格式的詳解

    基于Android平臺的虛機應用很難繞過的一種文件格式,重要性不言而喻?! ≡陧斚蠹夹g的 Android 加固解決方案中,有著DEX殼保護、指令虛擬化(將
    發表于 09-28 11:21

    Android系統WMA文件播放功能的設計與實現

    基于Android多媒體系統的Stagefright框架,通過創建WMA的文件解析單元和解碼單元,使WMA音頻文件中的編碼數據被正確地解碼成原始數據并輸出。通過在Android平臺測試
    發表于 11-04 11:33 ?42次下載

    深入理解Android之資源文件

    深入理解Android之資源文件
    發表于 01-22 21:11 ?22次下載

    Android系統文件夾結構解析

    Android系統文件夾結構解析
    發表于 03-19 11:23 ?0次下載

    Android 仿ES界面文件瀏覽器源碼

    Android 仿ES界面文件瀏覽器源碼
    發表于 03-19 11:23 ?1次下載

    干貨:總結Java中創建文件的五種最佳實踐方法(附源碼)

    在java中有很多的方法可以創建文件文件,你是否真的認真的總結過?下面筆者就幫大家總結java中創建
    的頭像 發表于 08-28 11:29 ?7029次閱讀
    干貨:<b class='flag-5'>總結</b>Java中創建<b class='flag-5'>文件</b>的五種最佳實踐方法(附源碼)

    常用的BIN文件操作總結

    BIN文件,即二進制文件,廣泛應用于嵌入式,我們常用的Firmware通常會以BIN文件或者HEX文件格式存儲,因此,對BIN文件的讀寫操作
    的頭像 發表于 02-28 14:34 ?5.9w次閱讀
    常用的BIN<b class='flag-5'>文件</b>操作<b class='flag-5'>總結</b>

    動態分析so文件中的JNI函數

    APP逆向過程中,需要對dex文件和elf文件進行分析,又因現在各APP都有各種代碼保護手法,因此都需要進行動態分析。
    的頭像 發表于 04-10 11:18 ?2760次閱讀

    Android.mk判斷語句簡介

    Android.mk 是Android 提供的一種makefile 文件,注意用來編譯生成(exe,so,a,jar,apk)等文件。
    的頭像 發表于 04-15 09:29 ?1831次閱讀
    主站蜘蛛池模板: 4hc44四虎www视频 | zzji国产精品视频 | 伊人网站在线 | 国产在播放一区 | 男人日女人视频在线观看 | 国产精品www夜色影视 | 亚洲天堂免费观看 | 欧美人成绝费网站色www吃脚 | 神马影院午夜在线 | 成人免费看黄页网址大全 | 国产福利2021最新在线观看 | 激情网五月 | 午夜视频久久 | 一品毛片 | 69自拍视频| 三级国产 | 欧美日韩一区二区三区毛片 | 四虎永久在线精品免费影视 | 岛国毛片在线观看 | 男人性天堂| 看片在线观看免费 | av福利网址网站 | 美女很黄很黄是免费的·无遮挡网站 | 欧美成人一区二区三区在线电影 | 在线视频这里只有精品 | 亚洲综合欧美日本另类激情 | 精品国产自在现线看久久 | 免费视频在线观看1 | 精品一级毛片 | 久久久噜噜噜久久 | 亚洲激情婷婷 | 久久精品国产精品亚洲人人 | 国产成人乱码一区二区三区 | 久久久噜久噜久久综合 | 韩国三级视频网站 | 色色色色色色色色色色色色 | 中文字幕人成不卡一区 | 国模掰开 | 欧美另类丰满69xxxxx | 凹凸福利视频导航 | 久久手机看片 |