文章目录
一、Android 系统中调试器进程内存流程
二、编译内存调试动态库以及调试程序
一、Android 系统中调试器进程内存流程
修改游戏运行中的内存 , 游戏运行之后 , 游戏进程肯定有对应的内存空间 ;
使用 注入工具 将 一个 libnative.so 动态库 , 注入到游戏运行进程对应的内存中 , 注入成功后 , 在运行内存中就存在了该 libnative.so 动态库 ;
libnative.so 动态库的作用是 跨进程接收 外部 另外一个进程 cmd 的指令 , cmd 会告知 libnative.so 动态库 , 要搜索以及修改内存的细节 , 如要搜索什么特征的内存 , 以及修改指定内存地址的指定数据 ;
具体的工作流程 :
通过 IDA 内存分析工具找到要修改的代码特征 ;
使用 cmd 工具远程通知 注入到 被调试进程中的 libnative.so 动态库 ;
libnative.so 动态库 搜索 代码特征 , 并返回内存地址 ;
使用 cmd 工具向 libnative.so 动态库 发送修改 指定内存 的指定 n 字节数据 ;
二、编译内存调试动态库以及调试程序
下面是涉及的调试程序 ;
该程序使用 ndk-build 脚本编译 ;
查看 Android.mk 构建脚本 :
LOCAL_PATH := $(call my-dir) ####tool#### include $(CLEAR_VARS) # 链接 log 日志库 LOCAL_LDLIBS += -llog # 编译可执行程序名称 LOCAL_MODULE := tool # 指定源码 LOCAL_SRC_FILES := main.c # 指定输出目录 NDK_APP_DST_DIR := ../Debug/$(TARGET_ARCH_ABI) # 编译可执行程序 include $(BUILD_EXECUTABLE) ####libBridge#### include $(CLEAR_VARS) # 链接 log 日志库 LOCAL_LDLIBS += -llog # 编译动态库名称 libbridge.so LOCAL_MODULE := bridge # 指定源码 LOCAL_SRC_FILES := bridge.c # 指定输出目录 NDK_APP_DST_DIR := ../Debug/$(TARGET_ARCH_ABI) # 编译动态库 include $(BUILD_SHARED_LIBRARY) ####command#### include $(CLEAR_VARS) # 链接 log 日志库 LOCAL_LDLIBS += -llog LOCAL_CPPFLAGS += -std=c++11 LOCAL_CPP_FEATURES += rtti exceptions # 编译可执行程序名称 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) # 编译可执行程序 include $(BUILD_EXECUTABLE)
在上述 NDK 工程中 , 编译了 2 个可执行程序 , 分别是 cmd 和 tool ;
编译了 1 个动态库 , 是 libbridge.so ;
编译命令 : 进入 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
命令行输出 :
Microsoft Windows [版本 10.0.19041.1288] (c) Microsoft Corporation。保留所有权利。 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/tool Y:\002_WorkSpace\001_AS\magic3.1.3\magic>
编译结果如下 :