github上有人部分开源了一套可以hook java 方法的东西,地址:https://github.com/cmzy/ZHookLib
由于只开源了使用部分,故此处暂时先记录一下这个东西的作用。
如介绍所言,此工具是用于hook java的方法的,总的来说可以 hook两类的方法,构造的和一般方法,使用也简单,只要调用ZHook的hookAllConstructors或hookAllMethods等方法就可以把钩子放到去对应类的方法里,ZHook包含的方法有:
1 | findAndHookMethod(Class<?>,String,Object[]) |
其中,MethodHook是一个回调方法,用于Hook的时候回调
如示例1
Set<Unhook> unhooks1 = ZHook.hookAllConstructors(HookTest.class, callback);
这样就把callback钩到HookTest中了。
接着,包含构造方法在内的所有方法调用,都会触发callback的回调方法。
修改返回值的修改:
hook方法执行后会回调afterHookedMethod方法,会将所有的参数以MethodHookParam的形式返回,这个为方法getResult表示的是方法的返回值,通过setResult可以改变java方法的返回值。