Xposed hook PackageInfo信息

400 阅读2分钟

Xposed hook PackageInfo信息

本篇文章主要讲下 利用Xposed hook packageinfo 数据, 更改versionCode,versionName等数据.

代码如下:

package com.zh.xpose;

import android.content.pm.PackageInfo;
import android.os.Build;
import android.util.Log;

import de.robv.android.xposed.XC_MethodHook;
import de.robv.android.xposed.XposedHelpers;
import de.robv.android.xposed.callbacks.XC_LoadPackage;

/**
 * @Author: zh
 * @Time: 23-12-7.
 * @Email:
 * @Describe:
 */
public class VersionHook {
    private static final String TAG = "VersionHook";

    public static void hook(XC_LoadPackage.LoadPackageParam loadPackageParam) {
        if (loadPackageParam == null) return;
        if ("com.tencent.wework".equals(loadPackageParam.packageName) || "com.zh.xpose".equals(loadPackageParam.packageName)) {
            Log.d(TAG, "hook: wework version start");
            XposedHelpers.findAndHookMethod("android.app.ApplicationPackageManager",loadPackageParam.classLoader, "getPackageInfo", String.class, int.class, new ExampleHook());
        }
    }

    public static class ExampleHook extends XC_MethodHook {
        @Override
        protected void afterHookedMethod(MethodHookParam param) throws Throwable {
            PackageInfo packageInfo = (PackageInfo) param.getResult();
            Log.d(TAG, "Package name2: " + packageInfo.packageName);
            Log.d(TAG, "Version name2: " + packageInfo.versionName);
            Log.d(TAG, "Version code2: " + packageInfo.versionCode);
            if (packageInfo.packageName.equals("com.zh.xposed")||"com.tencent.wework".equals(packageInfo.packageName)){
                packageInfo.versionName="1.0";
                packageInfo.versionCode=1;
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
                    packageInfo.setLongVersionCode(1l);
                }
                Log.d(TAG, "beforeHookedMethod: "+packageInfo.toString());
            }
            param.setResult(packageInfo);
        }
    }
}

com.zh.xposed 是我的测试demo, 增加测试代码:

  try {
            PackageInfo packageInfo = getPackageManager().getPackageInfo("com.tencent.wework", 0);
            int versionCode = packageInfo.versionCode;
            long longVersionCode = packageInfo.getLongVersionCode();
            Log.e("VersionHook", "onCreate: " + versionCode+" longVersionCode:"+longVersionCode);
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }

输出结果如下:

2023-10-06 14:20:11.743 30591-30591/? D/VersionHook: hook: wework version start
2023-10-06 14:20:11.894 30591-30591/? D/VersionHook: Package name2: com.tencent.wework
2023-10-06 14:20:11.894 30591-30591/? D/VersionHook: Version name2: 3.1.15
2023-10-06 14:20:11.894 30591-30591/? D/VersionHook: Version code2: 17569
2023-10-06 14:20:11.894 30591-30591/? D/VersionHook: afterHookedMethod: 1
2023-10-06 14:20:11.894 30591-30591/? E/VersionHook: onCreate: 1 longVersionCode:1

启动企业微信验证:

2023-10-06 14:21:07.579 31003-31003/com.tencent.wework D/VersionHook: Package name2: com.tencent.wework
2023-10-06 14:21:07.580 31003-31003/com.tencent.wework D/VersionHook: Version name2: 3.1.15
2023-10-06 14:21:07.580 31003-31003/com.tencent.wework D/VersionHook: Version code2: 17569
2023-10-06 14:21:07.580 31003-31003/com.tencent.wework D/VersionHook: afterHookedMethod: 1
2023-10-06 14:21:07.582 31003-31003/com.tencent.wework D/VersionHook: Package name2: com.tencent.wework
2023-10-06 14:21:07.582 31003-31003/com.tencent.wework D/VersionHook: Version name2: 3.1.15
2023-10-06 14:21:07.582 31003-31003/com.tencent.wework D/VersionHook: Version code2: 17569
2023-10-06 14:21:07.582 31003-31003/com.tencent.wework D/VersionHook: afterHookedMethod: 1