zhkl0228 / unidbg

Allows you to emulate an Android native library, and an experimental iOS emulation
Apache License 2.0
3.64k stars 924 forks source link

如何补 KeyStore 的环境? #643

Closed HappyTsing closed 2 weeks ago

HappyTsing commented 2 weeks ago

类似注释这样补是不行的,因为没有安卓环境?

    @Override
    public DvmObject<?> callStaticObjectMethodV(BaseVM vm, DvmClass dvmClass, String signature, VaList vaList) {
        switch (signature) {
            case "java/security/KeyStore->getInstance(Ljava/lang/String;)Ljava/security/KeyStore;":
                // input = "AndroidCAStore"
                String input = vaList.getObjectArg(0).getValue().toString();
                // 报错:java.security.KeyStoreException: AndroidCAStore not found
//                try {
//                    // AndroidCAStore
//                    KeyStore keyStore = KeyStore.getInstance(input);
//                    return ProxyDvmObject.createObject(vm, keyStore);
//
//                } catch (KeyStoreException e) {
//                    throw new RuntimeException(e);
//                }
                return vm.resolveClass("java/security/KeyStore").newObject(null);

如果直接返回 null 的话,后面又要调用 aliases() 方法,如何构建 Enumeration?

    @Override
    public DvmObject<?> callObjectMethodV(BaseVM vm, DvmObject<?> dvmObject, String signature, VaList vaList) {
        switch (signature) {
            case "java/security/KeyStore->aliases()Ljava/util/Enumeration;":
//                KeyStore keyStore = (KeyStore) dvmObject.getValue();
//                try {
//                    return ProxyDvmObject.createObject(vm,keyStore.aliases());
//                } catch (KeyStoreException e) {
//                    throw new RuntimeException(e);
//                }
                return vm.resolveClass("java/util/Enumeration").newObject(null);  // 返回 null 会报错!!!!

        }
        return super.callObjectMethodV(vm, dvmObject, signature, vaList);
    }
HappyTsing commented 2 weeks ago

已解决