文章目录

  • 一、SO 进程注入环境及 root 权限获取
  • 二、进程注入时序分析

一、SO 进程注入环境及 root 权限获取


SO 注入的前提必须有 root 权限 , 有了 root 权限后 , 才能调用 ptrace 相关函数 ;

SO 注入环境有两种情况 , Android 模拟器 或 真实手机 ;

这里特别推荐使用 雷电模拟器 进行逆向操作 , 在真机上会出现各种问题 ;

使用 Android 模拟器 , 如 雷电模拟器 , 使用 ld 工具查看日志 , 查看日志命令为 :

ld.exe logcat

上述命令需要进入雷电模拟器安装目录执行 , ld.exe 在雷电模拟器安装目录的根目录中 ;

如果使用 Android 真机 , 则直接使用 adb logcat 命令查看日志即可 ;

二、进程注入时序分析


调试程序 调试 目标进程 ;

在有 root 权限的前提下 , 调试程序 首先 调用 ptrace 函数 attach 目标进程 , ptrace 函数调用必须有 root 权限 , 否则会崩溃 ;

调试程序 读取 目标进程 寄存器信息 , 将寄存器值保存下来 ;

远程调用 , 加载 libbridge.so , 在 【Android 逆向】修改运行中的 Android 进程的内存数据 ( Android 系统中调试器进程内存流程 | 编译内存调试动态库以及调试程序 ) 博客中 , 编译过该动态库 , 调试目标进程时 , 需要将该动态库注入 目标进程 ;

然后调用 libbridge.so 动态库中的 load 方法加载真正的工作 so 动态库 libnative.so ;

调用 libnative.so 的 invoke 方法 , 将返回值返回给 libbridge.so , 然后通过 libbridge.so 返回给 调试程序 ;

libbridge.so 的作用仅用于 调试程序 和 目标进程 之间的通信 ;

调试完毕后 , 远程调用卸载 libbridge.so ;

最后恢复 目标进程 执行 ;

远程调用流程 :

  • 计算函数地址 : 通过计算 , 获取远程调用函数的内存地址 ;
  • 设置 EIP 寄存器 : 将 EIP 寄存器指向远程调用函数 ;
  • 申请栈内存地址 : 使用 mmap 申请内存 , 并将远程调用函数参数设置到该内存中 ;
  • 设置 ESP 栈内存地址 : 将 ESP 寄存器指向申请的内存中 ;
  • 收回控制权 : 执行完毕后 , 返回到 0 地址 , 令目标进程崩溃 , 调试进程收回控制权 ;

参考之前涉及到 SO 注入的流程 :

  • 【Android 逆向】Android 进程代码注入原理 ( 进程注入原理 | 远程调用流程 | 获取函数地址 | 设置 IP 寄存器 | mmap 申请内存 | 设置 SP 寄存器 )
  • 【Android 逆向】修改运行中的 Android 进程的内存数据 ( Android 系统中调试器进程内存流程 | 编译内存调试动态库以及调试程序 )
  • 【Android 逆向】Android 进程注入工具开发 ( 远程调用总结 | 远程调用注意事项 )

【Android 逆向】Android 进程注入工具开发 ( SO 进程注入环境及 root 权限获取 | 进程注入时序分析 )相关推荐

  1. 【Android 逆向】Android 进程注入工具开发 ( 远程调用 | x86 架构的返回值获取 | arm 架构远程调用 )

    文章目录 前言 一.x86 架构的返回值获取 二.ARM 架构远程调用 前言 在之前的博客 [Android 逆向]Android 进程注入工具开发 ( 注入代码分析 | 获取 远程 目标进程 中的 ...

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

    文章目录 一.Android 进程注入工具开发系列博客 二.Android 进程注入工具 源码下载编译 三.逆向环境搭建 四.使用注入工具进行逆向操作 1.获取远程进程号 2.注入工具准备 3.注入动 ...

  3. 【Android 逆向】Android 进程注入工具开发 ( 远程进程注入动态库文件操作 | 注入动态库 加载 业务动态库 | 业务动态库启动 | pthread_create 线程开发 )

    文章目录 前言 一.加载 libnattive.so 动态库 二. libnattive.so 动态库启动 三. pthread_create 线程开发 四. 线程执行函数 前言 libbridge. ...

  4. 【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 注入工具收尾操作 | 关闭注入的动态库 | 恢复寄存器 | 脱离远程调试附着 )

    文章目录 一.dlclose 函数简介 二.关闭注入的 libbridge.so 动态库 三.恢复寄存器 四.脱离远程调试附着 一.dlclose 函数简介 dlclose 函数的作用是 卸载一个 指 ...

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

    文章目录 一.dlsym 函数简介 二.获取 目标进程 linker 中的 dlsym 函数地址 三.远程调用 目标进程 linker 中的 dlsym 函数 获取 注入的 libbridge.so ...

  6. 【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 获取 linker 中的 dlopen 函数地址 并 通过 远程调用 执行该函数 )

    文章目录 一.dlopen 函数简介 二.获取 目标进程 linker 中的 dlopen 函数地址 三.远程调用 目标进程 linker 中的 dlopen 函数 一.dlopen 函数简介 dlo ...

  7. 【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 远程调用 目标进程中 libc.so 动态库中的 mmap 函数 三 | 等待远程函数执行完毕 | 寄存器获取返回值 )

    文章目录 前言 一.等待远程进程 mmap 函数执行完毕 二.从寄存器中获取进程返回值 三.博客资源 前言 前置博客 : [Android 逆向]Android 进程注入工具开发 ( 注入代码分析 | ...

  8. 【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 远程调用 目标进程中 libc.so 动态库中的 mmap 函数 二 | 准备参数 | 远程调用 mmap 函数 )

    文章目录 一.准备 mmap 函数的参数 二.mmap 函数远程调用 一.准备 mmap 函数的参数 上一篇博客 [Android 逆向]Android 进程注入工具开发 ( 注入代码分析 | 远程调 ...

  9. 【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 调试进程 ATTACH 附着目标进程 | 读取目标函数寄存器值并存档 )

    文章目录 一.调试进程 ATTACH 附着目标进程 二.读取目标函数寄存器值并存档 1.主要操作流程 2.ptrace 函数 PTRACE_GETREGS 读取寄存器值 一.调试进程 ATTACH 附 ...

最新文章

  1. 帝国cms后台使用savesufer.js生成大音频audio彩色频谱数据
  2. 计算机应用看法,对计算机应用教学方法改革的看法
  3. Java 容器学习之 HashMap
  4. Appcan页面跳转
  5. 网络爬虫入门系列(3) httpClient
  6. GARFIELD@10-31-2004
  7. 因“智”而治,数据库自动驾驶时代大门即将开启!
  8. generatorConfig 指定列的java数据类型
  9. 1012. 数字分类 (20)-PAT乙级真题
  10. webRTC之[chromium-style] virtual methods with non-empty bodies shouldnt be declared inline(二十一)
  11. OpenWrt 编译分割
  12. python学习笔记 day42 对数据表的操作---增删改查
  13. python 通信调制方式_python实现BPSK调制信号解调
  14. python模拟登陆steam
  15. 基于Python的FreeCAD二次开发
  16. MySQL计算天数差
  17. 在mysql中创建用户并授权
  18. MongoDB:shutting down with code:100
  19. Perl之Spreadsheet::WriteExcel安装
  20. revit二次开发——建连续刚构桥2(带平纵曲线)

热门文章

  1. Unity3d Http Get请求
  2. 苹果官方 iOS Demo
  3. 在Eclipse中的Android项目里实现代码“.NET研究”复用
  4. 机器学习中的算法(1)-决策树模型组合之随机森林与GBDT
  5. Sliverlight Slide 的左右滑动
  6. 从Openvswitch代码看网络包的旅程
  7. linux配置ip 网关 和dns(转)
  8. dispatch_async 与 dispatch_get_global_queue
  9. 类型、值和变量(一)
  10. U盘从4G变为了75M 恢复U盘容量的方法