java程序如何hook?
先说下背景我需要的是在安卓平台上 HOOK某个进程的JAVA代码
这两天查了很多资料 以为反射可以做到,发现根本不是一回事。
Windows平台的HOOK的意思是 钩子
在你想HOOK的某处代码 通过各种方法 执行到你的代码上
现在要做的是 某安卓进程中的JAVA代码 A方法调用B方法
我想在A方法调用B方法的时候 拦截到A传给B的参数进行过滤
不知道JAVA中怎么做到这样。
说到底,就是我要把B方法完全替换成我的代码。不知道这样说是否能明白 --------------------编程问答-------------------- 其实反射可以做到的。
Spring里面就有AOP的例子类似这个。 --------------------编程问答--------------------
敢不敢详细说明啊大哥。。。
昨天看AOP 没觉得是我要的东西。。 --------------------编程问答-------------------- 这个就是个类似于过滤器的功能。
AOP你用一下就知道了,
当你A调用B的时候,中间有个C能得到A传给B的东西,
如果不用AOP,可以用JAVA动态代理能达到你的要求。 --------------------编程问答--------------------
package com.birds.aop;
public interface Action {
public void process(String msg);
}
package com.birds.aop;
public class MyAction implements Action {
@Override
public void process(String msg) {
System.out.println("result:" + msg);
}
}
public class MyHandler implements InvocationHandler {
private Object obj;
public MyHandler() {
}
public Object newProx(Object obj){
this.obj = obj;
return Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), this);
}
/*
* (non-Javadoc)
*
* @see java.lang.reflect.InvocationHandler#invoke(java.lang.Object,
* java.lang.reflect.Method, java.lang.Object[])
*/
@Override
public Object invoke(Object arg0, Method method, Object[] arg2)
throws Throwable {
System.out.println("=============" + method + "," + arg2);
if (arg2 != null) {
for (Object pm : arg2) {
System.out.println("what:" + pm);
}
}
return null;
}
public static void main(String[] args) {
MyHandler handler = new MyHandler();
Action action = (Action) handler.newProx(new MyAction());
action.process("Hello,guys");
}
}
只要执行process方法,就会自动调用invoke方法,你在这个方法里面能看到是什么参数,调用了什么方法。
--------------------编程问答--------------------
你好,你这个应该不能完成我想要的。你这个只是监视而已。我昨天看了。
我要的不是监视,监视的话 反射我都不需要的。我只需要注册个消息。
我需要的是 当A调用B的时候,调用的B是我的代码,由我的代码决定传给B的是什么。
你们搞JAVA的是不是根本不需要hook的啊?
或者你们搞java的都不用Windows平台吗?你们可以看看Windows平台hook的意思。
我要的是那个。
现在 A点到B点是直达的。
我要实现的是,在A点到B点这个过程中设立关卡。这样总能明白了吧?
补充:移动开发 , Android