Android ART Hook & 注入实现细节

author: Swift Gan title: Android ART Hook date: 2019/04/01 SandHook Android Art Hook Swift Gan Agenda 简介 ART Invoke 指令生成 基本实现 指令检查 Xposed 支持 inline...

2019-04-11 11:14:58

阅读数 123

评论数 0

SandHook 第四弹,Android Q 支持 & Hidden API & Inline 的特别处理

SandHook 目前支持 4.4 - 10.0 32/64 bit 支持 Xposed API Github: https://github.com/ganyao114/SandHook Android Q 支持 Hidden Api 这个是从 Android P 就开始引入的反...

2019-03-15 21:08:08

阅读数 308

评论数 2

Android ART invoke 代码生成

前言 在前面 SandHook 系列我们知道 ArtMethod 入口替换并不能覆盖所有的方法,而且这个问题比预想的严重的多的多。 而导致 Hook 不到的原因不仅仅是 inline 优化,Inline 只是小头,真正主要的原因是 Art Optimizing 代码生成的 Sharpening...

2019-03-03 23:01:50

阅读数 117

评论数 0

SandHook 第三弹 - 性能优化 & Xposed 模块 & 阻止 VM Inline

简介 前面有提到过 SandHook 需要手动写一个 Hook 方法作为 Hook 的入口,所以想要兼容 Xposed Callback 式 API 就必须凭空生成一个 Hook 方法来转发 Xposed Callback 逻辑。 所以我选择了 DexMaker,但是 Dexmaker 生成代...

2019-02-22 22:38:17

阅读数 389

评论数 0

SandHook 第二弹 - Xposed API 兼容 & 指令检查 & 进程注入

Xposed API 兼容 由于 SandHook 需要手动写一个签名与目标方法相同的 Hook 方法,如果想把 API 包装成类 Xposed 的 Callback 式 API 是比较困难的,首先参数列表的解析就需要另外实现。 Epic 是用写好的一堆 Stub 函数进行分发,SandHoo...

2019-02-12 16:07:09

阅读数 589

评论数 0

Android ART Hook 实现 - SandHook

简介 Github: https://github.com/ganyao114/SandHook 关于 Hook,一直是比较小众的需求。本人公司有在做 Android Sandbox(类似 VA),算是比较依赖 Hook 的产品,好在 Android Framework 大量使用了代理模式。所...

2019-01-27 16:11:20

阅读数 2186

评论数 0

OS虚拟内存管理 - Zircon(ARM64)

前言

2019-01-19 21:02:22

阅读数 390

评论数 0

Android ART hook 框架 YAHFA 的 Bug 修复以及改进建议

YAHFA 目前简单找了一下 Android 上的 ART Hook Epic 和 YAHFA 较为流行,支持的版本也比较好 5.0 - 9.0,所以看了一下 YAHFA 源码并且跑了一下 demo。 Bug 使用中发现在 5.0 - 6.0 的 64 位机器上会挂掉,调试了一下发现 YAHFA ...

2019-01-15 17:52:45

阅读数 271

评论数 0

Zircon - Fuchsia 内核分析 - 启动(内核初始化)

简介 前面已经介绍了 Zircon 内核启动的汇编代码部分,主要是一些 CPU 的初始化。 现在 prime CPU 已经来到了 C 世界的 lk_main() 函数 其他 CPU 也来到了 arm64_secondary_entry() 函数 lk_main lk_main() 是打开...

2019-01-10 16:14:25

阅读数 833

评论数 2

Zircon - Fuchsia 内核分析 - 启动(平台初始化)

简介 Zircon 是 Google 新操作系统 Fuchsia 的内核,基于 LK - Little Kernel 演变而来。而 Little Kernel 前面一直作为 Android 系统的 Bootloader 的核心而存在。Zircon 在此基础上增加了 MMU,System Call...

2018-12-23 16:30:30

阅读数 2211

评论数 1

Fuchsia - 编译及运行

Fuchsia 的编译及运行是非常简单的,至少在 Mac 上如此,中间没有出现任何讨厌的错误 获取源码 首先需要安装 Homebrew,这个随便百度 xcode-select --install 安装最新 xcode,近期的版本也可以 curl -s “https://fuchsia.googl...

2018-12-16 15:43:47

阅读数 477

评论数 2

Fuchsia - 简析

一点猜测 Fuchsia 是为了取代 Android 的吗? 我觉得不是的,因为现在 Android 作为移动平台的操作系统已经非常成熟,暂时也没有遇到影响演进的瓶颈,Fuchsia 如果是为了代替 Android 而做的话则不合逻辑。 那么 Fuchsia 为何而生? 谷歌可能想让 Fu...

2018-12-15 21:39:57

阅读数 972

评论数 0

JVM JIT(JAMVM)

简介 为了提高虚拟机的执行效率,对于解释执行的虚拟机来说,解析字节码指令和指令分发的开销时非常巨大的。 可以想象 Native Code 执行 1 + 2 仅仅需要一行机器指令,而栈则需要 取指令->匹配指令 handler -&a...

2018-11-30 10:44:28

阅读数 144

评论数 0

JVM 解释器优化(JAMVM)

简介 在前面的文章中有介绍过 miniJVM 的具体实现,但是 miniJVM 的解释器部分仍然是比较简单的 Switch 指令分发,从执行效率上来说是比较落后的。 同样是轻量级的 JVM,jamvm 在性能方面就要优秀很多,最新版本 2.0.0 支持了 openjdk8,并且支持 java ...

2018-11-21 17:48:36

阅读数 102

评论数 0

记一次 JVM 源码分析(5.异常处理)

异常 异常打印 Java 如果发生异常,通常会调用 Throwable.printStackTrace 去打印堆栈信息。 堆栈信息包括完整类名,方法名,java 文件名,行号 而这样的信息根据发生 Crash 线程所经历的n个方法会打印出n行。 整个过程被称为栈回朔 栈回朔 栈回朔的...

2018-11-14 12:21:51

阅读数 71

评论数 0

记一次 JVM 源码分析(4.解释器与方法执行)

简介 miniJVM 作为一个 mini 的 Java VM,实现了 Switch 解释器,并不支持主流 JVM 的 JIT 或者更为复杂的 AOT。但这样对于我们了解字节码的执行已经足够了。 字节码指令 基于堆栈 字节码指令类似于汇编指令,但是不同的是: 一行汇编代码的格式一般都是...

2018-11-13 15:33:07

阅读数 134

评论数 0

记一次 JVM 源码分析(3.内存管理与GC)

简介 miniJVM 的内存管理的实现较为简单

2018-11-08 12:41:25

阅读数 149

评论数 0

记一次 JVM 源码分析(2.初始化与类加载)

前言 首先概括一下 JVM 运行流程: JVM 初始化   加载主类     运行 Main 方法       加载其他类         运行其他方法   GC 开始 JVM 初始化 JVM 的入口位于 /mini_jvm/main.c ----- main() 方法 main 方法的主要任务是...

2018-11-05 22:06:11

阅读数 100

评论数 1

记一次 JVM 源码分析(1.简介)

简介   本来打算直接看 ART 的源码,一看 Android P 的已经十分庞大了,所以打算找一个小型的 JVM 热热身,想起了以前功能机上的 Java KVM,但是又太过古老。翻 github 偶然翻到一个开源的 Mini Jvm,竟然还支持 Java8 标准,所以准备以此入手了解 JVM。...

2018-11-05 20:59:22

阅读数 82

评论数 0

AppBarLayout + RecycleView 滑动后,item 在一段时间内无法点击的问题

1

2018-06-11 14:31:58

阅读数 1072

评论数 7

提示
确定要删除当前文章?
取消 删除
关闭
关闭