【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




目录
相关文章
|
1月前
|
弹性计算 运维 监控
基于进程热点分析与系统资源优化的智能运维实践
智能服务器管理平台提供直观的可视化界面,助力高效操作系统管理。核心功能包括运维监控、智能助手和扩展插件管理,支持系统健康监控、故障诊断等,确保集群稳定运行。首次使用需激活服务并安装管控组件。平台还提供进程热点追踪、性能观测与优化建议,帮助开发人员快速识别和解决性能瓶颈。定期分析和多维度监控可提前预警潜在问题,保障系统长期稳定运行。
89 17
|
6月前
麒麟系统mate-indicators进程占用内存过高问题解决
【10月更文挑战第7天】麒麟系统mate-indicators进程占用内存过高问题解决
714 2
|
6月前
|
存储 前端开发 Java
Android MVVM架构模式下如何避免内存泄漏
Android采用MVVM架构开发项目,如何避免内存泄漏风险?怎样避免内存泄漏?
173 1
|
3月前
|
监控 搜索推荐 开发工具
2025年1月9日更新Windows操作系统个人使用-禁用掉一下一些不必要的服务-关闭占用资源的进程-禁用服务提升系统运行速度-让电脑不再卡顿-优雅草央千澈-长期更新
2025年1月9日更新Windows操作系统个人使用-禁用掉一下一些不必要的服务-关闭占用资源的进程-禁用服务提升系统运行速度-让电脑不再卡顿-优雅草央千澈-长期更新
260 2
2025年1月9日更新Windows操作系统个人使用-禁用掉一下一些不必要的服务-关闭占用资源的进程-禁用服务提升系统运行速度-让电脑不再卡顿-优雅草央千澈-长期更新
|
5月前
|
Linux
如何在 Linux 系统中查看进程占用的内存?
如何在 Linux 系统中查看进程占用的内存?
817 58
|
4月前
|
存储 监控 Linux
嵌入式Linux系统编程 — 5.3 times、clock函数获取进程时间
在嵌入式Linux系统编程中,`times`和 `clock`函数是获取进程时间的两个重要工具。`times`函数提供了更详细的进程和子进程时间信息,而 `clock`函数则提供了更简单的处理器时间获取方法。根据具体需求选择合适的函数,可以更有效地进行性能分析和资源管理。通过本文的介绍,希望能帮助您更好地理解和使用这两个函数,提高嵌入式系统编程的效率和效果。
196 13
|
4月前
|
监控 Java Android开发
深入探索Android系统的内存管理机制
本文旨在全面解析Android系统的内存管理机制,包括其工作原理、常见问题及其解决方案。通过对Android内存模型的深入分析,本文将帮助开发者更好地理解内存分配、回收以及优化策略,从而提高应用性能和用户体验。
|
5月前
|
监控 Java Android开发
深入探讨Android系统的内存管理机制
本文将深入分析Android系统的内存管理机制,包括其内存分配、回收策略以及常见的内存泄漏问题。通过对这些方面的详细讨论,读者可以更好地理解Android系统如何高效地管理内存资源,从而提高应用程序的性能和稳定性。
199 16
|
5月前
|
前端开发 数据处理 Android开发
Flutter前端开发中的调试技巧与工具使用方法,涵盖调试的重要性、基本技巧如打印日志与断点调试、常用调试工具如Android Studio/VS Code调试器和Flutter Inspector的介绍
本文深入探讨了Flutter前端开发中的调试技巧与工具使用方法,涵盖调试的重要性、基本技巧如打印日志与断点调试、常用调试工具如Android Studio/VS Code调试器和Flutter Inspector的介绍,以及具体操作步骤、常见问题解决、高级调试技巧、团队协作中的调试应用和未来发展趋势,旨在帮助开发者提高调试效率,提升应用质量。
147 8
|
5月前
|
网络协议 Linux 虚拟化
如何在 Linux 系统中查看进程的详细信息?
如何在 Linux 系统中查看进程的详细信息?
516 1

热门文章

最新文章

相关实验场景

更多
下一篇
oss创建bucket