使用Cydia Substrate实现Android Hook
使用Cydia Substrate来实现Android hook,文章参考官方教程,有修改。
1、安装Cydia Substrate框架apk,手机必须root。
2、代码编写;
在manifest文件中声明如下:
<application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <meta-data android:name="com.saurik.substrate.main" android:value=".Main" /> </application> <uses-permission android:name="cydia.permission.SUBSTRATE" />
Main类的代码如下:
public class Main { public static void initialize(){ hookSaygoer() ; } static void hookResColor() { MS.hookClassLoad("android.content.res.Resources", new MS.ClassLoadHook() { @Override public void classLoaded(Class<?> resources) { Method getColor = null; try { getColor = resources.getDeclaredMethod("getColor",Integer.TYPE); } catch (NoSuchMethodException e) { e.printStackTrace(); } if (getColor != null) { MS.hookMethod(resources,getColor, new MS.MethodAlteration<Resources, Integer>() { public Integer invoked(Resources resources, Object... args) throws Throwable { return invoke(resources, args)& ~0x0000ff00 | 0x00ff0000; } }); } } }); } }
其中initialize()相当于入口函数,代码实现的效果图如下:
个人感觉Cydia Substrate是基于类加载,方法调用,关键还是依赖于Java反射,Android系统源码可读的当然可以进行修改,如果是第三方程序进行了代码混淆或者加密的,那么Java反射失效,此框架还有用吗?