日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

【Android 逆向】Android 进程注入工具开发 ( EIP 寄存器指向 dlopen 函数 | ESP 寄存器指向栈内存 | 调试程序收回目标进程控制权 )

發布時間:2025/6/17 Android 29 豆豆

文章目錄

  • 一、EIP 寄存器指向 dlopen 函數
  • 二、ESP 寄存器指向棧內存
  • 三、調試程序收回目標進程控制權





一、EIP 寄存器指向 dlopen 函數



代碼段中 , 一般都有 dlopen 函數 , 該函數屬于 system/lib/linker 模塊 , 這是一個 so 庫 ;

dlopen 函數的作用是加載一個動態庫 , 并返回動態鏈接庫的句柄

包含頭文件 :

#include <dlfcn.h>

函數原型 :

void * dlopen( const char * pathname, int mode);

將 EIP 寄存器指向 dlopen 函數 , 也就是將 dlopen 函數的地址設置到 EIP 寄存器中 ;

目標進程 恢復運行后 , 就會執行 dlopen 函數 ;





二、ESP 寄存器指向棧內存



除了函數外 , 還要傳遞參數 , 在 x86 架構中 , 函數參數是通過 棧 進行傳遞的 ;

使用 libc.so 中的 mmap 函數 在 堆 中申請一塊內存 S , 在該內存中存儲 dlopen 的參數 , 這個參數就是 動態庫的 路徑 ;

ESP 寄存器指向的位置就是棧內存的地址 , 用于存放函數的參數 ;

將 S 內存作為 棧 : 將 S 內存的首地址賦值給 ESP 寄存器 ;





三、調試程序收回目標進程控制權



在 dlopen 函數執行完畢后 , 調試程序 需要將 進程控制權收回 , 不能再接著 dlopen 函數之后繼續執行下去 ;

在 x86 的棧中 , 有一個返回地址 , 返回地址上面是 參數列表 , 參數出棧后 , 會指向返回地址 ;

當 ptrace 函數 attach 獲取到 目標進程控制權后 , 如果進程崩潰 , 調試程序會回收控制權 ;

因此這里需要讓程序崩潰 , 在返回地址中 , 設置 0x00 00 00 00 地址值 , 該地址是內存的最前端 , 這個地址是保留給系統的 , 應用程序不允許訪問 , 如果用戶進程讀取該內存地址數據 , 直接崩潰 , 返回不可讀錯誤 ;

此時 目標進程 的控制權又回到了 調試程序 手中 ;

后續可以再執行 讀寫內存 , 讀寫寄存器 , 或者 detach 目標進程 ;

總結

以上是生活随笔為你收集整理的【Android 逆向】Android 进程注入工具开发 ( EIP 寄存器指向 dlopen 函数 | ESP 寄存器指向栈内存 | 调试程序收回目标进程控制权 )的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。