- 3
- 0
- 约1.82万字
- 约 17页
- 2017-01-30 发布于重庆
- 举报
使用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中??
您可能关注的文档
- 计算机应用技术专业大学生职业生涯规划书.doc
- 山东大学操作系统实验5进程互斥实验.doc
- linux进程和线程通信.doc
- 辽宁工程技术大学大学软件项目实训报告.doc
- 操作系统第二次实验报告.doc
- 实验3 Windows虚拟内存.doc
- 北邮操作系统进程同步实验报告及源代码.docx
- 操作系统 生产者-消费者模型模拟进程调度.doc
- 应用技术学院学生约谈制度.doc
- 南昌大学计算机应用技术调剂生复试经验.doc
- 小区绿化施工协议书.docx
- 墙面施工协议书.docx
- 1 古诗二首(课件)--2025-2026学年统编版语文二年级下册.pptx
- (2026春新版)部编版八年级道德与法治下册《3.1《公民基本权利》PPT课件.pptx
- (2026春新版)部编版八年级道德与法治下册《4.3《依法履行义务》PPT课件.pptx
- (2026春新版)部编版八年级道德与法治下册《6.2《按劳分配为主体、多种分配方式并存》PPT课件.pptx
- (2026春新版)部编版八年级道德与法治下册《6.1《公有制为主体、多种所有制经济共同发展》PPT课件.pptx
- 初三教学管理交流发言稿.docx
- 小学生课外阅读总结.docx
- 餐饮门店夜经济运营的社会责任报告(夜间贡献)撰写流程试题库及答案.doc
原创力文档

文档评论(0)