继续
在《一》里,我把基本思路描述了一遍,接下为我们先从注入开始入手。
注入
分类
我们平时所说的代码注入,主要静态和动态两种方式
- 静态注入,针对是可执行文件,比如平时我们修改ELF,DEX文件等等,相关的辅助工具也很多,比如IDA、JEB、ApkTool等等;
- 动态注入,针对是进程,比如修改进程的寄存器、内存值等等;
动态跟静态最大的区别是,动态不需要改动源文件,但需要高权限(通常是root权限),而且所需的技术含量更高。
本质
动态注入技术,本质上就是一种调度技术。想想平时我们调试一个进程时,可以做哪些功能? 一般有下列几项:
- 查看变量值
- 修改变量值
- 跟踪进程跳转
- 查看进程调用堆栈
- 等等
动态注入相比于普通的调试,最大的区别就是动态注入是一个
”自动化调试并达到加载自定义动态链接库“的过程。所谓自动化,其实就是通过代码实现,在Linux上通过Ptrace就可以完成上面所有功能,当然Ptrace功能是比较原始的,平时调试中的功能还需要很多高层逻辑封装才可以实现。
在阅读下面章节之前,强烈建议阅读一下man文档,见 <