使用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反射失效,此框架还有用吗?

原文地址:https://www.cnblogs.com/alexthecoder/p/4203217.html