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

简介: 【Android 逆向】修改运行中的 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 脚本编译 ;


image.png


查看 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>


image.png


编译结果如下 :


image.png




目录
相关文章
|
7天前
|
消息中间件 Linux
Linux:进程间通信(共享内存详细讲解以及小项目使用和相关指令、消息队列、信号量)
通过上述讲解和代码示例,您可以理解和实现Linux系统中的进程间通信机制,包括共享内存、消息队列和信号量。这些机制在实际开发中非常重要,能够提高系统的并发处理能力和数据通信效率。希望本文能为您的学习和开发提供实用的指导和帮助。
55 20
|
27天前
|
运维 监控 Ubuntu
【运维】如何在Ubuntu中设置一个内存守护进程来确保内存不会溢出
通过设置内存守护进程,可以有效监控和管理系统内存使用情况,防止内存溢出带来的系统崩溃和服务中断。本文介绍了如何在Ubuntu中编写和配置内存守护脚本,并将其设置为systemd服务。通过这种方式,可以在内存使用超过设定阈值时自动采取措施,确保系统稳定运行。
62 4
|
1月前
|
C语言 开发者 内存技术
探索操作系统核心:从进程管理到内存分配
本文将深入探讨操作系统的两大核心功能——进程管理和内存分配。通过直观的代码示例,我们将了解如何在操作系统中实现这些基本功能,以及它们如何影响系统性能和稳定性。文章旨在为读者提供一个清晰的操作系统内部工作机制视角,同时强调理解和掌握这些概念对于任何软件开发人员的重要性。
|
1月前
|
Linux 调度 C语言
深入理解操作系统:从进程管理到内存优化
本文旨在为读者提供一次深入浅出的操作系统之旅,从进程管理的基本概念出发,逐步探索到内存管理的高级技巧。我们将通过实际代码示例,揭示操作系统如何高效地调度和优化资源,确保系统稳定运行。无论你是初学者还是有一定基础的开发者,这篇文章都将为你打开一扇了解操作系统深层工作原理的大门。
|
2月前
|
算法 调度 开发者
深入理解操作系统:从进程管理到内存分配
本文旨在为读者提供一个深入浅出的操作系统知识之旅,从进程管理的基础概念出发,探索内存分配的策略与技巧。我们将通过实际代码示例,揭示操作系统背后的逻辑与奥秘,帮助读者构建起对操作系统工作原理的直观理解。文章不仅涵盖理论知识,还提供实践操作的指导,使读者能够将抽象的概念转化为具体的技能。无论你是初学者还是有一定基础的开发者,都能在这篇文章中找到有价值的信息和启发。
|
API Android开发
【Android 插件化】Hook 插件化框架 ( Hook Activity 启动流程 | Hook 点分析 )(一)
【Android 插件化】Hook 插件化框架 ( Hook Activity 启动流程 | Hook 点分析 )(一)
179 0
【Android 插件化】Hook 插件化框架 ( Hook Activity 启动流程 | Hook 点分析 )(一)
|
Android开发
【Android 插件化】Hook 插件化框架 ( Hook Activity 启动流程 | 主线程创建 Activity 实例之前使用插件 Activity 类替换占位的组件 )(四)
【Android 插件化】Hook 插件化框架 ( Hook Activity 启动流程 | 主线程创建 Activity 实例之前使用插件 Activity 类替换占位的组件 )(四)
185 0
|
Android开发
【Android 插件化】Hook 插件化框架 ( Hook Activity 启动流程 | 主线程创建 Activity 实例之前使用插件 Activity 类替换占位的组件 )(二)
【Android 插件化】Hook 插件化框架 ( Hook Activity 启动流程 | 主线程创建 Activity 实例之前使用插件 Activity 类替换占位的组件 )(二)
218 0
|
Android开发
【Android 插件化】Hook 插件化框架 ( Hook Activity 启动流程 | AMS 启动前使用动态代理替换掉插件 Activity 类 )(三)
【Android 插件化】Hook 插件化框架 ( Hook Activity 启动流程 | AMS 启动前使用动态代理替换掉插件 Activity 类 )(三)
212 0
|
Java Android开发 开发者
【Android 插件化】Hook 插件化框架 ( Hook Activity 启动流程 | AMS 启动前使用动态代理替换掉插件 Activity 类 )(一)
【Android 插件化】Hook 插件化框架 ( Hook Activity 启动流程 | AMS 启动前使用动态代理替换掉插件 Activity 类 )(一)
379 0