使用Cydia Substrate Hook Android Java世界


從來沒接觸過Android的HOOK,在看雪上找到了一篇HOOK 的文章,但是太復雜了,應該是本地環境問題,測試不成功。

后來搜到Cydia Substrate,看了幾篇文章,進入官網查看了一下文檔,簡直是神器,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模擬器,重啟速度太快了)

三、效果圖

image

四、附件

Manifest文件

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.cydiahookjava"
    android:versionCode="1"
    android:versionName="1.0" >

    <application android:label="@string/app_name" >
        <meta-data
            android:name="com.saurik.substrate.main"
            android:value=".Main" />
    </application>

    <uses-permission android:name="cydia.permission.SUBSTRATE" />

</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);
                }
            }
        });
    }
}

測試工程下載地址


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM