SQLiteDatabaseHook.java 源代码


package com.x8zs.morgoo.droidplugin.hook.xhook;

import android.content.Context;
import android.os.Environment;
import android.text.TextUtils;
import com.x8zs.morgoo.droidplugin.core.PluginDirHelper;
import com.x8zs.morgoo.droidplugin.hook.BaseHookHandle;
import com.x8zs.morgoo.droidplugin.hook.Hook;
import java.io.File;

public class SQLiteDatabaseHook extends Hook {
    private static final String TAG = "SQLiteDatabaseHook";
    private final String mDataDir;
    private final String mHostDataDir;
    private final String mHostPkg;

    public SQLiteDatabaseHook(Context context) {
        super(context);
        this.mDataDir = new File(Environment.getDataDirectory(), "data/").getPath();
        this.mHostDataDir = PluginDirHelper.getContextDataDir(context);
        this.mHostPkg = context.getPackageName();
    }

    private String tryReplacePath(String str) {
        if (str != null && str.length() > this.mDataDir.length() && !TextUtils.equals(str, this.mDataDir) && str.startsWith(this.mDataDir) && !str.startsWith(this.mHostDataDir) && !TextUtils.equals(str, this.mHostDataDir)) {
            String substring = str.substring(this.mDataDir.length() + 1);
            int indexOf = substring.indexOf("/");
            if (indexOf > 0) {
                substring = substring.substring(0, indexOf);
            }
            if (!TextUtils.equals(substring, this.mHostPkg)) {
                return str.replace(substring, String.format("%s/Plugin/%s/data/%s", this.mHostPkg, substring, substring));
            }
            return null;
        }
        return null;
    }

    @Override
    protected BaseHookHandle createHookHandle() {
        return null;
    }

    @Override
    public void onInstall(ClassLoader classLoader) {
    }

    protected void replace(Object[] objArr, int i6) {
        String tryReplacePath;
        if (objArr != null && objArr.length > i6) {
            Object obj = objArr[i6];
            if ((obj instanceof String) && (tryReplacePath = tryReplacePath((String) obj)) != null) {
                objArr[i6] = tryReplacePath;
            }
        }
    }
}