dll注入有什么用_Art 模式 实现Xposed Native注入

前言

现在市面上的Hook框架有很多:Xposed、Frida、YAHAK 等,Frida 是目前最火的,跨平台注入框架,支持 java和 Naive 层。

安卓目前沙盒注入 方式应该就两种Ptrace 和 Zygote,各有各的优点和短板 ,曾经Hook之王 Xposed 在 Native层显得比较无力,也就导致市场上很多模块都不能进行Native层的Hook ,一直在想着能不能试着完善一下。 https://www.jianshu.com/p/810f6ac05c37

正文

在之前这篇帖子里  简单实现了 Xposed 在 4.4的 版本的 NativeHook ;

主要原理 就是在加载、被Hook So的时候,利用Xposed拦截 ;

在java层调用System.load函数把Xposed模块里面的so进行加载注入,在so里面直接调用dlopen拿到被Hook So地址即可。

在高版本里面是不允许直接System.load的,不安全。 

c28149e26311436c6f8adb58afe5ed60.png

大概意思就是说直接System.load容易被串改在高版本会失效应该使用 System.loadLib。

这个函数是加载 app内部 Lib下So的函数。但最终,都会调用 doLoad函数(具体 可以参考对应源码 )我们就从这个函数入手。

Xposed 先挂钩,作为 So名字作为条件过滤依据。

22bb8c4228c7d354627271e478568a36.png

这块有个问题就是:怎么把 Xposed模块里面的 So注入到 目标 进程中?  

在 4.4 版本的时候,可以直接 System.load 打开即可,然后进行装载和链接。

这个问题我想了很久有两种可行方案 :

第一种方案 :可以把模块里的 so 利用shell权限进行 copy,直接拷贝到 被 Hook的 lib下面 。

然后 System.loadLib 去加载即可。因为shell需要 root 会导致被 Hook 进程,申请 Root权限才可以 。

(比如 Hook A app因为 Xposed 走的是 A所在的进程,所以如果在代码里申请 Root 最终会提示A app申请 Root)进行操作不方便和不实用 。

第二种方案:直接利用反射调用doLoad函数进行So的加载如图:

0a6dfdbb67b1d325f5d6439d885b5a9a.png

第一个参数是So的路径第二个参数Classloader其实他是一个 PathClassloader。

如果发现加载的So是被Hook的So,便进行注入把第二个参数传入进去反射备用。

4c4da7c548dec72d9c6be34a23544629.png

这块的 Path是绝对路径。有人会问为什么要这么写 ?   

我在Hook 这个函数的时候,把参数 1 打印了一下。可以看到加载的是 So的绝对路径。

(这块楼主也有一件事不太懂,为什么路径要加个 -1 ?很奇怪,算了,照葫芦画瓢,先这么写 )

4c0ee97ab1dfc7416f62b6aba803dff6.png

这里科普一下 /data/data/ 下面都是App的数据,而/data/App/下面放的是 app 包 。

然后把路径改成自己Xposed模块里的So 进行注入,成功!

这块有个调用时机问题,一定要在目标So加载完毕以后在进行注入,因为后期需要实现突破7.0dlopen 限制,需要遍历内存对应的Map文件。 

下来开始在Xposed模块的so得 JNI_OnLoad 进行挂钩。Hook 楼主用的是 InlineHook

33c7b32161962320cc2a278a578b8c86.png

在 4.4 版本以前可以直接 dlopen,直接打开任意目录的So进制装载和链接。在 4.4的时候直接打开被Hook的so即可,在高版本因为权限问题不能直接打开。

a4e29f052d107a0b00409f66f339f017.png

楼上图片参考地址:https://www.cnblogs.com/eniac1946/p/7515557.html

突破 dlopen 限制楼主用的是感谢大佬提供的轮子:

https://github.com/lizhangqu/dlfcn_compat

主要是遍历 Map文件,拿到so的 地址和 dlopen的 Hook。

(具体可参考项目的 reademe)

5b92ab7837e19dcf886230e6162552e1.png

下面我们看看内存里的文件对应内容楼主用的是7.1的安卓系统。

利用GG修改器导出内存看看对应文件的地址的映射和路径 。

7224ed7197d133dece42e9be3befc314.png

有人会问这个怎么导出的? 

① 内存管理页面点导出内存 

c48c6a302513af98d9c29d3d88963a3f.png

② 结束地址随便输入 

90318ce7fa713b4eb79097c757693152.png

③ 保存即可。

(GG修改器是个神器 ,可以用来dex脱壳So还原,Dll提取等直接操作内存感兴趣可以学学)

将路径改为 绝对路径

6d59104e4d2b09063f2894fd1c225fd2.png

直接 dlopen打开,拿到句柄以后直接进行用dlsym拿到对应函数地址用 InlineHook进行挂钩  。

还是以loadbuffer函数为目标函数dump lua文件。

73c8eaebe2e4a2a97d04910d80f92ee6.png

在 my_luaL_loadbuffer 进行保存 

4dd622c3459441b7a2b405cc44bcbce2.png

保存成功 

6ab557af4919cc4e3a340115e480dc24.png

上面的只是一个demo一个Hook的模板,Xposed模块可以用这种方式进行so层的Hook和注入,具体代码上传到:https://github.com/w296488320/ArtXposedNativeHook

649e642a862db25776bc529157d845eb.gif e32089ba9064d127bed87c3ed09e4169.png

看雪ID:珍惜Any     

https://bbs.pediy.com/user-819934.htm

本文由看雪论坛 珍惜Any  原创

转载请注明来自看雪社区

热门图书推荐

98419d3212c6955bcf544c6db4b34bc7.png 立即购买!

热门文章阅读

1、Pwn学习笔记:Rop Primer靶机实战

2、base64算法初探即逆向分析

3、从华为方舟编译器看一种JavatoC语言解释器的实现

e21f1f96f1b25a07a6fe18360936a54b.png

公众号ID:ikanxue

官方微博:看雪安全

商务合作:wsc@kanxue.com

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值