【原创】Android5.1 Art Hook 技术分享(二)
奥兰杜 2015-09-20 02:44:36 前文写的太多,超过字数限制了。。。
0x03
如何处理返回值
我想到的办法就是,为每一个被hook的函数都分配一个与其返回值对应的hook处理函数,由于返回值类型是确定的(8种基本类型加Object),所有我枚举的构造了9种不同返回值的hook处理函数(直接java编写)。
private static int onHookInt(Object artmethod, Object receiver, Object[] args) {
return (Integer) HookManager.onHooked(artmethod, receiver, args);
}
private static long onHookLong(Object artmethod, Object receiver, Object[] args) {
return (Long) HookManager.onHooked(artmethod, receiver, args);
}
private static double onHookDouble(Object artmethod, Object receiver, Object[] args) {
return (Double) HookManager.onHooked(artmethod, receiver, args);
}
private static char onHookChar(Object artmethod, Object receiver, Object[] args) {
return (Character) HookManager.onHooked(artmethod, receiver, args);
}
private static short onHookShort(Object artmethod, Object receiver, Object[] args) {
return (Short) HookManager.onHooked(artmethod, receiver, args);
}
private static float onHookFloat(Object artmethod, Object receiver, Object[] args) {
return (Float) HookManager.onHooked(artmethod, receiver, args);
}
private static Object onHookObject(Object artmethod, Object receiver, Object[] args) {
return HookManager.onHooked(artmethod, receiver, args);
}
private static boolean onHookBoolean(Object artmethod, Object receiver, Object[] args) {
return (Boolean) HookManager.onHooked(artmethod, receiver, args);
}
private static byte onHookByte(Object artmethod, Object receiver, Object[] args) {
return (Byte) HookManager.onHooked(artmethod, receiver, args);
}
而HookManager.onHooked返回的是Object类型,对于基本类型来说,我们只要对其拆箱就可以了。
0x04
结束
至此,关于android5.1上的hook就完成了,本文主要是为了解决前辈们做的hook demo遗留下来的一些问题,立志于对这一体系做一种补充,朋友们如果有其他具体问题想探讨可以加我qq313199058,感谢大家。