文章目录

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

一、Android 进程注入工具开发系列博客


Android 进程注入工具开发系列博客 :

  • 【Android 逆向】Android 进程代码注入原理 ( 进程注入原理 | 远程调用流程 | 获取函数地址 | 设置 IP 寄存器 | mmap 申请内存 | 设置 SP 寄存器 )
  • 【Android 逆向】Android 进程代码注入原理 ( 注入本质 | 静态注入和动态注入 | 静态注入两种方式 | 修改动态库重打包 | 修改 /data/app/xx/libs 动态库 )
  • 【Android 逆向】Android 进程注入工具开发 ( Visual Studio 开发 Android NDK 应用 | VS 自带的 Android 平台应用创建与配置 )
  • 【Android 逆向】Android 进程注入工具开发 ( Visual Studio 开发 Android NDK 应用 | 使用 Makefile 构建 Android 平台 NDK 应用 )
  • 【Android 逆向】Android 进程注入工具开发 ( 调试进程中寄存器的作用 | 通过 EIP 寄存器控制程序运行 | EIP 寄存器的存档与恢复 )
  • 【Android 逆向】Android 进程注入工具开发 ( EIP 寄存器指向 dlopen 函数 | ESP 寄存器指向栈内存 | 调试程序收回目标进程控制权 )
  • 【Android 逆向】Android 进程注入工具开发 ( 远程调用总结 | 远程调用注意事项 )
  • 【Android 逆向】Android 进程注入工具开发 ( 系统调用 | Android NDK 中的系统调用示例 )
  • 【Android 逆向】Android 进程注入工具开发 ( Visual Studio 开发 Android NDK 应用 | Visual Studio 中 SDK 和 NDK 安装位置 )
  • 【Android 逆向】Android 进程注入工具开发 ( SO 进程注入环境及 root 权限获取 | 进程注入时序分析 )
  • 【Android 逆向】Android 进程注入工具开发 ( 编译注入工具 | 编译结果文件说明 | 注入过程说明 )
  • 【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 注入工具的 main 函数分析 )
  • 【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 调试进程 ATTACH 附着目标进程 | 读取目标函数寄存器值并存档 )
  • 【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 获取 远程 目标进程 中的 /system/lib/libc.so 动态库中的 mmap 函数地址 )
  • 【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 远程调用 目标进程中 libc.so 动态库中的 mmap 函数 一 | mmap 函数简介 )
  • 【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 远程调用 目标进程中 libc.so 动态库中的 mmap 函数 二 | 准备参数 | 远程调用 mmap 函数 )
  • 【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 远程调用 目标进程中 libc.so 动态库中的 mmap 函数 三 | 等待远程函数执行完毕 | 寄存器获取返回值 )
  • 【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 获取 linker 中的 dlopen 函数地址 并 通过 远程调用 执行该函数 )
  • 【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 获取注入的 libbridge.so 动态库中的 load 函数地址 并 通过 远程调用 执行该函数 )
  • 【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 注入工具收尾操作 | 关闭注入的动态库 | 恢复寄存器 | 脱离远程调试附着 )
  • 【Android 逆向】Android 进程注入工具开发 ( 远程调用 | x86 架构的返回值获取 | arm 架构远程调用 )
  • 【Android 逆向】Android 进程注入工具开发 ( 远程进程 注入动态库 文件操作 | Android 进程读取文件所需的权限 | fopen 打开文件标志位 | 验证文件权限 )
  • 【Android 逆向】Android 进程注入工具开发 ( 远程进程注入动态库文件操作 | 注入动态库 加载 业务动态库 | 业务动态库启动 | pthread_create 线程开发 )

二、Android 进程注入工具 源码下载编译


源码下载地址 : https://download.csdn.net/download/han1202012/37385877

使用 Visual Studio 2019 编译上述源码 ;

选择 " 打开项目或解决方案 " ,

打开 magic 目录下的 magic.vcxproj 项目文件 ,

打开项目 ,

右键点击 " 解决方案资源管理器 " 中的解决方案 , 在弹出的菜单中 , 选择最后一个 " 属性 " 设置选项 ,

需要手动配置这 444 个选项 , 必须是相同的版本才可以 , 没有的话 , 自行去下载 ;

包含搜索路径 : Y:\001_DevelopTools\002_Android_SDK\ndk\android-ndk-r10d\platforms\android-19\arch-x86\usr\include;$(NMakeIncludeSearchPath)

生成命令行 : "Y:\001_DevelopTools\002_Android_SDK\ndk\android-ndk-r14b-windows-x86_64\android-ndk-r14b\build\ndk-build.cmd" NDK_PROJECT_PATH=. APP_BUILD_SCRIPT=Android.mk NDK_APPLICATION_MK=Application.mk

"全部重新生成" 命令行 : "Y:\001_DevelopTools\002_Android_SDK\ndk\android-ndk-r14b-windows-x86_64\android-ndk-r14b\build\ndk-build.cmd" NDK_PROJECT_PATH=. APP_BUILD_SCRIPT=Android.mk NDK_APPLICATION_MK=Application.mk -B

"清除" 命令行 : "Y:\001_DevelopTools\002_Android_SDK\ndk\android-ndk-r14b-windows-x86_64\android-ndk-r14b\build\ndk-build.cmd" NDK_PROJECT_PATH=. APP_BUILD_SCRIPT=Android.mk NDK_APPLICATION_MK=Application.mk clean

电脑中必须有 android-ndk-r10dandroid-ndk-r14b 这两个版本的 NDK , 其它版本 , 大概率会编译失败 ;

配置完成后 , 右键点击 解决方案 , 选择 " 仅用于项目 / 仅生成 magic " 选项 ,


命令行输出如下内容 , 说明编译完成 ;

1>------ 已启动生成: 项目: magic, 配置: Debug Win32 ------
1>[x86] Compile        : bridge <= bridge.c
1>[x86] SharedLibrary  : libbridge.so
1>[x86] Install        : libbridge.so => libs/x86/libbridge.so
1>[x86] Compile++      : cmd <= command.cpp
1>[x86] Compile++      : cmd <= json_reader.cpp
1>[x86] Compile++      : cmd <= json_value.cpp
1>[x86] Compile++      : cmd <= json_writer.cpp
1>[x86] Executable     : cmd
1>[x86] Install        : cmd => libs/x86/cmd
1>[x86] Compile++      : native <= native.cpp
1>./native/native.cpp(428,14): warning G0C39A92D: 'SearchCode' has C-linkage specified, but returns user-defined type 'std::string' (aka 'basic_string<char>') which is incompatible with C [-Wreturn-type-c-linkage]
1>        std::string SearchCode(unsigned char* data,unsigned size){1>                    ^
1>1 warning generated.
1>[x86] Compile        : native <= asm.s
1>[x86] Compile++      : native <= json_reader.cpp
1>[x86] Compile++      : native <= json_value.cpp
1>[x86] Compile++      : native <= json_writer.cpp
1>[x86] SharedLibrary  : libnative.so
1>[x86] Install        : libnative.so => libs/x86/libnative.so
1>[x86] Compile        : tool <= main.c
1>[x86] Executable     : tool
1>[x86] Install        : tool => libs/x86/tool
1>已完成生成项目“magic.vcxproj”的操作。
========== 生成: 成功 1 个,失败 0 个,最新 0 个,跳过 0 个 ==========

Y:\002_WorkSpace\002_VS\magic\libs\x86 目录下 , 生成如下可执行文件和动态库 , 这是逆向的工具 和 要注入的动态库 ;

三、逆向环境搭建


参考 【Android 逆向】修改运行中的 Android 进程的内存数据 ( 运行环境搭建 Android 模拟器安装 | 拷贝 Android 平台可执行文件和动态库到 /data/system ) 博客 , 搭建逆向环境 ;

使用 雷电模拟器 3.75 版本 , 作为运行环境 ;

拷贝在 Visual Studio 中编译的 Android 平台的 444 可执行文件和动态库到 /data/system/debug 目录下 , 赋予 777 权限 ;

四、使用注入工具进行逆向操作


参考

  • 【Android 逆向】修改运行中的 Android 进程的内存数据 ( Android 命令行中获取要调试的应用进程的 PID | 进程注入调试进程内存的 so 库 )
  • 【Android 逆向】修改运行中的 Android 进程的内存数据 ( 使用 IDA 分析要修改的内存特征 | 根据内存特征搜索修改点 | 修改进程内存 )

博客 , 进行逆向 ;

1、获取远程进程号

执行

dumpsys activity top|grep pid

命令 , 查看当前运行进程的进程号 ;

2、注入工具准备

进入 /data/system/debug/ 目录 ,

cd /data/system/debug/

/data/system/debug/ 目录下的四个文件 , 赋予 777 权限 ;

chmod 777 ./*

3、注入动态库

执行

./tool 2328

命令 , 注入动态库到 2328 进程中 , 该进程号是上面 dumpsys 命令获取的 ;

4、查询内存

执行

./cmd 2328 searchcode 0x59 0x28 0xB3 0x07 0x00 0x06 0x02 0x7B 0x41 0x08 10

查询 0x59 0x28 0xB3 0x07 0x00 0x06 0x02 0x7B 0x41 0x08 10 个字节的内存特征 , 获取到一个内存地址 ;

5、修改内存

执行

./cmd 2328 modify 96A2C355 0x58 0x28 0xB3 0x07 4

修改内存地址 , 一次只能修改 4 字节 ;

【Android 逆向】Android 进程注入工具开发 ( 总结 | 源码编译 | 逆向环境搭建使用 | 使用进程注入工具进行逆向操作 ) ★★★相关推荐

  1. 【Android项目】本地FM收音机开发及源码简析

    [Android项目]本地FM收音机开发及源码简析 目录 1.概述 2.收音机的基本原理 3.收音机其他信息 RDS功能 4.Android开发FM收音机源码解析 5.App层如何设计本地FM应用 6 ...

  2. 古月居 机器人开发实践源码 编译报错问题解决方法

    ubuntu:16.04.7 ros:kinetic 移植<机器人开发实践>源码包 ros_exploring,出现的问题都包含于以下内容中. 书中提到,如果将源码包 ros_explor ...

  3. 【CMake】CMake 引入 ( Android Studio 创建 Native C++ 工程 | C/C++ 源码编译过程 | Makefile 工具 | CMake 引入 )

    文章目录 一.在 Android Studio 中创建 Native C++ 工程 二.C/C++ 源码编译过程 三.Makefile 工具 四.CMake 引入 该系列博客的应用场景是 Androi ...

  4. 【Android Gradle】安卓应用构建流程 ( Java 源码编译 和 AIDL 文件编译 )

    文章目录 一.安卓应用构建简介 二.Java 源码编译 三.AIDL 源码编译 一.安卓应用构建简介 使用 Android Studio 开发 Android 应用时 , 编译应用后在 Module ...

  5. 瑞芯微RK3568开发板源码编译与交叉编译环境搭建

    本篇,将进行OK3568-C开发板Linux系统开发需要用的软件交叉编译环境的配置.下面就介绍两种交叉编译环境的配置方法. 01C/C++交叉编译环境编译 如果只是使用C/C++代码,则在自己的Ubu ...

  6. Android源码编译:任意界面屏幕边缘上滑弹出快捷操作栏【一键加速、开关控制】

    <The Fucking Source Code> 注:以下均为android源码Framework层修改. 设计实现在任意界面从屏幕边缘上滑弹出快捷操作栏,包括亮度调节.正在后台运行的程 ...

  7. arm开发板源码编译mysql

    2019独角兽企业重金招聘Python工程师标准>>> mysql:5.5.58,arm 32位开发板:centos 7,4.4.52-armada-17.06.2 一.下载mysq ...

  8. rk3399pro-EVB开发板源码编译opencv4.5.1

    建议大家安装opencv4.0.1及以前的版本,因为opencv4.0.1以后的版本要求numpy>1.19.3,而rknn-tookit的whl包要求numpy==1.16.3,我是安装完op ...

  9. 机器人开发实践源码编译报错问题解决方法

    书中提到,如果将源码包 ros_exploring 直接放到 catkin 工作空间中,需要将 ros2 文件夹移出到工作空间之外,否则编译失败. 将 ros2 文件夹移出之后仍然报错,具体信息如下: ...

最新文章

  1. Cisco路由器安全配置必用10条命令
  2. leetcode 209. Minimum Size Subarray Sum | 209. 长度最小的子数组(Java)
  3. anchor译中文_anchor的意思在线翻译,解释anchor中文英文含义,短语词组,音标读音,例句,词源,同义词【澳典网ODict.Net】...
  4. [vue]vue路由篇vue-router
  5. 鬼泣最稳定的服务器,DNF95级版本国服环境下,鬼泣和红神谁更强?深度对比客观分析!...
  6. 【MySQL-5.7】日期与时间类型
  7. 为什么setTimeout(fn,0)有时有用?
  8. 微型计算机控制课程设计,《微型计算机控制技术》课程设计
  9. 洛谷P2057 [SHOI2007]善意的投票 题解
  10. vray渲染器的工作流程你清楚吗?
  11. 关于 Nim游戏与SG函数 的一点研究
  12. 常见的HTTP状态码大全
  13. 对booth算法的一点理解
  14. JAVA代码重复率多少达标_【案例】代码重复率太高不要怕,求真老师教你化险为夷!...
  15. html - <thead>标签
  16. iphone11返回上一级手势怎么设置_iPhone11怎么返回手势操作
  17. linux如何关闭netbios服务,Samba 'nmbd' NetBIOS名称服务守护程序拒绝服务漏洞
  18. ionic 下拉刷新 — ion-refresher
  19. win10 自带卸载流氓软件工具
  20. HTML Table设置无边框、无分割线

热门文章

  1. Linux系统简介 、 安装Linux系统 、 RHEL6基本操作
  2. Javascript 两种 function 定义的区别
  3. ubuntu16.04上安装gstreamer
  4. PLSQL导出表的数据insert语句
  5. CodeForces - 981G Magic multisets
  6. synchronized同步对象锁
  7. APUE 学习笔记(一) Unix基础知识
  8. 新站SEO优化五点注意事项!
  9. 交叉编译arm-none-linux-gnueabi-gcc: No such file or directory
  10. dos命令关闭所有dos窗口