【原创】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,感谢大家。
...全文
83 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧