Android 逆向修改运行中的 Android 进程的内存数据 ( Android 系统中调试器进程内存流程 | 编译内存调试动态库以及调试程序 )

Posted 韩曙亮

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 逆向修改运行中的 Android 进程的内存数据 ( 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>

编译结果如下 :





三、博客资源



下载地址 : https://download.csdn.net/download/han1202012/35905718

以上是关于Android 逆向修改运行中的 Android 进程的内存数据 ( Android 系统中调试器进程内存流程 | 编译内存调试动态库以及调试程序 )的主要内容,如果未能解决你的问题,请参考以下文章

Android 逆向修改运行中的 Android 进程的内存数据 ( Android 命令行中获取要调试的应用进程的 PID | 进程注入调试进程内存的 so 库 )

Android 逆向修改运行中的 Android 进程的内存数据 ( 运行环境搭建 Android 模拟器安装 | 拷贝 Android 平台可执行文件和动态库到 /data/system )(代码片

Android 逆向Android 逆向基本概念 ( 定位内存中的修改点 | 基址寻址法 | 搜索定位法 )

Android 逆向逆向修改游戏应用 ( 分析应用结构 | 定位动态库位置 | 定位动态库中的修改点 | 修改动态库 | 重打包 )

Android 逆向逆向修改游戏应用 ( APK 解析工具 | 解包 -> 分析 -> 重打包 -> 签名 流程 )

Android 逆向Android 进程注入工具开发 ( 编译注入工具 | 编译结果文件说明 | 注入过程说明 )