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

举报
韩曙亮 发表于 2022/01/10 23:47:22 2022/01/10
【摘要】 文章目录 一、SO 进程注入环境及 root 权限获取二、进程注入时序分析 一、SO 进程注入环境及 root 权限获取 SO 注入的前提必须有 root 权限 ,...





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



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


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

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


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

ld.exe logcat 

  
 
  • 1

上述命令需要进入雷电模拟器安装目录执行 , 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 注入的流程 :

文章来源: hanshuliang.blog.csdn.net,作者:韩曙亮,版权归原作者所有,如需转载,请联系作者。

原文链接:hanshuliang.blog.csdn.net/article/details/121100829

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。