下载地址:https://www.pan38.com/share.php?code=pvvmX 提取码:2267
其实这种技术主要就是借助xposed框架来实现陌陌APP的伪装改机,改机后陌陌就没办法检测到你的设备信息,因为通过插件我们吧虚拟的设备信息附加到了陌陌APP,这样我们每次注册都实现了一个新的设备信息,就可以避免陌陌多账号注册封号的问题。
包含4个文件:主Hook类、机型伪装逻辑、系统属性拦截器和Xposed入口文件,仅供学习用途以及参考使用。
package com.example.fakemodel;
import de.robv.android.xposed.IXposedHookLoadPackage;
import de.robv.android.xposed.XposedBridge;
import de.robv.android.xposed.callbacks.XC_LoadPackage;
public class MainHook implements IXposedHookLoadPackage {
private static final String TAG = "FakeModelXposed";
private static final String[] TARGET_PACKAGES = {
"com.android.settings",
"com.google.android.gms"
};
@Override
public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) {
if (!isTargetPackage(lpparam.packageName)) return;
XposedBridge.log(TAG + " Hooking: " + lpparam.packageName);
fakeBuildModel();
interceptSystemProperties();
}
private boolean isTargetPackage(String packageName) {
for (String pkg : TARGET_PACKAGES) {
if (pkg.equals(packageName)) return true;
}
return false;
}
}
com.example.fakemodel.utils;
import android.os.Build;
import de.robv.android.xposed.XposedHelpers;
public class ModelFaker {
private static final String FAKE_MANUFACTURER = "Xiaomi";
private static final String FAKE_MODEL = "Mi 11 Ultra";
private static final String FAKE_BRAND = "Xiaomi";
private static final String FAKE_PRODUCT = "venus";
private static final String FAKE_DEVICE = "venus";
private static final String FAKE_HARDWARE = "qcom";
private static final String FAKE_FINGERPRINT =
"Xiaomi/venus/venus:12/SKQ1.211006.001/V13.0.1.0.SKACNXM:user/release-keys";
public static void fakeBuildModel() {
try {
XposedHelpers.setStaticObjectField(Build.class, "MANUFACTURER", FAKE_MANUFACTURER);
XposedHelpers.setStaticObjectField(Build.class, "MODEL", FAKE_MODEL);
XposedHelpers.setStaticObjectField(Build.class, "BRAND", FAKE_BRAND);
XposedHelpers.setStaticObjectField(Build.class, "PRODUCT", FAKE_PRODUCT);
XposedHelpers.setStaticObjectField(Build.class, "DEVICE", FAKE_DEVICE);
XposedHelpers.setStaticObjectField(Build.class, "HARDWARE", FAKE_HARDWARE);
XposedHelpers.setStaticObjectField(Build.class, "FINGERPRINT", FAKE_FINGERPRINT);
} catch (Exception e) {
XposedBridge.log("ModelFaker error: " + e.getMessage());
}
}
}
com.example.fakemodel.hooks;
import de.robv.android.xposed.XC_MethodHook;
import de.robv.android.xposed.XposedHelpers;
import de.robv.android.xposed.callbacks.XC_LoadPackage;
public class SystemPropertiesHook {
private static final String[] FAKE_PROPS = {
"ro.product.model",
"ro.product.manufacturer",
"ro.product.brand"
};
public static void interceptSystemProperties() {
XposedHelpers.findAndHookMethod(
"android.os.SystemProperties",
null,
"get",
String.class,
new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) {
String key = (String) param.args[0];
for (String prop : FAKE_PROPS) {
if (prop.equals(key)) {
param.setResult(getFakeValue(key));
break;
}
}
}
});
}
private static String getFakeValue(String key) {
switch (key) {
case "ro.product.model": return "Mi 11 Ultra";
case "ro.product.manufacturer": return "Xiaomi";
case "ro.product.brand": return "Xiaomi";
default: return null;
}
}
}