*注入分类
我们平时所说的代码注入,主要静态和动态两种方式
·静态注入,针对是可执行文件,比如平时我们修改ELF,DEX文件等等,相关的辅助工具也很多,比如IDA、JEB、ApkTool等等;
· 动态注入,针对是进程,比如修改进程的寄存器、内存值等等;
动态跟静态最大的区别是,动态不需要改动源文件,但需要高权限(通常是root权限),而且所需的技术含量更高。
· 本质
动态注入技术,本质上就是一种调度技术。想想平时我们调试一个进程时,可以做哪些功能?一般有下列几项:
· 查看变量值
· 修改变量值
· 跟踪进程跳转
· 查看进程调用堆栈
· 等等
所谓的SO注入就是将代码拷贝到目标进程中,并结合函数重定向等其他技术,最终达到监控或改变目标进程行为的目的。Android是基于Linux内核的操作系统,而在Linux下SO注入基本是基于调试API函数ptrace实现的,同样Android的SO注入也是基于ptrace函数,要完成注入还需获取root权限。
注入过程如下:
0x01 获取目标进程的pid,关联目标进程;
0x02 获取并保存目标进程寄存器值;
0x03 获取目标进程的dlopen,dlsym函数的绝对地址;
0x04 获