从来没接触过Android的HOOK,在看雪上找到了一篇HOOK 的文章,但是太复杂了,应该是本地环境问题,测试不成功。
后来搜到,看了几篇文章,进入官网查看了一下文档,简直是神器,HOOK过程简洁,总共就几个关键API,使用起来特别方便。
于是在blog记录一下。
一、手机端配置
1.手机必须Root,我这里使用的是模拟器。(安利一波Genymotion模拟器,太好用了)
2.下载cydiasubstrate APK。()
二、测试代码
使用。字少图多,我就不重述了。写下几个我遇到的错误:
1.新建安卓工程时不要默认添加的Activity。
2.Manifest文件application段的meta-data必须填写。
3.manifest节点需要填写package(官网没填写package,可能是eclipse版本问题,我装的eclipse默认填写了package,并且不可删除),主函数所在文件必须在这个package下,否则代码不会执行。
4.无论更新HOOK,还是卸载HOOK,最好都重启一下手机。(再次安利一波Genymotion模拟器,重启速度太快了)
三、效果图
四、附件
Manifest文件
Java文件
package com.example.cydiahookjava;import java.lang.reflect.Method;import com.saurik.substrate.MS;public class Main { static void initialize() { MS.hookClassLoad("android.content.res.Resources", new MS.ClassLoadHook() { public void classLoaded(Class resources) { Method getColor; try { getColor = resources.getMethod("getColor", Integer.TYPE); } catch (NoSuchMethodException e) { getColor = null; } if (getColor != null) { final MS.MethodPointer old = new MS.MethodPointer(); MS.hookMethod(resources, getColor, new MS.MethodHook() { public Object invoked(Object resources, Object... args) throws Throwable { //先调用原函数 int color = (Integer) old.invoke(resources, args); //再修改返回值 return color & ~0x0000ff00 | 0x00ff0000; } }, old); } } }); }}