xposed可以hook所有的java函数吗?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了xposed可以hook所有的java函数吗?相关的知识,希望对你有一定的参考价值。

最近在研究关于短信安全的东西,用的是xposed框架。有个问题就是,xposed可以hook任意的java函数么

Cydia Substrate是一个代码修改平台。它可以修改任何主进程的代码,不管是用Java还是C/C++(native代码)编写的。而Xposed只支持 HOOK app_process中的java函数,因此Cydia Substrate是一款强大而实用的HOOK工具。

Substrate几个重要API介绍

MS.hookClassLoad

函数原型:void hookClassLoad(String name, MS.ClassLoadHook hook);

该方法实现在指定的类被加载的时候发出通知。因为一个类可以在任何时候被加载,所以Substrate提供了一个方法用来检测用户感兴趣的类何时被加载。

参考技术A 几天前,在看雪安卓版块的论坛上,看到有人发表了一份dalvik hook的实现代码,这里小弟果断献丑下,给提供一份dalvik hook的另外一种实现。

  首先解释下dalvik虚拟机中的Method结构体,Method结构体声明在源码目录树下的dalvik/vm/oo/Object.h文件内,在dalvik的世界中,每一个java方法都有一个对应的Method对象,
  dalvik虚拟机在执行java方法时,就会通过该方法的Method对象调用到方法的具体实现代码,Method结构体内有个成员,名位insns,该字段保存着java方法具体的实现代码。那么我今天提供的这个dalvik hook的实现原理就是通过修改Method对象中的insns字段的值来达到hook java的目的。

  这里简短的用文字的形式描述下Hook的实现过程。

  现在有一个返回字符串的函数原型声明为:
  public String truth()
  
  return "hello from truth";
  
  另外声明一个方法为:
  public String fake()
  
  return "fake string";
  
  之后,该类被加载后,分别获得truth和fake方法的Method对象,并将fake方法的实现代码赋值给truth的Method对象,之后,应用程序调用truth方法时,获得的字符串为"fake string"。

以上是关于xposed可以hook所有的java函数吗?的主要内容,如果未能解决你的问题,请参考以下文章

Android笔记-Xposed的使用(Hook登录函数获取用户名密码)

利用Xposed Hook打印Java函数调用堆栈信息的几种方法

Xposed hook函数内有匿名内部类该怎么写

Xposed框架与Drozer测试框架学习-Hook篇

Xposed框架Hook Android应用的所有类方法打印Log日志

Xposed模块 -- Hook函数参数