吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 8603|回复: 18
收起左侧

[Android 转帖] Art 模式 实现Xposed Native注入

  [复制链接]
薛-蓝狐 发表于 2019-10-30 10:42
前言:
现在 市面上的 Hook 框架有很多 ,Xposed,FrIDA,YAHAK 等
Frida 是目前最火的 ,跨平台注入 框架 ,支持 java和 Naive 层
安卓 目前 沙盒注入 方式 应该 就 两种Ptrace 和 Zygote
各有各的优点和短板  曾经Hook之王 Xposed 在 Native层显得比较无力
也就导致 市场上很多 模块都 不能 进行Native层的 Hook
一直在想着 能不能 试着 完善一下。
在之前这篇帖子里  简单实现了 Xposed 在 4.4的 版本的 NativeHook
主要 原理就是 在加载 被Hook So的 时候 利用Xposed拦截
在 java层 调用System.load函数 把Xposed 模块里面的so进行 加载注入  
在so里面 直接调用 dlopen拿到 被Hook So地址 即可
在高版本里面 是不允许直接 System.load 的 认为是 不安全的
1.png
大概意思就是说 直接 System.load 容易被串改 在高版本会失效 应该使用 System.loadLib
这个函数是加载 app内部 Lib下So的函数   但最终 都会调用 doLoad函数 (具体 可以参考对应源码 )我们就从 这个函数入手
Xposed 先挂钩 作为 So名字 作为 条件过滤依据
2.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的 加载  如图
3.png
第一个 参数 是 So的 路径 第二个参数 Classloader 其实他是一个 PathClassloader
如果 发现 加载的 So 是被Hook的 So 便进行 注入 把第二个 参数 传入 进去 反射备用
4.png 这块的 Path是 绝对路径  有人会问 为什么要这么写   
我在Hook 这个 函数的时候  把参数 1 打印了一下 可以看到 加载的 是 So的绝对路径
(这块 楼主 也有一件事 不太懂 为什么 路径 要加个 -1 很奇怪 算了 照葫芦画瓢  先这么写 ) 5.png
这里科普一下 /data/data/ 下面 都是 App的数据 而/data/App/下面放的是 app 包
然后吧 路径 改成自己Xposed模块里的 So 进行  注入 成功!
这块有个调用时机 问题 一定要在 目标 So加载完毕 以后 在进行 注入
因为后期需要 实现 突破 7.0  dlopen 限制  需要遍历 内存对应的Map文件
下来 开始 在 Xposed模块的 so得 JNI_OnLoad 进行  挂钩 Hook 楼主用的是 InlineHook
6.png 在 4.4 版本 以前 可以 直接 dlopen直接打开 任意目录的 So 进制 装载和链接 在 4.4的 时候 直接打开 被Hook的 so即可 在高版本 因为 权限问题 不能 直接打开 7.png 主要是遍历 Map文件 拿到so的 地址 和 dlopen的 Hook(具体可参考 项目的 reademe) 8.png 下面 我们看看 内存里的 文件对应内容 楼主用的是 7.1的 安卓  系统 利用GG修改器 导出内存  看看 对应 文件的 地址的映射 和 路径 9.png 有人 会问 这个 怎么导出的? 内存 管理页面 点导出 内存 10.png
结束地址 随便 输入 保存即可 (GG修改器 是个 神器 ,可以 用来 dex脱壳  So 还原 ,Dll提取等 直接操作内存  感兴趣可以 学学  )将路径 改为 绝对路径 11.png
直接 dlopen打开
拿到 句柄 以后 直接进行 用dlsym 拿到 对应函数地址 用 InlineHook 进行 挂钩  
还是以loadbuffer函数 为 目标 函数 dump lua文件 12.png
在 my_luaL_loadbuffer 进行保存
13.png
保存成功
15.png
上面的 只是一个 demo 一个Hook的 模板 Xposed 模块 可以用 这种方式 进行 so层的 Hook和 注入 珍惜著 代码已经上传本来想着上传到附件的结果大于1MB  下面附上百度网盘链接: https://pan.baidu.com/s/15puG_bma_-OwJSOE74BBmw 提取码: 7pf6 复制这段内容后打开百度网盘手机App,操作更方便哦



免费评分

参与人数 6吾爱币 +6 热心值 +4 收起 理由
tzl + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
zhengyg + 1 + 1 谢谢@Thanks!
ybjun + 1 + 1 谢谢@Thanks!
huangyutong + 1 + 1 谢谢@Thanks!
TTTian1 + 1 + 1 用心讨论,共获提升!
bb8820 + 1 谢谢@Thanks!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

kjzl2025 发表于 2019-11-1 22:02
是的,基于xposed在native层漏洞太大了,如果可以的话希望能搞一个支持native层xposed的扩展实现,兼容原接口,edxposed估计是没戏。
楼主太棒了。
阴月有缺 发表于 2019-10-30 16:23
是的,基于xposed在native层漏洞太大了,如果可以的话希望能搞一个支持native层xposed的扩展实现,兼容原接口,edxposed估计是没戏。
meicen2009 发表于 2019-10-30 10:52
小xi西 发表于 2019-10-30 11:15
有办法给华为手机解锁吗?
xixicoco 发表于 2019-10-30 11:24
这位大佬是珍惜的小号吧
zbjack 发表于 2019-10-30 13:10
谢谢分享!
Skslience 发表于 2019-10-30 13:12
厉害👍,膜拜参观
TTTian1 发表于 2019-10-30 13:17
这个注入有点复杂,得研究一下
Dreace 发表于 2019-10-30 15:41
Android 第一次安装一个 apk 时包名后面会加上一个后缀 -1,覆盖安装包名后缀变成 -2,再次安装变回 -1。
huangyutong 发表于 2019-10-30 15:50
谢谢知识分享
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 19:39

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表