文章目录

  • 前言
  • 一、x86 架构的返回值获取
  • 二、ARM 架构远程调用

前言

在之前的博客

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

中 , 介绍了 调试进程 远程调用 远程进程 的 libc.so 动态库中的 mmap 函数 , 本博客继续对该远程调用过程进行一些补充 ;

一、x86 架构的返回值获取


远程调用 返回值获取 :

在 x86 架构的 CPU 中 , 使用 EAX 寄存器记录返回值 , 在 ARM 架构的 CPU 中 , 使用 R0 寄存器记录返回值 ;

远程调用结束后 , 获取寄存器数据 , 并读取 EAX 寄存器值 ;

如果远程调用的函数的返回值为 void , 那么 EAX 寄存器存放的就是无意义的值 , 可能是上一个函数的返回值 , 可能是计算过程中的一个中间值 ;

二、ARM 架构远程调用


在 ARM 架构的 CPU 中 , 远程调用时 ,

  • 使用 SP 寄存器存放栈内存首地址 ,
  • 使用 PC 指针指向函数地址 , 下一条指令开始执行函数指令 ;

ARM 架构中 , 栈指针存放在 R4 寄存器中 , 但是远程调用时 , 需要使用 SP 寄存器存放栈指针 , 栈指针指向使用 mmap 分配的内存中 , 该内存中都是函数执行需要的参数 ;

R4 栈指针指向的栈内存有原来函数执行的数据 , 参数或者函数执行过程中的数据 , 这个数据不能动 , 如果修改了该数据 , 调试结束后 , 运行原来的程序 , 会造成不可预知的结果 , 或者崩溃 , 或者运行结果错误 ;

 //  // push remained params onto stack  //  if (i < num_params) {regs->ARM_sp -= (num_params - i) * sizeof(long);ptrace_writedata(pid, (void*)regs->ARM_sp, (uint8_t*)&params[i], (num_params - i) * sizeof(long));}

准备好参数栈后 , 将 PC 寄存器指向函数的地址 ;

要判定是否是 thumb 模式 , 如果在该模式下 , 需要将 PC 指针最低位取反 ;

thumb 模式下 , 不能指向奇数地址 , 如果最低位是 1 , 则将其置位 0 ; 如果最低位为 1 , 执行时会报总线错误 ;

thumb 模式下 , 需要将 CPSR 寄存器打开 , 设置 CPSR_T_MASK 标志位 ;

 regs->ARM_pc = addr;if (regs->ARM_pc & 1) {/* thumb */regs->ARM_pc &= (~1u);regs->ARM_cpsr |= CPSR_T_MASK;}else {/* arm */regs->ARM_cpsr &= ~CPSR_T_MASK;}

返回值设置为 0 ;

设置该返回值的作用是 , 为了使 远程进程崩溃 , 调试程序 可以收回控制权 ;

 regs->ARM_lr = 0;

上述操作的寄存器值是在本地设置的 , 通过 ptrace_setregs 函数 , 才能将寄存器值设置到远程进程中 ;

寄存器设置完毕后 , 调用 ptrace_continue 函数 , 恢复 远程进程的运行 ;

 if (ptrace_setregs(pid, regs) == -1|| ptrace_continue(pid) == -1) {printf("error\n");return -1;}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    文章目录 一.远程调用总结 二.远程调用注意事项 一.远程调用总结 在之前的博客 [Android 逆向]Android 进程注入工具开发 ( 调试进程中寄存器的作用 | 通过 EIP 寄存器控制程序 ...

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

    文章目录 一.SO 进程注入环境及 root 权限获取 二.进程注入时序分析 一.SO 进程注入环境及 root 权限获取 SO 注入的前提必须有 root 权限 , 有了 root 权限后 , 才能 ...

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

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

最新文章

  1. zookeeper源码分析之三客户端发送请求流程
  2. php 获取动态时间,PHP 显示动态时间
  3. 2017-2018-1 JAVA实验站 第三周作业
  4. 十进制数转化为2进制后有多少个1
  5. 转网口显示未识别的网络_已有1700万用户携号转网 超99%用户1小时内办结
  6. PHP正则提取table中数据
  7. 从入门到入土:[SEED-Lab]-幽灵攻击|Spectre Attack Lab|详细说明|实验步骤|实验截图
  8. c语言五子棋光标,c语言写的鼠标操作的五子棋游戏,欢迎观赏!
  9. 计算机基础(十):git仓库管理命令小结
  10. 分区表的误区:性能提升
  11. linux之压缩文件,查看压缩文件,解压文件的操作命令
  12. BAT、360、网易等大公司开源项目
  13. 夏普Sharp MX-C3581R 一体机驱动
  14. 软件测试技术课后习题:第9章软件测试自动化-广东高等教育出版社,主编杨胜利
  15. idea更新报Node remains in conflict冲突的解决办法
  16. 代码随想录第四天 leetcode 24、19、206
  17. Windows10系统变慢,用上这19招,电脑性能大幅度提升!
  18. 数据结构 严慰敏(C语言版第2版)【习题答案】
  19. 全新版大学英语综合教程第一册学习笔记(原文及全文翻译)——6 - What Animals Really Think(动物到底想些什么)
  20. pytorch保存onnx模型

热门文章

  1. 2014 I/O归来:Google连接一切
  2. myeclipse2014新感悟
  3. WF,WPF,Silverlight的DependencyProperty 附加属性
  4. VBA 的编写与执行
  5. 后盾网lavarel视频项目---vue-axios基本用法
  6. d3.js 简易柱形图,入门demo
  7. EOS开发基础之五:使用cleos命令行客户端操作EOS——智能合约之Exchange
  8. php源码编译常见错误解决方案大全
  9. Vitamio打造自己的Android万能播放器
  10. LeetCode12- 整数转罗马数字