目录:

  • 1. Hook 简述
  • 2. VirtualAPP Java Hook 类图
  • 3. VirtualAPP Java Hook 实例 (ActivityManagerService)

1. Hook 简述

我们先来了解下 hook.

(1) 什么是 Hook

Hook 又叫“钩子”,它可以在事件传送的过程中截获并监控事件的传输,将自身的代码与系统方法进行融入。这样当这些方法被调用时,也就可以执行我们自己的代码,这也是面向切面编程的思想(AOP)。

(2) Hook 分类

(3) Hook 框架

大体分为以下两种:

  • 要 root 权限,直接 Hook 系统,可以干掉所有的 App。
  • 免 root 权限,但是只能 Hook 自身,对系统其它 App 无能为力。

在 Android 开发中,有以下常见的一些 Hook 框架:

(4) Hook 需要掌握的知识点

  • 反射
  • java 的动态代理

(5) Hook 的缺点

  • 需要做大量的适配,兼容 Android 版本,稳定性差
  • 大量使用反射,影响运行性能

2. VirtualAPP Java Hook 类图

想知道 VirtualAPP 如何 hook 系统服务,在各种系统 service 调用函数时进行拦截处理吗?先来回顾下 framework 的 ServiceManager, 我们要拦截的就是各种服务的调用。

VirtualAPP Java Hook 类图如下:

大致流程如下:

接下来我们以 ActivityManagerService 的 hook 为例,看看具体逻辑。

3. VirtualAPP Java Hook 实例 (ActivityManagerService)

对应的镜像封装类为 ActivityManagerStub:

总结:

简洁的动态代理封装,通过注册动态添加代理方法,去掉 if else,同时还支持注解注入。

【VirtualAPP 双开系列03】动态代理-hook系统服务(Java层)相关推荐

  1. 【VirtualAPP 双开系列08】如何实现多开 - UID

    目录: 1. Android UID 介绍 2. 多开基本原理 3. 常用的多开方案 4. VirtualAPP 如何实现多开 1. Android UID 介绍 Android 系统中修改了 Lin ...

  2. android hook底层代码_Java-Hook技术-入门实践(反射、动态代理)-Hook拦截通知(当前App/Context)...

    老样子,上一篇MonkeyLei:Java-Hook技术-入门实践+反射.动态代理.热修复再看看 我们Hook学习了一下,一个是Java本地Main的实践练习. 一个是Android的监听事件的Hoo ...

  3. 【VirtualAPP 双开系列02】进程管理

    目录: 1. 运行 VirtualAPP,查看进程 2. VirtualAPP 分成四种类型的进程 3. 关于 Stub 4. 关于 ServiceManager 1. 运行 VirtualAPP,查 ...

  4. 设计一个事务增强的动态代理类, 对持久层的用户的CRUD操作进行事务增强 即:

    动态代理类: package com.bj169.invoke;import com.bj169.dao.UserDao; import com.bj169.util.HibernateUtil; i ...

  5. 利用动态代理来实现DAO层中的方法

    动态代理实现接口 动态代理机制是jdk1.3版本以后引入的,在下面我主要用动态代理来实现接口,并且用注释来代替查询语句注释 DAO方法如下 package com.yf.dao;import java ...

  6. 动态代理/spring IOC/JAVA反射机制

    动态代理 代理的作用就是控制对象的访问权限: 首先我们需要写一个接口 这个就是代理接口 public interface Student { public void S1(); } 然后在写一个接口的 ...

  7. 【VirtualAPP 双开系列04】VirtualAPP 可扩展 AIDL 分析

    目录: 1. 什么是 AIDL? 2. 为什么要用 AIDL? 3. VirtualAPP AIDL 使用 4. IPC 总线(IPCBus)动态扩展 5. 总结 1. 什么是 AIDL? AIDL: ...

  8. 【VirtualAPP 双开系列07】第三方 APP Service、Provider 加载分析

    目录: 1. Service 加载分析 2. Provider 加载分析 1. Service 加载分析 2. Provider 加载分析

  9. 狂神说Spring讲解第19动态代理中错误java: 不兼容的类型: com.Orac.kuang.Host无法转换为com.kuang.demo3.Rent

    java: 不兼容的类型: com.Oracle.demo3.Host无法转换为com.Oracle.demo3.Rent 解决方法: Clinet: package com.Oracle.demo3 ...

最新文章

  1. oracle rpad mysql_Oracle生成不重复票号与LPAD,RPAD与NEXTVAL函数解析
  2. Java处理excel根据某列的值查询,并将结果显示在其他列中
  3. POJ 2728 最优比率生成树
  4. 《Effective Java》—— 对于所有对象都通用的方法
  5. 根据Web服务器的记录来追踪黑客(转)
  6. vim命令杂烩(复制粘贴、建文件、撤销等)
  7. 追影windows7 虚拟4桌面
  8. 6个最佳的开源Python应用服务器
  9. CPU-AMD处理器的驱动下载地址
  10. opencv获取人脸眼镜位置_用opencv检测人眼并定位瞳孔位置
  11. python notebook右侧网页_Python Notebook介绍
  12. weblogic for linux 下载,weblogic for linux安装
  13. linux rz sz使用
  14. echarts拖拽echarts实现多条可拖动节点的折线图
  15. java 根据已有ppt模板修改其内容
  16. 亭子早期博客中16进制颜色值地址
  17. Win11dns解析状态异常怎么处理?Win11dns解析失败解决方法
  18. php获取应用宝app下载连接
  19. 如何下载在线课程网站的视频
  20. 如何用纯 CSS 创作一只愤怒小鸟中的绿猪

热门文章

  1. Android清空Fragment缓存,如何在Android中清除Fragment Backstack
  2. 【开源电路】STM32F401RCT6开发板
  3. 0 地道英语口语/发音 | 高效提升攻略
  4. 生日祝福小程序_广告配音剪映零基础入门教程第二十六篇:如何给朋友制作生日祝福视频...
  5. 七天编写指标_操盘线指标公式源码(七天线 工作线 生命线)[通达信公式
  6. Android中文开发教程()
  7. mt6572 开发板环境建立笔记
  8. 零基础转行成功的前辈写给测试新手的话
  9. Google Translate
  10. php如何制作视频特效,视频特效怎么弄 给视频加一个主题样式,简单几步制作出属于自己风格的独特视频...