【Android 逆向】Android 进程注入工具开发 ( 编译注入工具 | 编译结果文件说明 | 注入过程说明 )
文章目錄
- 一、編譯注入工具
- 二、編譯結(jié)果文件說明
- 三、注入過程說明
一、編譯注入工具
在 Visual Studio 2019 中打開了一個(gè) " 生成文件項(xiàng)目 " , 該項(xiàng)目就是注入項(xiàng)目 ; 參考 【Android 逆向】修改運(yùn)行中的 Android 進(jìn)程的內(nèi)存數(shù)據(jù) ( Android 系統(tǒng)中調(diào)試器進(jìn)程內(nèi)存流程 | 編譯內(nèi)存調(diào)試動態(tài)庫以及調(diào)試程序 ) 博客 ;
編譯該項(xiàng)目 ,
生成結(jié)果如下 :
已啟動生成… 1>------ 已啟動生成: 項(xiàng)目: magic, 配置: Debug Win32 ------ 1>[x86] Compile : bridge <= bridge.c 1>[x86] SharedLibrary : libbridge.so 1>[x86] Install : libbridge.so => ../Debug/x86/libbridge.so 1>[x86] Compile++ : cmd <= command.cpp 1>[x86] Compile++ : cmd <= json_reader.cpp 1>[x86] Compile++ : cmd <= json_value.cpp 1>[x86] Compile++ : cmd <= json_writer.cpp 1>[x86] Executable : cmd 1>[x86] Install : cmd => ../Debug/x86/cmd 1>[x86] Compile : tool <= main.c 1>[x86] Executable : tool 1>[x86] Install : tool => ../Debug/x86/tool ========== 生成: 成功 1 個(gè),失敗 0 個(gè),最新 0 個(gè),跳過 0 個(gè) ==========
二、編譯結(jié)果文件說明
編譯完成后的編譯結(jié)果有
- tool 可執(zhí)行文件
- cmd 可執(zhí)行文件
- libbridge.so 動態(tài)庫
上述文件都是在 PC 電腦上的 x86 架構(gòu)的 Android 模擬器上運(yùn)行的相關(guān)文件 , 具體就是 雷電模擬器 3.75 版本 ;
使用上述工具調(diào)試 Android 進(jìn)程參考如下博客 :
- 【Android 逆向】修改運(yùn)行中的 Android 進(jìn)程的內(nèi)存數(shù)據(jù) ( 運(yùn)行環(huán)境搭建 Android 模擬器安裝 | 拷貝 Android 平臺可執(zhí)行文件和動態(tài)庫到 /data/system )
- 【Android 逆向】修改運(yùn)行中的 Android 進(jìn)程的內(nèi)存數(shù)據(jù) ( Android 命令行中獲取要調(diào)試的應(yīng)用進(jìn)程的 PID | 進(jìn)程注入調(diào)試進(jìn)程內(nèi)存的 so 庫 )
- 【Android 逆向】修改運(yùn)行中的 Android 進(jìn)程的內(nèi)存數(shù)據(jù) ( 使用 IDA 分析要修改的內(nèi)存特征 | 根據(jù)內(nèi)存特征搜索修改點(diǎn) | 修改進(jìn)程內(nèi)存 )
三、注入過程說明
將所有文件拷貝到 Android 模擬器的 /data/system/debug/ 目錄下 , 然后賦予 777 權(quán)限 ;
執(zhí)行
tool 2222命令 , 即可 attach 調(diào)試 進(jìn)程號 PID 為 2222 的 進(jìn)程 ;
根據(jù) PID , 一定能在 /proc/2222/mmaps 文件中找到該進(jìn)程 每個(gè) so 動態(tài)庫的運(yùn)行地址 , 尤其是 libc.so 動態(tài)庫的地址 ;
先遠(yuǎn)程注入 libbridge.so 動態(tài)庫 , 然后遠(yuǎn)程調(diào)用 libbridge.so 中的 load 函數(shù) , 將真正的 libnative.so 加載到目標(biāo)進(jìn)程中 ;
使用修改寄存器的方法 強(qiáng)行加載 libbridge.so 動態(tài)庫 , 會影響目標(biāo)進(jìn)程的布局 , 因此這個(gè)動態(tài)庫越小越好 , 并且 使用完畢后 , 馬上關(guān)閉該動態(tài)庫 , libbridge.so 動態(tài)庫只起一個(gè)敲門的作用 , libnative.so 加載完成后 , 直接將 libbridge.so 動態(tài)庫干掉 , 過河拆橋 ;
上述操作同時(shí) , 恢復(fù) 寄存器 和 棧內(nèi)存 的值 ;
總結(jié)
以上是生活随笔為你收集整理的【Android 逆向】Android 进程注入工具开发 ( 编译注入工具 | 编译结果文件说明 | 注入过程说明 )的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【错误记录】Visual Studio
- 下一篇: 【Android 逆向】Android