先说下背景我需要的是在安卓平台上 HOOK某个进程的JAVA代码
这两天查了很多资料 以为反射可以做到,发现根本不是一回事。Windows平台的HOOK的意思是 钩子在你想HOOK的某处代码 通过各种方法 执行到你的代码上 现在要做的是 某安卓进程中的JAVA代码 A方法调用B方法我想在A方法调用B方法的时候 拦截到A传给B的参数进行过滤不知道JAVA中怎么做到这样。 说到底,就是我要把B方法完全替换成我的代码。不知道这样说是否能明白

解决方案 »

  1.   

    之前有个阿里的jvm工程师讲过这个,没听大懂,据说openJDK预留了很多hook,可以利用。建议查下阿里的资料。
      

  2.   

    step 1:先so ptrace注入到宿主进程
    step 2:在so里加载自己的jar
    step 3:在jar里反射注入B
      

  3.   


    你好,我前天花了一天的时间来学习反射,看完之后发现反射应该是做不到的。我的需求是, 修改B的方法,让A调用B的时候,调用成我的方法。但是看反射里面,我只能修改B的属性以及数据,根本不能修改B的方法。请问如何修改啊?
      

  4.   


    是hook jvm吗?我得出的结论是如果既想HOOK java层的代码又无法直接对java做hook的话,就去hook jvm的 classloader   然后在classloader  载入此类的时候,装载我的类。。(纯属理论)
      

  5.   


    是hook jvm吗?我得出的结论是如果既想HOOK java层的代码又无法直接对java做hook的话,就去hook jvm的 classloader   然后在classloader  载入此类的时候,装载我的类。。(纯属理论)
    好像是的,是对jvm的优化。
      

  6.   

    单元测试用的mock系统基本都可以做到推荐 Mockito,它提供的 spy 功能就是你要的。JDK本身提供的动态代理实现也可以做到。也可以自己实现动态代理做到,你需要的是动态生成代码,动态编译、加载。有几种调用是不能代理的:
    方法内部的硬编码调用静态方法调用final的方法的调用
    这几种也被称为“对单元测试不友好”的代码。延伸开去说的话,这也是使用所谓“抽象工厂模式”或者类似 Spring 这种框架的意义之一,即避免成员对象实例化的硬编码。
      

  7.   

    楼主这个问题,建议用字节码解析吧,不过稍微有点复杂! 你可以了解一下Javassist等字节码工具,spring的AOP就有点像你的那种情况,拦截调用并且插入自己的切面逻辑,再执行B