【Android 逆向】Android 逆向基本概念 ( 软件运行时内存结构 | 文件与内存之间的联系 )
生活随笔
收集整理的這篇文章主要介紹了
【Android 逆向】Android 逆向基本概念 ( 软件运行时内存结构 | 文件与内存之间的联系 )
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 一、Android 軟件運行時內存結構
- 二、Android 文件與內存之間的聯系
一、Android 軟件運行時內存結構
Android 軟件運行時內存結構 :
- 硬件層 : 內存中 , 硬件層處于最底層 , 映射成一些文件 ;
- 硬件驅動層 : 該層是 硬件層 與 操作系統的 紐帶 , 一般與 內核 進行交互 ;
- 內核層 : 可調用的最底層的層級 , 可通過 系統調用 API 進行相關操作 , 如 文件處理 , 內存處理 ; 系統調用的本質就是調用內核中的一些接口 ;
- 應用支持層 : 系統庫 , 標準庫 , libc , opencv 等系統自帶的函數庫 , 都是在該層 ; 用戶一般無法操作該層 , 如果用戶自定義一個庫 , 放在應用支持層 , 需要 root / 越獄 等獲取最高權限的操作 ;
- 原生接口層 : 用戶自定義的 Java 與 C / C++ 交互的接口 , 一般用于 圖形圖像 / 音視頻 / 底層調用 / 網絡通信 等功能 ;
- Java 應用層 : 用戶開發的 Java 程序 , 一般用于 UI 界面展示 , 用戶交互操作 ;
二、Android 文件與內存之間的聯系
不管運行的 APK / EXE 等程序 , 這些可執行程序中的文件 與 進程的內存中的數據是有一定的關聯的 ;
只有熟悉 文件 與 內存數據之間的關聯 , 才可以進行一些修改 ;
內存中的區域 :
- 中斷保留區域 : 一般情況下 0\rm 00 ~ 0x8000\rm0x80000x8000 地址 , 進程內應用層沒有訪問權限 ; 讀寫都會引起崩潰 ; 這是為內核層保留的區域 ; 每個進程都有 111 個中斷保留區域 ;
- 應用包映射區域 : APK 安裝文件 , 在內存中有一塊映射區域 , 當使用 Assets 資源時 , 從內存中的該區域解壓出來 , 放置到資源模塊中 ;
- 資源映射區 : jar 包 , 字體 , 圖片 等文件在內存的映射區域 ;
- 動態庫區域 : 虛擬機 , jni 層相關的 so 動態庫區域 ;
- 堆區域 : Java 中的 new 關鍵字創建的對象 , C/C++ 中 malloc 分配的內存 , 都在堆內存中 ;
- 棧內存 : 函數參數 , 本地變量 , 都存放在棧區域中 ;
具體的 棧內存 與 堆內存 參考 【Java 虛擬機原理】垃圾回收算法 ( Java 虛擬機內存分區 | 垃圾回收機制 | 引用計數器算法 | 引用計數循環引用弊端 ) 一、Java 虛擬機內存分區 博客章節 ;
通過上圖的 文件 與 內存 之間的對應關系 , 實際進行逆向時 , 依據該對應關系 , 查找文件對應的內存地址 ;
因為有些 APK 文件是無法進行反編譯 , 或無法進行重打包 , 如果要修改文件中的內容 , 需要知道文件與內存之間的對應關系 , 通過修改運行后的內存數據 , 達到與修改文件的相同效果 ;
一般情況下修改 動態庫 區域 比較多 ;
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的【Android 逆向】Android 逆向基本概念 ( 软件运行时内存结构 | 文件与内存之间的联系 )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Android 逆向】Android
- 下一篇: 【开发环境】Mac 中 IntelliJ