【Android 逆向】修改运行中的 Android 进程的内存数据 ( Android 系统中调试器进程内存流程 | 编译内存调试动态库以及调试程序 )
文章目錄
- 一、Android 系統(tǒng)中調(diào)試器進(jìn)程內(nèi)存流程
- 二、編譯內(nèi)存調(diào)試動(dòng)態(tài)庫以及調(diào)試程序
- 三、博客資源
一、Android 系統(tǒng)中調(diào)試器進(jìn)程內(nèi)存流程
修改游戲運(yùn)行中的內(nèi)存 , 游戲運(yùn)行之后 , 游戲進(jìn)程肯定有對應(yīng)的內(nèi)存空間 ;
使用 注入工具 將 一個(gè) libnative.so 動(dòng)態(tài)庫 , 注入到游戲運(yùn)行進(jìn)程對應(yīng)的內(nèi)存中 , 注入成功后 , 在運(yùn)行內(nèi)存中就存在了該 libnative.so 動(dòng)態(tài)庫 ;
libnative.so 動(dòng)態(tài)庫的作用是 跨進(jìn)程接收 外部 另外一個(gè)進(jìn)程 cmd 的指令 , cmd 會(huì)告知 libnative.so 動(dòng)態(tài)庫 , 要搜索以及修改內(nèi)存的細(xì)節(jié) , 如要搜索什么特征的內(nèi)存 , 以及修改指定內(nèi)存地址的指定數(shù)據(jù) ;
具體的工作流程 :
- 通過 IDA 內(nèi)存分析工具找到要修改的代碼特征 ;
- 使用 cmd 工具遠(yuǎn)程通知 注入到 被調(diào)試進(jìn)程中的 libnative.so 動(dòng)態(tài)庫 ;
- libnative.so 動(dòng)態(tài)庫 搜索 代碼特征 , 并返回內(nèi)存地址 ;
- 使用 cmd 工具向 libnative.so 動(dòng)態(tài)庫 發(fā)送修改 指定內(nèi)存 的指定 n 字節(jié)數(shù)據(jù) ;
二、編譯內(nèi)存調(diào)試動(dòng)態(tài)庫以及調(diào)試程序
下面是涉及的調(diào)試程序 ;
該程序使用 ndk-build 腳本編譯 ;
查看 Android.mk 構(gòu)建腳本 :
LOCAL_PATH := $(call my-dir) ####tool#### include $(CLEAR_VARS) # 鏈接 log 日志庫 LOCAL_LDLIBS += -llog # 編譯可執(zhí)行程序名稱 LOCAL_MODULE := tool # 指定源碼 LOCAL_SRC_FILES := main.c # 指定輸出目錄 NDK_APP_DST_DIR := ../Debug/$(TARGET_ARCH_ABI) # 編譯可執(zhí)行程序 include $(BUILD_EXECUTABLE)####libBridge#### include $(CLEAR_VARS) # 鏈接 log 日志庫 LOCAL_LDLIBS += -llog # 編譯動(dòng)態(tài)庫名稱 libbridge.so LOCAL_MODULE := bridge # 指定源碼 LOCAL_SRC_FILES := bridge.c # 指定輸出目錄 NDK_APP_DST_DIR := ../Debug/$(TARGET_ARCH_ABI) # 編譯動(dòng)態(tài)庫 include $(BUILD_SHARED_LIBRARY)####command#### include $(CLEAR_VARS) # 鏈接 log 日志庫 LOCAL_LDLIBS += -llog LOCAL_CPPFLAGS += -std=c++11 LOCAL_CPP_FEATURES += rtti exceptions # 編譯可執(zhí)行程序名稱 LOCAL_MODULE := cmd # 指定頭文件 LOCAL_C_INCLUDES += json LOCAL_C_INCLUDES += Y:/001_DevelopTools/002_Android_SDK/ndk/android-ndk-r14b-windows-x86_64/android-ndk-r14b/platforms/android-19/arch-x86/usr/include # 指定源碼 LOCAL_SRC_FILES := command.cpp json/json_reader.cpp json/json_value.cpp json/json_writer.cpp # 指定輸出目錄 NDK_APP_DST_DIR := ../Debug/$(TARGET_ARCH_ABI) # 編譯可執(zhí)行程序 include $(BUILD_EXECUTABLE)在上述 NDK 工程中 , 編譯了 2 個(gè)可執(zhí)行程序 , 分別是 cmd 和 tool ;
編譯了 1 個(gè)動(dòng)態(tài)庫 , 是 libbridge.so ;
編譯命令 : 進(jìn)入 Y:\002_WorkSpace\001_AS\magic3.1.3\magic 目錄 , 執(zhí)行如下命令 ;
Y:/001_DevelopTools/002_Android_SDK/ndk/android-ndk-r14b-windows-x86_64/android-ndk-r14b/ndk-build.cmd NDK_PROJECT_PATH=. APP_BUILD_SCRIPT=./Android.mk NDK_APPLICATION_MK=./Application.mk命令行輸出 :
Microsoft Windows [版本 10.0.19041.1288] (c) Microsoft Corporation。保留所有權(quán)利。Y:\002_WorkSpace\001_AS\magic3.1.3\magic>Y:/001_DevelopTools/002_Android_SDK/ndk/android-ndk-r14b-windows-x86_64/android-ndk-r14b/ndk-build.cmd NDK_PROJECT_PATH=. APP_BUILD_SCRIPT=./Android.mk NDK_APPLICATION_MK=./Application.mk [x86] Compile : bridge <= bridge.c [x86] SharedLibrary : libbridge.so [x86] Install : libbridge.so => ../Debug/x86/libbridge.so [x86] Compile++ : cmd <= command.cpp [x86] Compile++ : cmd <= json_reader.cpp [x86] Compile++ : cmd <= json_value.cpp [x86] Compile++ : cmd <= json_writer.cpp [x86] Executable : cmd [x86] Install : cmd => ../Debug/x86/cmd [x86] Compile : tool <= main.c [x86] Executable : tool [x86] Install : tool => ../Debug/x86/toolY:\002_WorkSpace\001_AS\magic3.1.3\magic>編譯結(jié)果如下 :
三、博客資源
下載地址 : https://download.csdn.net/download/han1202012/35905718
總結(jié)
以上是生活随笔為你收集整理的【Android 逆向】修改运行中的 Android 进程的内存数据 ( Android 系统中调试器进程内存流程 | 编译内存调试动态库以及调试程序 )的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Android 逆向】代码调试器开发
- 下一篇: 【Android 逆向】修改运行中的 A