原标题: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的,不安全。

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

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

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

这块有个问题就是:怎么把 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的加载如图:

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

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

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

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

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

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

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

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

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

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

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

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

https://github.com/lizhangqu/dlfcn_compat

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

(具体可参考项目的 reademe)

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

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

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

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

② 结束地址随便输入

③ 保存即可。

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

将路径改为 绝对路径

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

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

在 my_luaL_loadbuffer进行保存

保存成功

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

看雪ID:珍惜Any

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

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

转载请注明来自看雪社区

热门图书推荐

责任编辑:

java hook xposed_Art 模式 实现Xposed Native注入相关推荐

  1. Android平台dalvik模式下java Hook框架ddi的分析(1)

    本文博客地址:http://blog.csdn.net/qq1084283172/article/details/75710411 一.前 言 在前面的博客中已经学习了作者crmulliner编写的, ...

  2. java上传ddi_Android平台dalvik模式下java Hook框架ddi的分析(2)--dex文件的注入和调用...

    前面的博客<Android平台dalvik模式下java Hook框架 ddi 的分析(1)>中,已经分析了dalvik模式下 ddi 框架Hook java方法的原理和流程,这里来学习一 ...

  3. Android平台dalvik模式下java Hook框架ddi的分析(2)--dex文件的注入和调用

    本文博客地址:http://blog.csdn.net/qq1084283172/article/details/77942585 前面的博客<Android平台dalvik模式下java Ho ...

  4. xposed hook java_[原创]Android Hook 系列教程(一) Xposed Hook 原理分析

    章节内容 一. Android Hook 系列教程(一) Xposed Hook 原理分析 二. Android Hook 系列教程(二) 自己写APK实现Hook Java层函数 三. Androi ...

  5. flask与js交互的示例代码_Frida Java Hook 详解(安卓9):代码及示例(上)

    Frida Java Hook 详解(安卓9):代码及示例(上) 前言 1.1 FRIDA SCRIPT的"hello world" 1.1.1 "hello world ...

  6. 重学Java设计模式-创建者模式-工厂方法模式

    重学Java设计模式-创建者模式-工厂方法模式 内容摘自:重学 Java 设计模式:实战工厂方法模式「多种类型商品不同接口,统一发奖服务搭建场景」 | bugstack 虫洞栈 工厂方法模式介绍 图片 ...

  7. 彻底理解Java的feature模式

    先上一个场景:假如你突然想做饭,但是没有厨具,也没有食材.网上购买厨具比较方便,食材去超市买更放心. 实现分析:在快递员送厨具的期间,我们肯定不会闲着,可以去超市买食材.所以,在主线程里面另起一个子线 ...

  8. Java实现SSH模式加密

    版权声明:欢迎转载,请注明沉默王二原创. https://blog.csdn.net/qing_gee/article/details/44409735 Java实现SSH模式加密 一.SSH加密原理 ...

  9. java 硬件交互_Java关键字之native

    一:什么是NATIVE Method 简单的讲,一个NATIVE Method就是调用了java调用非java代码实现的接口. native method 方法实现:该方法的实现是由非java语言实现 ...

最新文章

  1. windows上配置jdk环境变量
  2. 帝国cms商城微信小程序之后台sku多规格的开发说明
  3. oracle+数据到+mysql数据库乱码问题_Linux系统Oracle数据库乱码问题的解决方法
  4. 今日头条|张一鸣:我遇到的优秀年轻人的5个特质
  5. SQLServer性能优化之查询提示
  6. nyoj496巡回赛-拓扑排序-拓扑序列
  7. shell 指令使用整理
  8. Kotlin 基础语法
  9. npm 包管理器_导演电影解释了节点软件包管理器(NPM)
  10. 荣耀赵明评苹果发布会掉队5G:意料之中 情理之外
  11. 简道云-第3章-表单
  12. webbrowser控件使用,冬日日记每一天
  13. 小米10青春版刷鸿蒙,没有高刷弱不禁风?小米10青春版刷新低价,这次用户或许会满意!...
  14. Openbravo3.0 体系结构
  15. 17款现代风格的免费英文字体,分享给设计师们
  16. CSS 帧动画 播放动画
  17. 想学3D建模,去哪儿学比较好
  18. 存款买房python
  19. Jenkins 插件 Extended Choice Parameter
  20. 区块链和大数据一起能否开启数据完整性的新纪元?

热门文章

  1. StreamTokenizer读不到TT_EOL
  2. 接口;String类;内部类
  3. Vue3全局挂载方法
  4. 求桥和割点的Tarjan算法
  5. Android手势滑动(左滑和右滑)
  6. 开源博客项目Blog .NET Core源码学习(2:数据库结构分析)
  7. 十连胜!实在智能×浙江省十家农商行,数字科技赋能普惠金融
  8. 金蝶 K3 ERP 采购管理 表结构明细 POOrder/Entry
  9. Linux C语言中的read write lseek的使用
  10. emlog Pro版本会员中心主题 - 琴音龙悦