So注入工具TsoInject开发文档
So注入工具TsoInject开发文档
导语:
原理:
原理类似Windows 下的DLL 注入, 远程进程调用使用关键函数ptrace 函数实现, 具体实现步骤如下:
1. 远程进程调用mmap 函数 在对方进程申请一块内存
2. 在这块内存中写上 so 的路径
3.调用远程调用 dlopen 函数, dlopen就会调用so的所有void __attribute__((constructor)) 属性的函数
4.void __attribute__((constructor)) 属性的函数中实现我们的hook函数
5. hook 函数我们可以利用Cydia Substrat框架的MSFunctionHook函数量实现对某个函数进行Hook。
模块:
1.实现一个Linux下的ptrace注入器: Inject
2.实现一个android APP 注入工具的界面
3.实现一个注入目的进程的SO(通用版,专用版)
ptrace注入器
之所以我们的注入程序叫做ptrace注入器, 这是因为我们整个注入过程都在使用Linux的API --ptrace, ptrace是linux系统的一个编写调试器的api, 此api必须在root用户才能调用,所以此种注入方式只能在root用户下使用,这里需要利用ptrace读取和修改寄存器的值和读写内存,以完成类似windows的dll注入功能。 下面的关键函数,已有大神帮我们封装的好了。
Ptrace 注入器基本原理:
1. attach目标进程,保存寄存器环境, 关键函数:ptrace_attach , ptrace

2.远程进程调用 mmap在目标进程内申请一块内存, 关键函数:ptrace_call_wrapper

3. 把注入SO的路径写入上一步申请的地址空间, 关键函数:ptrace_writedata

4. 远程进程调用函数dlopen,注意获取dlopen函数地址在linker模块中获取

6. 恢复环境,detach 目标进程: 关键函数:ptrace_detach

就此一个Linux 下的ptrace注入器就完成了。注: 由于笔者的代码是在android模拟上运行的, 代码是交叉编译,不便于调试,所以基本靠printf 完成代码的调试,但是这样效率比较低, 笔者建议看官朋友,可以在Linux系统完成这个注入程序的开发,这样不会笔者遇到一些问题,难以调试。 另外上面代码很多函数已经进行过封装了。
另外:ptrace:还可以用于反调试ptrace (TRACEME)
实现hook目标进程的字节码SO 通用版
由于注入的SO不是由java 的System.loadlibary 加载的, 而是由目标程序调用dlopen,加载的, 所以我们的SO的JNI_OnLoad是没有机会被调用的,所以我们在SO的init_arry完成我们的HOOK 工作。所以我们需要一个 声明一个 void __attribute__((constructor)) enctry() 函数。
1.enctry() 函数的实现不能太耗时,否者dlopen会堵塞。所以我们最好启动一个线程来实现我们hook 功能。 实现如下

2.线程回调函数,Hook的实现,需要根据不同的指令集实现,和需要修改进程指令。实现起来比较复杂,为了简单, 我们使用Cydia Substrat框架的MSFunctionHook函数实现Hook。实现如下:

3. 里面的关键函数InitSubstrate实现如下:

注入工具的界面的实现
1. 按进程ID , 按包名注入
2. 在指定的目录下, 遍历so文件
So注入工具TsoInject开发文档的更多相关文章
- 工具(5): 极简开发文档编写(How-to)
缘起 一个合格的可维护项目,必须要有足够的文档,因此一个项目开发到一定阶段后需要适当的编写文档.项目的类型多种多样,有许多项目属于内部项目,例如一个内部的开发引擎,或者一个本身就是面向开发者的项目. ...
- 【原创】Odoo开发文档学习之:构建接口扩展(Building Interface Extensions)(边Google翻译边学习)
构建接口扩展(Building Interface Extensions) 本指南是关于为Odoo的web客户创建模块. 要创建有Odoo的网站,请参见建立网站;要添加业务功能或扩展Odoo的现有业务 ...
- ECMall模板开发文档
ECMall 模板开发文档 前 言 欢迎阅读 ECMall 模板制作教程,通过阅读本教程可快速上手 ECMall 模板的使用和制作. ECMall 模板制 作要求用户具备 XML . XHTML 和 ...
- [技巧]使用Xcode集成的HeaderDoc自动生成注释和开发文档
[技巧]使用Xcode集成的HeaderDoc自动生成注释和开发文档 Doxygen本来是一个很好的工具,可是我感觉在mac系统下,如果用doxygen最后生成的CHM文件感觉就不是那么恰当, ...
- 项目管理之 使用 appledoc 生成开发文档
写项目时通常会遇到要求写开发文档的需求,但是就源代码来说,文档最好和源码在一起,这样更新起来更加方便和顺手.Objective-C 有一些文档管理工具,doxygen, headdoc 和 apple ...
- 微信-小程序-开发文档-服务端-模板消息:templateMessage.send
ylbtech-微信-小程序-开发文档-服务端-模板消息:templateMessage.send 1.返回顶部 1. templateMessage.send 本接口应在服务器端调用,详细说明参见服 ...
- 微信-小程序-开发文档-服务端-模板消息:templateMessage.getTemplateList
ylbtech-微信-小程序-开发文档-服务端-模板消息:templateMessage.getTemplateList 1.返回顶部 1. templateMessage.getTemplateLi ...
- 微信-小程序-开发文档-服务端-模板消息:templateMessage.getTemplateLibraryList
ylbtech-微信-小程序-开发文档-服务端-模板消息:templateMessage.getTemplateLibraryList 1.返回顶部 1. templateMessage.getTem ...
- 微信-小程序-开发文档-服务端-模板消息:templateMessage.getTemplateLibraryById
ylbtech-微信-小程序-开发文档-服务端-模板消息:templateMessage.getTemplateLibraryById 1.返回顶部 1. templateMessage.getTem ...
随机推荐
- Python-Boolean operation
一.布尔运算符 1.x and y: if x is false, then x, else y 2.x or y: if x is false, then y, else x 3.not x: if ...
- angular4 学习日志(一 依赖注入)
1.创建一个服务,为了好管理建一个名叫services的文件夹管理所有服务: ng g service services\person 2.在服务中定义一个person 类 : 3.在app.mdul ...
- ZJOI2004 午餐
题目传送门 嗯--我承认我看了题解,不过好歹有了点自己的思路,大约蒙出来了\(30\%\)(个人感觉)-- 学会\(DP\),任重而道远啊! Step1.贪心排序 先将每个人按吃饭的快慢排序,然后再进 ...
- webpack4.x ,1基本项目构建 详解
1.先创建个文件夹 比如叫 webApp 用编译器打开 2.安装全局的webpack 和webpack-cli 及 webpack-dev-server 命令如下 npm install webpac ...
- es6中的变量声明
目录 es6中的变量声明 变量的声明 es6中的变量声明 变量的声明 for (var i = 0; i < 5; i++) { console.log(i) } var声明 作用域问题 上面的 ...
- 开启PHP-LDAP
LDAP简介: LDAP(Lightweight Directory Access Protocol)的意思是"轻量级目录访问协议",是一个用于访问"目录服务器" ...
- js数组中去重对象
var allCourses = new Array();var coursesId = new Array();function findCourses() { Courses.data().eac ...
- Nginx认证
Nginx 的 ngx_http_auth_basic_module模块允许通过使用“HTTP基本认证”协议验证用户名和密码来限制对资源的访问. 配置举例: location / { auth_bas ...
- JZOJ 4743. 积木
Description Input Output Sample Input 38 7 63 9 41 10 5 Sample Output 18
- 【python学习】新手基础程序练习(二)
Ι 继续上一节得内容,这里主要是对各种知识的理解以及如何运用. 一.执行 Python 脚本的两种方式 1.把python执行文件加到计算机的环境变量中,然后新建文件把程序写在新文件里,再通过cmd命 ...