【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 远程调用 目标进程中 libc.so 动态库中的 mmap 函数 一 | mmap 函数简介 )
文章目錄
- 一、mmap 簡介
- 二、mmap 函數(shù)作用
一、mmap 簡介
mmap 函數(shù)的作用是 將 文件 映射到 內(nèi)存中 , 映射的單位必須是 PAGE_SIZE ;
mmap 函數(shù)引入頭文件 :
<sys/mman.h>mmap 函數(shù)原型 :
<sys/mman.h> void* mmap(void* start,size_t length,int prot,int flags,int fd,off_t offset); int munmap(void* start,size_t length);mmap 函數(shù)參數(shù) :
- void* start : 如果為 0 就是讓系統(tǒng)自動分配 , 如果不為 0 , 則由用戶指定分配的地址 ;
- size_t length : 申請分配內(nèi)存的大小 ;
- int prot : 內(nèi)存保護(hù)標(biāo)志 , 如 PROT_READ | PROT_WRITE | PROT_EXEC , 表示 可讀 | 可寫 | 可執(zhí)行 ;
- int flags : 映射對象類型標(biāo)志位標(biāo)志位 , 如 MAP_ANONYMOUS | MAP_PRIVATE , 表示 匿名 | 私有 ;
- int fd : 文件描述符 ; 沒有設(shè)置為 0 ;
- off_t offset : 被映射對象的起點(diǎn)偏移量 , 一般設(shè)置 0 ;
二、mmap 函數(shù)作用
mmap 函數(shù)作用 : mmap 本質(zhì)是內(nèi)存映射 , 用途如下 ;
① 大文件讀寫 : 大文件讀寫 時 , 可以 將文件映射到內(nèi)存中 ;
② 內(nèi)存分配 : 一般在用戶層使用 malloc 函數(shù)即可 , 不常用 ;
③ 修改內(nèi)存 : 當(dāng)以 匿名/私有 的方式 分配 可讀/可寫/可執(zhí)行 的內(nèi)存時 , 指定第一個 addr 地址參數(shù) , 系統(tǒng)分配該地址處的內(nèi)存 , 可以用于 修改當(dāng)前內(nèi)存的值
malloc 申請內(nèi)存 : 使用 malloc 也可以申請內(nèi)存 , malloc 底層也是調(diào)用的 mmap 系統(tǒng)調(diào)用方法申請的內(nèi)存 ;
① 普通應(yīng)用 : malloc 中在調(diào)用 mmap 系統(tǒng)調(diào)用之前 , 執(zhí)行了大量的指令操作 ; 如果在普通應(yīng)用中 , 這是沒有問題的 ;
② 逆向工具應(yīng)用 : 但是逆向的場景中 , 動態(tài)庫是侵入目標(biāo)進(jìn)程的 , 第一個侵入的動態(tài)庫 , 風(fēng)險很大 , 會破壞目標(biāo)進(jìn)程內(nèi)存結(jié)構(gòu) , 因此加載的指令盡量少 , 這里直接使用系統(tǒng)調(diào)用 , 簡潔高效安全 ;
在注入進(jìn)程的動態(tài)庫中 , 指令越復(fù)雜 , 越容易出錯 ;
總結(jié)
以上是生活随笔為你收集整理的【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 远程调用 目标进程中 libc.so 动态库中的 mmap 函数 一 | mmap 函数简介 )的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Android 逆向】Android
- 下一篇: 【Android 逆向】Android