内容纲要

注入过程

0x01 获取目标进程的pid,关联目标进程;

0x02 获取并保存目标进程寄存器值;

0x03 获取目标进程的dlopen,dlsym函数的绝对地址;

0x04 获取并保存目标进程的堆栈,设置dlopen函数的相关参数,将要注入的SO的绝对路径压栈;

0x05 调用dlopen函数;

0x06 调用dlsym函数,获取SO中要执行的函数地址;

0x07 调用要执行的函数;

0x08 恢复目标进程的堆栈,恢复目标进程寄存器值,解除关联,完成SO动态库注入;

demo

获取目标进程pid

ptrace_attach目标进程

ptrace_getregs获取目标进程寄存器

保存目标寄存器

获取函数mmap在目标进程中的地址(remote-handle+*mmap)

获取目标进程的dlopen,dlsym,dlclose,munmap函数地址

设置mmap参数的值

1

对目标进程调用mmap开辟地址

将注入的模块路径写入目标进程(ptrace_pokedata)

设置dlopen参数,dlopen通过注入的模块路径加载模块,得到返回值(regs.ARM_r0)

将函数名写入目标进程(ptrace_pokedata)

设置dlsym参数,dlsym通过注入的函数名加载函数,得到返回值:该函数的地址(regs.ARM_r0)

对函数地址进行远程调用

释放开辟的地址(munmap)

ptrace_setregs恢复寄存器

ptrace_detach

https://www.cnblogs.com/mmmmar/p/8253537.html

2

保存所有寄存器值

通过ptrace_peekdata获取注入模块的数据,ptrace_pokedata在目标进程mmap的地址处写数据

恢复所有寄存器值

detach