unidbg icon indicating copy to clipboard operation
unidbg copied to clipboard

调用函数出现NPE,求大佬们帮忙看下具体是啥原因

Open 18463105800 opened this issue 3 years ago • 5 comments

调用gaode app的时候出现npe问题,用最新代码没发现具体是啥原因导致的。 image

代码样例: package com.github.unidbg.gaode;

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.memory.Memory;

import java.io.File;

public class TestGaodeCallInitMethod extends AbstractJni { private final AndroidEmulator emulator;

private final static String NameSpace = "/Users/zenglei11/Downloads";

private final Module module;

private final DvmClass Native;

private VM vm;

public TestGaodeCallInitMethod() {
    emulator = AndroidEmulatorBuilder
            .for32Bit()
            .setProcessName("com.autonavi.minimap")
            .build();

    File apkFile = new File(NameSpace + "/gaode7.8.apk");
    final Memory memory = emulator.getMemory();
    memory.setLibraryResolver(new AndroidResolver(23));


    vm = emulator.createDalvikVM(apkFile);
    vm.setJni(this);
    vm.setVerbose(true);
    String processName = emulator.getProcessName();
    emulator.showRegs();
    System.out.println("---" + processName);

    DalvikModule dm = vm.loadLibrary(new File(NameSpace + "/libserverkey-2.2.3.so"), false);
    dm.callJNI_OnLoad(emulator);

    module = dm.getModule();

    Native = vm.resolveClass("com/autonavi/server/aos/serverkey");

// System.out.println(Native.callStaticJniMethodObject(emulator, "getAosKey()Ljava/lang/String;"));

    final DvmObject<?> dvmObject = Native.newObject(null);

    String result = dvmObject.callJniMethodObject(emulator, "getAosKey()Ljava/lang/String;").toString();
    System.out.println(result);
}

@Override
public DvmObject<?> callStaticObjectMethodV(BaseVM vm, DvmClass dvmClass, String signature, VaList vaList) {
    System.out.println("++++" + signature);
    if ("com/autonavi/common/CC->getApplication()Landroid/app/Application;".equals(signature)) {
        return vm.resolveClass("android/app/Application").newObject(signature);
    }

    return super.callStaticObjectMethodV(vm, dvmClass, signature, vaList);
}


public static void main(String[] args) throws Exception {
    TestGaodeCallInitMethod test = new TestGaodeCallInitMethod();
}

}

apk文件和so文件在下面的腾讯链接中: 链接:https://share.weiyun.com/mbdqeWHA 密码:rdnibe

18463105800 avatar Nov 26 '21 12:11 18463105800

复现并无问题呀

Pr0214 avatar Nov 27 '21 12:11 Pr0214

复现并无问题呀

请问下你用的是哪个版本的unidbg代码呢?我用最新代码会有npe问题,用v0.9.5包也是这个问题,而且还会提升具体哪里,可以看下面截图: image

18463105800 avatar Nov 27 '21 13:11 18463105800

@Override
public int getStaticIntField(BaseVM vm, DvmClass dvmClass, String signature) {
    switch (signature){
        case "android/content/pm/PackageManager->GET_SIGNATURES:I":{
            return 64;
        }
    }
    return super.getStaticIntField(vm, dvmClass, signature);
}

正常补

Pr0214 avatar Nov 27 '21 13:11 Pr0214

@Override
public int getStaticIntField(BaseVM vm, DvmClass dvmClass, String signature) {
    switch (signature){
        case "android/content/pm/PackageManager->GET_SIGNATURES:I":{
            return 64;
        }
    }
    return super.getStaticIntField(vm, dvmClass, signature);
}

正常补

点赞,感谢大佬,可以了。

18463105800 avatar Nov 27 '21 13:11 18463105800

客气了,加油

Pr0214 avatar Nov 27 '21 13:11 Pr0214