文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

unidbg-点评补设备环境

2023-08-17 18:21

关注
package com.jniunidbg.part7;import com.github.unidbg.AndroidEmulator;import com.github.unidbg.Module;import com.github.unidbg.linux.android.AndroidEmulatorBuilder;import com.github.unidbg.linux.android.AndroidResolver;import com.github.unidbg.linux.android.dvm.*;import com.github.unidbg.linux.android.dvm.api.SystemService;import com.github.unidbg.memory.Memory;import java.io.*;import java.text.SimpleDateFormat;import java.util.Date;import java.util.Locale;import java.util.UUID;public class DianPing extends AbstractJni {    private final AndroidEmulator emulator;    private final VM vm;    private final Module module;    private DvmObject SIUACollector;    public FileInputStream fileInputStream;    public InputStreamReader inputStreamReader;    public BufferedReader bufferedReader;    private SimpleDateFormat simpleDateFormat;    DianPing() {        // 创建模拟器实例        emulator = AndroidEmulatorBuilder.for32Bit().setRootDir(new File("target/rootfs")).build();        // 模拟器的内存操作接口        final Memory memory = emulator.getMemory();        // 设置系统类库解析        memory.setLibraryResolver(new AndroidResolver(23));        // 创建Android虚拟机        vm = emulator.createDalvikVM(new File("unidbg-android/src/test/resources/lession2/part7/dazhongdianping.apk"));        vm.setJni(this);        vm.setVerbose(true);        DalvikModule dm = vm.loadLibrary("mtguard", true);        // 加载好的 libhookinunidbg.so对应为一个模块        module = dm.getModule();        // 执行JNIOnLoad(如果有的话)        dm.callJNI_OnLoad(emulator);        SIUACollector = vm.resolveClass("com/meituan/android/common/mtguard/NBridge$SIUACollector").newObject(null);    }    public static void main(String[] args) {        DianPing dp = new DianPing();        System.out.println("call getHWProperty");        dp.getHWProperty();        System.out.println("call getHWStatus");        dp.getHWStatus();        System.out.println("call getHWEquipmentInfo");        dp.getHWEquipmentInfo();        System.out.println("call getExternalEquipmentInfo");        dp.getExternalEquipmentInfo();        System.out.println("call getUserAction");        dp.getUserAction();        System.out.println("call getEnvironmentInfo");        dp.getEnvironmentInfo();        System.out.println("call getEnvironmentInfoExtra");        dp.getEnvironmentInfoExtra();        System.out.println("call getPlatformInfo");        dp.getPlatformInfo();        System.out.println("call getLocationInfo");        dp.getLocationInfo();        System.out.println("call startCollection");        String result = dp.startCollection();        System.out.println(result);    }    public String getHWProperty(){        String ret = (String) SIUACollector.callJniMethodObject(emulator, "getHWProperty()Ljava/lang/String;").getValue();        System.out.println("getHWProperty:"+ret);        return ret;    }    public String getHWStatus(){        String ret = (String) SIUACollector.callJniMethodObject(emulator, "getHWStatus()Ljava/lang/String;").getValue();        System.out.println("getHWStatus:"+ret);        return ret;    }    public String getHWEquipmentInfo(){        String ret = (String) SIUACollector.callJniMethodObject(emulator, "getHWEquipmentInfo()Ljava/lang/String;").getValue();        System.out.println("getHWEquipmentInfo:"+ret);        return ret;    }    public String  getExternalEquipmentInfo(){        String ret = (String) SIUACollector.callJniMethodObject(emulator, "getExternalEquipmentInfo()Ljava/lang/String;").getValue();        System.out.println("getExternalEquipmentInfo:"+ret);        return ret;    }    public String getUserAction(){        String ret = (String) SIUACollector.callJniMethodObject(emulator, "getUserAction()Ljava/lang/String;").getValue();        System.out.println("getUserAction:"+ret);        return ret;    }    public String getEnvironmentInfo(){        String ret = (String) SIUACollector.callJniMethodObject(emulator, "getEnvironmentInfo()Ljava/lang/String;").getValue();        System.out.println("getEnvironmentInfo:"+ret);        emulator.set("getEnvironmentInfo", ret);        return ret;    }    public String getEnvironmentInfoExtra(){        String ret = (String) SIUACollector.callJniMethodObject(emulator, "getEnvironmentInfoExtra()Ljava/lang/String;").getValue();        System.out.println("getEnvironmentInfoExtra:"+ret);        return ret;    }    public String getPlatformInfo(){        String ret = (String) SIUACollector.callJniMethodObject(emulator, "getPlatformInfo()Ljava/lang/String;").getValue();        System.out.println("getPlatformInfo:"+ret);        return ret;    }    public String getLocationInfo(){        String ret = (String) SIUACollector.callJniMethodObject(emulator, "getLocationInfo()Ljava/lang/String;").getValue();        System.out.println("getLocationInfo:"+ret);        return ret;    }    public String startCollection(){        String ret = (String) SIUACollector.callJniMethodObject(emulator, "startCollection()Ljava/lang/String;").getValue();        System.out.println("startCollection:"+ret);        return ret;    }    @Override    public DvmObject getObjectField(BaseVM vm, DvmObject dvmObject, String signature) {        switch (signature){            case "com/meituan/android/common/mtguard/NBridge$SIUACollector->mContext:Landroid/content/Context;":{                return vm.resolveClass("android/content/Context").newObject(null);            }            case "android/content/res/Configuration->locale:Ljava/util/Locale;":{                return vm.resolveClass("java/util/Locale").newObject(Locale.getDefault());            }            case "com/meituan/android/common/mtguard/NBridge$SIUACollector->batteryHelper:Lcom/meituan/android/common/dfingerprint/collection/utils/BatteryHelper;":{                return vm.resolveClass("com/meituan/android/common/dfingerprint/collection/utils/BatteryHelper").newObject(null);            }        }        return super.getObjectField(vm, dvmObject, signature);    }    @Override    public DvmObject allocObject(BaseVM vm, DvmClass dvmClass, String signature) {        switch (signature){            case "java/lang/StringBuilder->allocObject":{                return dvmClass.newObject(new StringBuilder());            }            case "java/io/File->allocObject":{                return dvmClass.newObject(null);            }            case "java/io/BufferedReader->allocObject":{                return dvmClass.newObject(null);            }            case "java/io/InputStreamReader->allocObject":{                return dvmClass.newObject(null);            }            case "java/io/FileInputStream->allocObject":{                return dvmClass.newObject(null);            }            case "java/text/SimpleDateFormat->allocObject":{                return dvmClass.newObject(null);            }            case "java/util/Date->allocObject":{                return dvmClass.newObject(null);            }        }        return super.allocObject(vm, dvmClass, signature);    }    @Override    public void callVoidMethodV(BaseVM vm, DvmObject dvmObject, String signature, VaList vaList) {        switch (signature){            case "java/lang/StringBuilder->()V":                return;            case "java/io/File->(Ljava/lang/String;)V":{                String filePath = vaList.getObjectArg(0).getValue().toString();                System.out.println("File init:"+filePath);                emulator.set(dvmObject.toString(), filePath);                return;            }            case "java/io/FileInputStream->(Ljava/lang/String;)V":{                String input = vaList.getObjectArg(0).getValue().toString();                if(input.equals("/proc/cpuinfo")){                    try {                        fileInputStream = new FileInputStream("unidbg-android/src/test/resources/lession2/part7/cpuinfo");                    } catch (FileNotFoundException e) {                        e.printStackTrace();                    }                    return;                }                System.out.println("FileInputStream init:"+input);            }            case "java/io/InputStreamReader->(Ljava/io/InputStream;)V":{                inputStreamReader = new InputStreamReader(fileInputStream);                return;            }            case "java/io/BufferedReader->(Ljava/io/Reader;)V":{                bufferedReader = new BufferedReader(inputStreamReader);                return;            }            case "java/io/BufferedReader->close()V":{                try {                    bufferedReader.close();                } catch (IOException e) {                    e.printStackTrace();                }                return;            }            case "com/meituan/android/common/mtguard/NBridge$SIUACollector->safeClose(Ljava/io/Closeable;)V":{                return;            }            case "java/text/SimpleDateFormat->(Ljava/lang/String;Ljava/util/Locale;)V":{                String str = vaList.getObjectArg(0).getValue().toString();                Locale locale = (Locale) vaList.getObjectArg(1).getValue();                simpleDateFormat = new SimpleDateFormat(str, locale);                return;            }            case "java/util/Date->()V":{                return;            }        }        super.callVoidMethodV(vm, dvmObject, signature, vaList);    }    @Override    public DvmObject getStaticObjectField(BaseVM vm, DvmClass dvmClass, String signature) {        switch (signature){            // 主板            case "android/os/Build->BOARD:Ljava/lang/String;":{                return new StringObject(vm, "sdm845");            }            case "android/os/Build->MANUFACTURER:Ljava/lang/String;":{                return new StringObject(vm, "Xiaomi");            }            // 品牌            case "android/os/Build->BRAND:Ljava/lang/String;":{                return new StringObject(vm, "Xiaomi");            }            case "android/os/Build->MODEL:Ljava/lang/String;":{                return new StringObject(vm, "MIX 2S");            }            case "android/os/Build->PRODUCT:Ljava/lang/String;":{                return new StringObject(vm, "polaris");            }            case "android/os/Build->HARDWARE:Ljava/lang/String;":{                return new StringObject(vm, "qcom");            }            case "android/os/Build->DEVICE:Ljava/lang/String;":{                return new StringObject(vm, "polaris");            }            case "android/os/Build->HOST:Ljava/lang/String;":{                return new StringObject(vm, "c3-miui-ota-bd134.bj");            }            case "android/os/Build->ID:Ljava/lang/String;":{                return new StringObject(vm, "QKQ1.190828.002");            }            case "android/os/Build$VERSION->RELEASE:Ljava/lang/String;":{                return new StringObject(vm, "10");            }            case "android/os/Build->TAGS:Ljava/lang/String;":{                return new StringObject(vm, "release-keys");            }            case "android/os/Build->FINGERPRINT:Ljava/lang/String;":{                return new StringObject(vm, "Xiaomi/polaris/polaris:10/QKQ1.190828.002/V12.0.2.0.QDGCNXM:user/release-keys");            }            case "android/os/Build->TYPE:Ljava/lang/String;":{                return new StringObject(vm, "user");            }            case "android/os/Build$VERSION->SDK:Ljava/lang/String;":{                return new StringObject(vm, "29");            }        }        return super.getStaticObjectField(vm, dvmClass, signature);    }    @Override    public DvmObject callObjectMethodV(BaseVM vm, DvmObject dvmObject, String signature, VaList vaList) {        switch (signature){            // copy from jadx            case "com/meituan/android/common/mtguard/NBridge$SIUACollector->checkBuildAttribute(Ljava/lang/String;)Ljava/lang/String;":{                String str = vaList.getObjectArg(0).getValue().toString();                return new StringObject(vm, (str.isEmpty() || str.equalsIgnoreCase("unknown")) ? CommonConstant.Symbol.MINUS : str);            }            case "java/lang/StringBuilder->append(Ljava/lang/String;)Ljava/lang/StringBuilder;":{                StringBuilder stringBuilder = (StringBuilder) dvmObject.getValue();                String arg1 = vaList.getObjectArg(0).getValue().toString();                return vm.resolveClass("java/lang/StringBuilder").newObject(stringBuilder.append(arg1));            }            case "com/meituan/android/common/mtguard/NBridge$SIUACollector->getSysProp(Ljava/lang/String;)Ljava/lang/String;":{                String prop = vaList.getObjectArg(0).getValue().toString();                System.out.println("getSysProp:"+prop);                // abi                if(prop.equals("ro.product.cpu.abi")){                    return new StringObject(vm, "arm64-v8a");                }                if(prop.equals("ro.product.cpu.abi2")){                    return new StringObject(vm, "");                }                if(prop.equals("ro.build.product")){                    return new StringObject(vm, "polaris");                }                if(prop.equals("ro.build.description")){                    return new StringObject(vm, "polaris-user 10 QKQ1.190828.002 V12.0.2.0.QDGCNXM release-keys");                }                // root                if(prop.equals("ro.secure")){                    return new StringObject(vm, "1");                }                // debug                if(prop.equals("ro.debuggable")){                    return new StringObject(vm, "1");                }                // 查看当前手机USB功能角色                if(prop.equals("persist.sys.usb.config")){                    return new StringObject(vm, "");                }                if(prop.equals("sys.usb.config")){                    return new StringObject(vm, "adb");                }                if(prop.equals("sys.usb.state")){                    return new StringObject(vm, "adb");                }                // 基带                if(prop.equals("gsm.version.baseband")){                    return new StringObject(vm, "4.0.c2.6-00335-0914_2350_3c8fca6,4.0.c2.6-00335-0914_2350_3c8fca6");                }                if(prop.equals("gsm.version.ril-impl")){                    return new StringObject(vm, "Qualcomm RIL 1.0");                }                if(prop.equals("gsm.sim.state")){                    return new StringObject(vm, "ABSENT,ABSENT");                }                if(prop.equals("gsm.sim.state.2")){                    return new StringObject(vm, "");                }                if(prop.equals("wifi.interface")){                    return new StringObject(vm, "wlan0");                }            }            case "android/content/Context->getResources()Landroid/content/res/Resources;":{                return vm.resolveClass("android/content/res/Resources").newObject(null);            }            case "android/content/res/Resources->getConfiguration()Landroid/content/res/Configuration;":{                return vm.resolveClass("android/content/res/Configuration").newObject(null);            }            case "java/lang/StringBuilder->toString()Ljava/lang/String;":{                StringBuilder stringBuilder = (StringBuilder) dvmObject.getValue();                return new StringObject(vm, stringBuilder.toString());            }            case "java/lang/StringBuilder->append(I)Ljava/lang/StringBuilder;":{                StringBuilder stringBuilder = (StringBuilder) dvmObject.getValue();                int i = vaList.getIntArg(0);                return vm.resolveClass("java/lang/StringBuilder").newObject(stringBuilder.append(i));            }            case "com/meituan/android/common/mtguard/NBridge$SIUACollector->getCpuInfoType()Ljava/lang/String;":{                return new StringObject(vm, "arm");            }            case "java/io/BufferedReader->readLine()Ljava/lang/String;":{                String oneLine = null;                try {                    oneLine = bufferedReader.readLine();                } catch (IOException e) {                    e.printStackTrace();                }                System.out.println("bufferread readLine:"+oneLine);                if(oneLine==null){                    return null;                }                return new StringObject(vm, oneLine);            }            case "java/lang/String->substring(I)Ljava/lang/String;":{                String str = dvmObject.getValue().toString();                return new StringObject(vm, str.substring(vaList.getIntArg(0)));            }            case "android/content/Context->getApplicationContext()Landroid/content/Context;":{                return vm.resolveClass("android/content/Context").newObject(null);            }            case "android/content/Context->getSystemService(Ljava/lang/String;)Ljava/lang/Object;":{                StringObject serviceName = vaList.getObjectArg(0);                assert serviceName != null;                if(serviceName.getValue().equals("window")){                    return vm.resolveClass("android/view/WindowManager").newObject(null);                }                return new SystemService(vm, serviceName.getValue());            }            case "android/hardware/SensorManager->getDefaultSensor(I)Landroid/hardware/Sensor;":{                return vm.resolveClass("android/hardware/Sensor").newObject(vaList.getIntArg(0));            }            case "android/hardware/Sensor->getName()Ljava/lang/String;":{                int tag = (int) dvmObject.getValue();                System.out.println(tag);                if(tag==1){                    return new StringObject(vm, "ICM20690");                }                if(tag==9){                    return new StringObject(vm, "gravity  Non-wakeup");                }            }            case "android/hardware/Sensor->getVendor()Ljava/lang/String;":{                int tag = (int) dvmObject.getValue();                if(tag==1){                    return new StringObject(vm, "qualcomm");                }else if(tag==9){                    return new StringObject(vm, "qualcomm");                }            }            case "android/view/WindowManager->getDefaultDisplay()Landroid/view/Display;":{                return vm.resolveClass("android/view/Display").newObject(signature);            }            case "java/lang/StringBuilder->append(C)Ljava/lang/StringBuilder;":{                StringBuilder stringBuilder = (StringBuilder) dvmObject.getValue();                char c = (char) vaList.getIntArg(0);                return vm.resolveClass("java/lang/StringBuilder").newObject(stringBuilder.append(c));            }            // 建议frida hook            case "com/meituan/android/common/mtguard/NBridge$SIUACollector->getTotalInternalMemorySize()Ljava/lang/String;":{                return new StringObject(vm, "21379328");            }            case "com/meituan/android/common/mtguard/NBridge$SIUACollector->getTotalExternalMemorySize()Ljava/lang/String;":{                return new StringObject(vm, "124345246");            }            case "android/telephony/TelephonyManager->getSimOperator()Ljava/lang/String;":{                return new StringObject(vm, "46009");            }            case "com/meituan/android/common/mtguard/NBridge$SIUACollector->getAccessSubType()Ljava/lang/String;":{                return new StringObject(vm, "wifi");            }            case "java/util/UUID->toString()Ljava/lang/String;":{                UUID uuid = (UUID) dvmObject.getValue();                return new StringObject(vm, uuid.toString());            }            // 建议frida hook 或者 jnitrace查看            case "com/meituan/android/common/mtguard/NBridge$SIUACollector->getDataActivity(Landroid/content/Context;)Ljava/lang/String;":{                return new StringObject(vm, "");            }            case "com/meituan/android/common/mtguard/NBridge$SIUACollector->getEnvironmentInfo()Ljava/lang/String;":{                return new StringObject(vm, (String) emulator.get("getEnvironmentInfo"));            }            case "com/meituan/android/common/mtguard/NBridge$SIUACollector->isVPN()Ljava/lang/String;":{                return new StringObject(vm, "0");            }            case "com/meituan/android/common/mtguard/NBridge$SIUACollector->brightness(Landroid/content/Context;)Ljava/lang/String;":{                return new StringObject(vm, "22");            }            case "com/meituan/android/common/mtguard/NBridge$SIUACollector->systemVolume(Landroid/content/Context;)Ljava/lang/String;":{                return new StringObject(vm, "13");            }            case "java/text/SimpleDateFormat->format(Ljava/util/Date;)Ljava/lang/String;":{                return new StringObject(vm, simpleDateFormat.format(new Date()));            }            case "com/meituan/android/common/mtguard/NBridge$SIUACollector->appCache(Landroid/content/Context;)Ljava/lang/String;":{                // 计算 APP 缓存目录大小                return new StringObject(vm, "149045277");            }            case "com/meituan/android/common/mtguard/NBridge$SIUACollector->availableSystem()Ljava/lang/String;":                return new StringObject(vm, "unknown");            case "com/meituan/android/common/mtguard/NBridge$SIUACollector->totalMemory()Ljava/lang/String;":                // 获取存储                return new StringObject(vm, "5905510400");            case "com/meituan/android/common/mtguard/NBridge$SIUACollector->getFirstLaunchTime(Landroid/content/Context;)Ljava/lang/String;":{                // 首次安装打开时间                return new StringObject(vm, "1637665296460");            }            case "android/net/wifi/WifiManager->getConnectionInfo()Landroid/net/wifi/WifiInfo;":{                return vm.resolveClass("android/net/wifi/WifiInfo").newObject(signature);            }            case "android/net/wifi/WifiInfo->getSSID()Ljava/lang/String;":                // 获取wifi名                return new StringObject(vm, "CU_TckX");            case "android/telephony/TelephonyManager->getNetworkOperator()Ljava/lang/String;":                return new StringObject(vm, "");            case "java/lang/StringBuilder->append(Ljava/lang/CharSequence;II)Ljava/lang/StringBuilder;":{                StringBuilder stringBuilder = (StringBuilder) dvmObject.getValue();                CharSequence charSequence = (CharSequence) vaList.getObjectArg(0).getValue();                int arg2 = vaList.getIntArg(1);                int arg3 = vaList.getIntArg(2);                return vm.resolveClass("java/lang/StringBuilder").newObject(stringBuilder.append(charSequence, arg2, arg3));            }            // 建议认真补            case "android/net/wifi/WifiInfo->getBSSID()Ljava/lang/String;":{                return new StringObject(vm, "");            }        }        return super.callObjectMethodV(vm, dvmObject, signature, vaList);    }    @Override    public int getStaticIntField(BaseVM vm, DvmClass dvmClass, String signature) {        switch (signature){            case "android/os/Build$VERSION->SDK_INT:I":{                return 29;            }        }        return super.getStaticIntField(vm, dvmClass, signature);    }    @Override    public DvmObject callStaticObjectMethodV(BaseVM vm, DvmClass dvmClass, String signature, VaList vaList) {        switch (signature){            case "java/lang/Integer->toString(I)Ljava/lang/String;":{                int i = vaList.getIntArg(0);                System.out.println("java/lang/Integer->toString:"+i);                return new StringObject(vm, Integer.toString(i));            }            case "java/util/UUID->randomUUID()Ljava/util/UUID;":{                return dvmClass.newObject(UUID.randomUUID());            }            case "java/lang/String->valueOf(I)Ljava/lang/String;":{                return new StringObject(vm, String.valueOf(vaList.getIntArg(0)));            }        }        return super.callStaticObjectMethodV(vm, dvmClass, signature, vaList);    }    @Override    public boolean callBooleanMethodV(BaseVM vm, DvmObject dvmObject, String signature, VaList vaList) {        switch (signature){            // 检测是否有某功能            case "android/content/pm/PackageManager->hasSystemFeature(Ljava/lang/String;)Z":{                String feature = vaList.getObjectArg(0).getValue().toString();                // 加速度传感器                if(feature.equals("android.hardware.sensor.accelerometer")){                    return true;                }                // 陀螺仪                if(feature.equals("android.hardware.sensor.gyroscope")){                    return true;                }                // wifi                if(feature.equals("android.hardware.wifi")){                    return true;                }                if(feature.equals("android.hardware.bluetooth")){                    return true;                }                if(feature.equals("android.hardware.bluetooth_le")){                    return true;                }                if(feature.equals("android.hardware.telephony")){                    return true;                }                if(feature.equals("android.hardware.usb.accessory")){                    return true;                }                if(feature.equals("android.hardware.location.gps")){                    return true;                }                if(feature.equals("android.hardware.nfc")){                    return true;                }                System.out.println("hasSystemFeature:"+feature);            }            // 根据真实情况返回,我这儿乱补的            case "java/io/File->exists()Z":{                String tag = emulator.get(dvmObject.toString());                if(tag.equals("/sys/class/power_supply/battery/voltage_now")){                    return true;                }                if(tag.equals("/sys/class/power_supply/battery/temp")){                    return false;                }            }            case "java/lang/String->startsWith(Ljava/lang/String;)Z":{                String str = dvmObject.getValue().toString();                String arg =vaList.getObjectArg(0).getValue().toString();                System.out.println("startswith");                System.out.println(str);                System.out.println(arg);                return str.startsWith(arg);            }            case "com/meituan/android/common/mtguard/NBridge$SIUACollector->isPermissionGranted(Ljava/lang/String;Landroid/content/Context;)Z":{                String permission = vaList.getObjectArg(0).getValue().toString();                System.out.println(permission);                if(permission.equals("android.permission.READ_PHONE_STATE")){                    return true;                }                if(permission.equals("android.permission.ACCESS_WIFI_STATE")){                    return true;                }            }            case "com/meituan/android/common/mtguard/NBridge$SIUACollector->getBatteryInfo()Z":{                return true;            }            case "com/meituan/android/common/mtguard/NBridge$SIUACollector->isAccessibilityEnable()Z":{                return false;            }            case "java/lang/String->equalsIgnoreCase(Ljava/lang/String;)Z":{                String str = (String) dvmObject.getValue();                String arg = vaList.getObjectArg(0).getValue().toString();                return str.equalsIgnoreCase(arg);            }            case "java/lang/String->equals(Ljava/lang/Object;)Z":{                String str = (String) dvmObject.getValue();                Object object = vaList.getObjectArg(0).getValue();                return str.equals(object);            }        }        return super.callBooleanMethodV(vm, dvmObject, signature, vaList);    }    @Override    public int callIntMethodV(BaseVM vm, DvmObject dvmObject, String signature, VaList vaList) {        switch (signature){            case "com/meituan/android/common/mtguard/NBridge$SIUACollector->boolean2Integer(Z)I":{                return vaList.getIntArg(0);            }            case "java/lang/String->compareToIgnoreCase(Ljava/lang/String;)I":{                String str = dvmObject.getValue().toString();                String arg = vaList.getObjectArg(0).getValue().toString();                System.out.println("compareToIgnoreCase");                System.out.println(str);                System.out.println(arg);                return str.compareToIgnoreCase(arg);            }            case "java/lang/String->lastIndexOf(I)I":{                String str = dvmObject.getValue().toString();                return str.lastIndexOf(vaList.getIntArg(0));            }            case "android/view/Display->getHeight()I":{                return 2030;            }            case "android/view/Display->getWidth()I":{                return 1080;            }            case "com/meituan/android/common/mtguard/NBridge$SIUACollector->uiAutomatorClickCount()I":{                return 0;            }            case "com/meituan/android/common/mtguard/NBridge$SIUACollector->androidAppCnt(Landroid/content/Context;)I":{                return 0;            }            case "java/lang/String->length()I":{                String str = dvmObject.getValue().toString();                return str.length();            }            case "android/net/wifi/WifiInfo->getRssi()I":{                return 0;            }        }        return super.callIntMethodV(vm, dvmObject, signature, vaList);    }    @Override    public boolean callStaticBooleanMethodV(BaseVM vm, DvmClass dvmClass, String signature, VaList vaList) {        switch (signature){            case "android/text/TextUtils->isEmpty(Ljava/lang/CharSequence;)Z":{                String charSequence = (String) vaList.getObjectArg(0).getValue();                System.out.println("debug");//                return charSequence.isEmpty();                return charSequence.isEmpty();            }        }        return super.callStaticBooleanMethodV(vm, dvmClass, signature, vaList);    }    @Override    public int getIntField(BaseVM vm, DvmObject dvmObject, String signature) {        switch (signature){            case "com/meituan/android/common/mtguard/NBridge$SIUACollector->level:I":{                return 93;            }            case "com/meituan/android/common/mtguard/NBridge$SIUACollector->scale:I":{                return 100;            }            case "com/meituan/android/common/mtguard/NBridge$SIUACollector->status:I":{                return 3;            }        }        return super.getIntField(vm, dvmObject, signature);    }    @Override    public boolean getBooleanField(BaseVM vm, DvmObject dvmObject, String signature) {        switch (signature){            case "com/meituan/android/common/mtguard/NBridge$SIUACollector->plugged:Z":{                return false;            }        }        return super.getBooleanField(vm, dvmObject, signature);    }}

来源地址:https://blog.csdn.net/weixin_38927522/article/details/128099362

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯