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

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

文章目录

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

二、进程注入时序分析





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


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



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


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



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


ld.exe logcat


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


image.png


如果使用 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 ;


最后恢复 目标进程 执行 ;

image.png




远程调用流程 :


计算函数地址 : 通过计算 , 获取远程调用函数的内存地址 ;

设置 EIP 寄存器 : 将 EIP 寄存器指向远程调用函数 ;

申请栈内存地址 : 使用 mmap 申请内存 , 并将远程调用函数参数设置到该内存中 ;

设置 ESP 栈内存地址 : 将 ESP 寄存器指向申请的内存中 ;

收回控制权 : 执行完毕后 , 返回到 0 地址 , 令目标进程崩溃 , 调试进程收回控制权 ;


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


【Android 逆向】Android 进程代码注入原理 ( 进程注入原理 | 远程调用流程 | 获取函数地址 | 设置 IP 寄存器 | mmap 申请内存 | 设置 SP 寄存器 )

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

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


目录
相关文章
|
26天前
|
iOS开发 MacOS
MacOS环境-手写操作系统-40-进程消息通讯 和 回车键处理
MacOS环境-手写操作系统-40-进程消息通讯 和 回车键处理
20 2
|
26天前
|
存储 算法 调度
MacOS环境-手写操作系统-34-进程优先级
MacOS环境-手写操作系统-34-进程优先级
17 0
|
26天前
|
存储 调度 iOS开发
MacOS环境-手写操作系统-32-进程挂起和恢复
MacOS环境-手写操作系统-32-进程挂起和恢复
17 0
|
26天前
|
算法 调度 iOS开发
MacOS环境-手写操作系统-31-进程自动切换
MacOS环境-手写操作系统-31-进程自动切换
13 0
|
26天前
|
iOS开发 MacOS
MacOS环境-手写操作系统-30-进程之间互相切换
MacOS环境-手写操作系统-30-进程之间互相切换
19 0
|
26天前
|
存储 算法 调度
MacOS环境-手写操作系统-29-进程切换
MacOS环境-手写操作系统-29-进程切换
12 0
|
2月前
|
Java Android开发 数据安全/隐私保护
Android中多进程通信有几种方式?需要注意哪些问题?
本文介绍了Android中的多进程通信(IPC),探讨了IPC的重要性及其实现方式,如Intent、Binder、AIDL等,并通过一个使用Binder机制的示例详细说明了其实现过程。
234 4
|
2月前
|
消息中间件 网络协议 Python
工具人逆袭!掌握Python IPC,让你的进程从此告别单打独斗
【9月更文挑战第9天】你是否曾遇到多个Python程序像孤岛般无法通信,导致数据孤立、任务难协同的问题?掌握进程间通信(IPC)技术,可助你打破这一僵局。IPC是不同进程间传递数据或信号的机制,在Python中常用的方法有管道、消息队列、共享内存及套接字等。其中,管道适用于父子或兄弟进程间简单数据传递;套接字则不仅限于本地,还能在网络间实现复杂的数据交换。通过学习IPC,你将能设计更健壮灵活的系统架构,成为真正的编程高手。
25 3
|
3月前
|
编解码 Android开发
【Android Studio】使用UI工具绘制,ConstraintLayout 限制性布局,快速上手
本文介绍了Android Studio中使用ConstraintLayout布局的方法,通过创建布局文件、设置控件约束等步骤,快速上手UI设计,并提供了一个TV Launcher界面布局的绘制示例。
49 1
|
3月前
|
API Android开发
Android P 性能优化:创建APP进程白名单,杀死白名单之外的进程
本文介绍了在Android P系统中通过创建应用进程白名单并杀死白名单之外的进程来优化性能的方法,包括设置权限、获取运行中的APP列表、配置白名单以及在应用启动时杀死非白名单进程的代码实现。
60 1

相关实验场景

更多