使用ptrace向已运行进程中注入.so并执行相关函数.docVIP

  • 3
  • 0
  • 约1.82万字
  • 约 17页
  • 2017-01-30 发布于重庆
  • 举报

使用ptrace向已运行进程中注入.so并执行相关函数.doc

使用ptrace向已运行进程中注入.so并执行相关函数

使用ptrace向已运行进程中注入.so并执行相关函数 简介 如何让目标进程执行dlopen加载so 加载so的实现代码 如何把加载so的实现代码写入目标进程并启动执行 在目标进程中找到存放加载so的实现代码的空间 为加载so的实现代码中的全局变量赋值 把汇编代码写入目标进程并执行的实现代码 主函数 writecode_to_targetproc attach目标进程ptrace_attach 获取目标进程寄存器值ptrace_getregs 获取目标进程中指定模块中指定函数的地址get_remote_addr 在目标进程中执行指定函数ptrace_call 把代码写入目标进程指定地址ptrace_writedata 设置目标进程寄存器ptrace_setregs detach目标进程ptrace_detach 需要被加载的so 替换函数replaceFunc 新函数及其它函数 1. 简介 ? ? 使用ptrace向已运行进程中注入.so并执行相关函数,其中的“注入”二字的真正含义为:此.so被link到已运行进程(以下简称为:目标进程)空间中,从而.so中的函数在目标进程空间中有对应的地址,然后通过此地址便可在目标进程中进行调用。 ? ? ?到底是如何注入的呢? ? ? ?本文实现方案为:在目标进程中,通过dlopen把需要注入的.so加载到目标进程的空间中。 2. 如何让目标进程执行dlopen加载.so? ? ? ?显然,目标进程本来是没有实现通过dlopen来加载我们想注入的.so,为了实现此功能,我们需要目标进程执行一段我们实现的代码,此段代码的功能为通过dlopen来加载一个.so。 3. 【加载.so的实现代码】 ? ? 加载需要注入的.so的实现代码如下所示:? ? ? [cpp]?view plaincopy .global?_dlopen_addr_s???????@dlopen函数在目标进程中的地址?????注:以下全局变化在C中可读写?? .global?_dlopen_param1_s?????@dlopen参数1.so在目标进程中的地址??? .global?_dlopen_param2_s?????@dlopen参数2在目标进程中的地址?? ?? .global?_dlsym_addr_s????????@dlsym函数在目标进程中的地址?? .global?_dlsym_param2_s??????@dlsym参数2在目标进程中的地址,其实为函数名?? ?? .global?_dlclose_addr_s??????@dlcose在目标进程中的地址?? ?? .global?_inject_start_s??????@汇编代码段的起始地址?? .global?_inject_end_s????????@汇编代码段的结束地址?? ?? .global?_inject_function_param_s??@hook_init参数在目标进程中的地址?? ?? .global?_saved_cpsr_s????????@保存CPSR,以便执行完hook_init之后恢复环境?? .global?_saved_r0_pc_s???????@保存r0-r15,以便执行完hook_init之后恢复环境?? ?? ?? .data?? ?? _inject_start_s:?? ????@?debug?loop?? 3:?? ????@sub?r1,?r1,?#0?? ????@B?3b?? ?? ????@?dlopen?? ????ldr?r1,?_dlopen_param2_s????????@设置dlopen第二个参数,?flag?? ????ldr?r0,?_dlopen_param1_s????????@设置dlopen第一个参数?.so?? ????ldr?r3,?_dlopen_addr_s??????????@设置dlopen函数?? ????blx?r3??????????????????????????@执行dlopen函数,返回值位于r0中?? ????subs?r4,?r0,?#0?????????????????@把dlopen的返回值soinfo保存在r4中,以方便后面dlclose使用?? ????beq?2f?? ?? ????@dlsym?? ????ldr?r1,?_dlsym_param2_s????????@设置dlsym第二个参数,第一个参数已经在r0中了?? ????ldr?r3,?_dlsym_addr_s??????????@设置dlsym函数?? ????blx?r3?????????????????????????@执行dlsym函数,返回值位于r0中??

文档评论(0)

1亿VIP精品文档

相关文档