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

韩曙亮 韩曙亮     2023-01-24     303

关键词:





一、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系统中调试器进程内存流程修改游戏运行中的内存,游戏运行之后,游戏进程肯定有对应的内存空间;使用注入工具将一个l... 查看详情

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

文章目录一、运行环境搭建Android模拟器安装二、拷贝Android平台可执行文件和动态库到/data/system目录下一、运行环境搭建Android模拟器安装使用低版本的雷电模拟器调试应用,下载地址https://www.ldmnq.com/other/version-history-and-release-notes.... 查看详情

android逆向android进程代码注入原理(注入本质|静态注入和动态注入|静态注入两种方式|修改动态库重打包|修改/data/app/xx/libs动态库)

文章目录一、注入本质二、静态注入和动态注入三、静态注入两种方式(修改动态库重打包|修改/data/app/packageName/libs/下的动态库)一、注入本质进程注入本质是监控或分析目标进程(被调试进程)的运行状态,运行状态包括:标志位IP寄... 查看详情

android逆向android进程注入工具开发(编译注入工具|编译结果文件说明|注入过程说明)(代码片段)

...了一个"生成文件项目",该项目就是注入项目;参考【Android逆向】修改运行中的Android进程的内存数据(Android系统中调试器进程内存流程|编译内存调试动态库以及调试程序)博客;编译该项目,生成结果如下:已启动生成…1>------... 查看详情

android逆向android进程注入工具开发(系统调用|androidndk中的系统调用示例)(代码片段)

文章目录一、系统调用二、AndroidNDK中的系统调用示例一、系统调用在"用户层",运行的都是用户应用程序;用户层下面是驱动层,驱动层下面是系统层,最底层是BIOS;系统层包含系统内核;层级从上到下:用户层|驱动层|系统层|BIOS;... 查看详情

android逆向android逆向基本概念(定位内存中的修改点|基址寻址法|搜索定位法)(代码片段)

文章目录一、定位内存中的修改点1、基址寻址法2、搜索定位法一、定位内存中的修改点使用"基址寻址法"或"搜索定位法"搜索指定文件中的代码在内存中的位置;上述222个内存定位方法结合IDA工具,一起使用;1、基址寻... 查看详情

android逆向android进程简介(android应用启动流程)(代码片段)

文章目录前言一、Android进程二、Android应用启动流程前言参考【Android逆向】Android系统文件分析(/proc/pid进程号对应进程目录|oom_adj|maps|smaps|mem|task|environ)博客,/proc/目录中存放的是所有进程相关信息;一、Android进程Android操作系统中... 查看详情

android逆向android进程简介(android应用启动流程)(代码片段)

文章目录前言一、Android进程二、Android应用启动流程前言参考【Android逆向】Android系统文件分析(/proc/pid进程号对应进程目录|oom_adj|maps|smaps|mem|task|environ)博客,/proc/目录中存放的是所有进程相关信息;一、Android进程Android操作系统中... 查看详情

android逆向android进程注入工具开发(调试进程中寄存器的作用|通过eip寄存器控制程序运行|eip寄存器的存档与恢复)

文章目录一、调试进程中寄存器的作用二、通过EIP寄存器控制程序运行三、EIP寄存器的存档与恢复一、调试进程中寄存器的作用内存是一个线性结构,将动态库加载到内存中后,每个动态库文件都是一块连续的内存空间,因此可以通... 查看详情

android逆向android系统文件分析(/proc/目录文件分析|记录系统和进程信息|version内核版本信息文件)(代码片段)

...件,该目录中的文件的作用,主要是记录系统和进程的信息;Android系统将进程,以及进程相关信息,映射到/proc/目录下,作为一个文件,方便用户使用内核相关对象;/proc/目录映射了一些内核的参数和信息;应用只能修改自己的进程信息,无... 查看详情

android逆向android系统文件分析(/proc/目录文件分析|记录系统和进程信息|version内核版本信息文件)(代码片段)

...件,该目录中的文件的作用,主要是记录系统和进程的信息;Android系统将进程,以及进程相关信息,映射到/proc/目录下,作为一个文件,方便用户使用内核相关对象;/proc/目录映射了一些内核的参数和信息;应用只能修改自己的进程信息,无... 查看详情

android逆向android进程注入工具开发(总结|源码编译|逆向环境搭建使用|使用进程注入工具进行逆向操作)★★★(代码片段)

文章目录一、Android进程注入工具开发系列博客二、Android进程注入工具源码下载编译三、逆向环境搭建四、使用注入工具进行逆向操作1、获取远程进程号2、注入工具准备3、注入动态库4、查询内存5、修改内存一、Android进程注入... 查看详情

android逆向android进程注入工具开发(远程调用|x86架构的返回值获取|arm架构远程调用)(代码片段)

...构的返回值获取二、ARM架构远程调用前言在之前的博客【Android逆向】Android进程注入工具开发(注入代码分析|获取远程目标进程中的/system/lib/libc.so动态库中的mmap函数地址)【Android逆向】Android进程注入工具开发(注入代码分析|远程... 查看详情

android逆向android进程注入工具开发(远程调用总结|远程调用注意事项)

...二、远程调用注意事项一、远程调用总结在之前的博客【Android逆向】Android进程注入工具开发(调试进程中寄存器的作用|通过EIP寄存器控制程序运行|EIP寄存器的存档与恢复)【Android逆向】Android进程注入工具开发(EIP寄存器指向dlopen... 查看详情

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

...改动态库五、重打包一、应用结构分析分析上一篇博客【Android逆向】逆向修改游戏应用(APK解析工具|解包->分析->重打包->签名流程)解包后的文件;在lib目录下,有armeabi-v7a和x86两个CPU架构的动态库;一般情况下,逆向... 查看详情

android逆向android进程注入工具开发(注入代码分析|注入工具的main函数分析)(代码片段)

...程二、注入工具的main函数分析一、注入流程开始分析【Android逆向】Android进程注入工具开发(编译注入工具|编译结果文件说明|注入过程说明)博客中的tool工具代码;tool工具使用前,先获取要注入的目标进程进程号,使用dumpsysactivitytop... 查看详情

android逆向android逆向基本概念(软件运行时内存结构|文件与内存之间的联系)

文章目录一、Android软件运行时内存结构二、Android文件与内存之间的联系一、Android软件运行时内存结构Android软件运行时内存结构:硬件层:内存中,硬件层处于最底层,映射成一些文件;硬件驱动层:该层是硬件层与操作系统的纽带,一... 查看详情

android逆向android进程注入工具开发(注入代码分析|获取注入的libbridge.so动态库中的load函数地址并通过远程调用执行该函数)(代码片段)

文章目录一、dlsym函数简介二、获取目标进程linker中的dlsym函数地址三、远程调用目标进程linker中的dlsym函数获取注入的libbridge.so动态库中的load函数地址四、远程调用目标进程中的libbridge.so动态库中的load函数一、dlsym函数简介dlsym... 查看详情