Android 逆向Android 进程注入工具开发 ( 调试进程中寄存器的作用 | 通过 EIP 寄存器控制程序运行 | EIP 寄存器的存档与恢复 )

Posted 韩曙亮

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 逆向Android 进程注入工具开发 ( 调试进程中寄存器的作用 | 通过 EIP 寄存器控制程序运行 | EIP 寄存器的存档与恢复 )相关的知识,希望对你有一定的参考价值。





一、调试进程中寄存器的作用



内存是一个线性结构 , 将动态库加载到内存中后 , 每个动态库文件都是一块连续的内存空间 , 因此可以通过内存地址精准的调用到指定的函数 , 这是远程调用的基础 ;

ptrace 函数操作远程进程 , 调试进程 先 attach 目标进程 , 然后修改 目标进程 寄存器 值 , 最后 detach 目标进程 ;

上述整个过程中 , 调试进程 只能控制 目标进程 的 寄存器值 , 其它的操作是无法进行控制的 ; 调试进程 对 目标进程 的所有操作 , 都与寄存器相关 ;

x86 与 arm 架构中 , 寄存器是不同的 , 因此 x86 与 arm 的 进程调试工具 , 实现也是不同的 ;

本系列博客 , 都是以 x86 架构为准 , 逆向使用 雷电模拟器 3.75 版本 , 其 CPU 架构是 x86 架构的 , 因此整个调试系统以 x86 架构为准 ;





二、通过 EIP 寄存器控制程序运行



通过寄存器控制程序运行 :

x86 架构的 CPU 中 , 16 位 有 IP 寄存器 , 32 位 有 EIP 寄存器 , 现在主流的架构是 32 位 , 64 位兼容 32 位 ;

EIP 寄存器中存储的值是下一条将要执行的指令 ;

目标进程的内存地址范围是 A ~ B , EIP 寄存器的值可以是 A ~ B 之间的任何地址 ;

一旦设置了 EIP 寄存器的值 X , 那么下一条指令 , 就将从 X 地址位置开始执行 ;





三、EIP 寄存器的存档与恢复



EIP 寄存器值的存档与恢复 :

  • 存档 : 在 attach 目标进程后 , 开始进行调试之前 , 先要将 EIP 寄存器的值保存起来 , 存档 ;

  • 恢复 : 在 detach 目标进程前 , 要先恢复 EIP 寄存器的值 , 然后让其还原到调试之前的环境 , 继续向后执行 ;

以上是关于Android 逆向Android 进程注入工具开发 ( 调试进程中寄存器的作用 | 通过 EIP 寄存器控制程序运行 | EIP 寄存器的存档与恢复 )的主要内容,如果未能解决你的问题,请参考以下文章

Android 逆向Android 进程注入工具开发 ( 编译注入工具 | 编译结果文件说明 | 注入过程说明 )

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

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

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

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

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