unidbg
unidbg copied to clipboard
最新代码:java.lang.ClassNotFoundException: android.content.Context
下载最新的unidbg代码,由于so里面调用了java类,所以自行创建了对应的java类,然后加上:
vm.setDvmClassFactory(new ProxyClassFactory());
出现如下错误:
[20:04:31 497] WARN [com.github.unidbg.linux.android.dvm.jni.ProxyJni] (ProxyJni:296) - callObjectMethod java.lang.ClassNotFoundException: android.content.Context at java.net.URLClassLoader.findClass(URLClassLoader.java:382) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) at com.github.unidbg.linux.android.dvm.jni.ProxyClassLoader.loadClass(ProxyClassLoader.java:23) at com.github.unidbg.linux.android.dvm.jni.ProxyJni.callObjectMethod(ProxyJni.java:287) at com.github.unidbg.linux.android.dvm.DvmMethod.callObjectMethod(DvmMethod.java:70) at com.github.unidbg.linux.android.dvm.DalvikVM$20.handle(DalvikVM.java:372) at com.github.unidbg.linux.ARM32SyscallHandler.hook(ARM32SyscallHandler.java:103) at com.github.unidbg.arm.backend.UnicornBackend$6.hook(UnicornBackend.java:271) at unicorn.Unicorn$NewHook.onInterrupt(Unicorn.java:128) at unicorn.Unicorn.emu_start(Native Method) at com.github.unidbg.arm.backend.UnicornBackend.emu_start(UnicornBackend.java:296) at com.github.unidbg.AbstractEmulator.emulate(AbstractEmulator.java:382) at com.github.unidbg.AbstractEmulator.eFunc(AbstractEmulator.java:471) at com.github.unidbg.arm.AbstractARMEmulator.eFunc(AbstractARMEmulator.java:215) at com.github.unidbg.Module.emulateFunction(Module.java:154) at com.github.unidbg.linux.android.dvm.DvmObject.callJniMethod(DvmObject.java:128) at com.github.unidbg.linux.android.dvm.DvmClass.callStaticJniMethodObject(DvmClass.java:277) at com.bytedance.frameworks.core.encrypt.Candy.getCandyDataWithKeyForJava(Candy.java:92) at com.bytedance.frameworks.core.encrypt.Candy.main(Candy.java:108) [20:04:31 500] WARN [com.github.unidbg.linux.ARM32SyscallHandler] (ARM32SyscallHandler:446) - handleInterrupt intno=2, NR=-1073744072, svcNumber=0x113, PC=unidbg@0xfffe01c4, syscall=null java.lang.UnsupportedOperationException: android/content/Context->getPackageManager()Landroid/content/pm/PackageManager; at com.github.unidbg.linux.android.dvm.JniFunction.callObjectMethod(JniFunction.java:192) at com.github.unidbg.linux.android.dvm.jni.ProxyJni.callObjectMethod(ProxyJni.java:298) at com.github.unidbg.linux.android.dvm.DvmMethod.callObjectMethod(DvmMethod.java:70) at com.github.unidbg.linux.android.dvm.DalvikVM$20.handle(DalvikVM.java:372) at com.github.unidbg.linux.ARM32SyscallHandler.hook(ARM32SyscallHandler.java:103) at com.github.unidbg.arm.backend.UnicornBackend$6.hook(UnicornBackend.java:271) at unicorn.Unicorn$NewHook.onInterrupt(Unicorn.java:128) at unicorn.Unicorn.emu_start(Native Method) at com.github.unidbg.arm.backend.UnicornBackend.emu_start(UnicornBackend.java:296) at com.github.unidbg.AbstractEmulator.emulate(AbstractEmulator.java:382) at com.github.unidbg.AbstractEmulator.eFunc(AbstractEmulator.java:471) at com.github.unidbg.arm.AbstractARMEmulator.eFunc(AbstractARMEmulator.java:215) at com.github.unidbg.Module.emulateFunction(Module.java:154) at com.github.unidbg.linux.android.dvm.DvmObject.callJniMethod(DvmObject.java:128) at com.github.unidbg.linux.android.dvm.DvmClass.callStaticJniMethodObject(DvmClass.java:277)
请问如何解决这个问题,有点茫然
@zhkl0228
使用ProxyClassFactory会自动反射调用java类,提示不存在的创建同样包名的类
使用ProxyClassFactory会自动反射调用java类,提示不存在的创建同样包名的类 这个我看其他的issue提到过,但是android.content.Context自己创建不知道该怎么写,如果是将安卓Context类源码全部复制过来好像也不太现实...
@zhkl0228 可否提供一个自己创建android.content.Context的例子
创建最简单的空白类,后续运行缺啥补啥
On Tue, Dec 1, 2020 at 02:47 nantian-dog [email protected] wrote:
@zhkl0228 https://github.com/zhkl0228 可否提供一个自己创建android.content.Context的例子
— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/zhkl0228/unidbg/issues/211#issuecomment-735971670, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAKSR76ONQV665NMCOIID4LSSPSFFANCNFSM4UHPT4QA .
@zhkl0228 我创建了android.content.Context里面有一个函数是getPackageManager,所以我又创建了android.content.pm.PackageManager空白类,代码如下: `package android.content;
import android.content.pm.PackageManager;
public class Context {
public Object getPackageManager(){
return new PackageManager();
}
}
package android.content.pm;
public class PackageManager {
}
现在是报了这么一个错:
[22:02:19 747] WARN [com.github.unidbg.linux.ARM32SyscallHandler] (ARM32SyscallHandler:446) - handleInterrupt intno=2, NR=-1073744072, svcNumber=0x113, PC=unidbg@0xfffe01c4, syscall=null
java.lang.IllegalStateException: obj is null: android.content.Context@55e4af
at com.github.unidbg.linux.android.dvm.jni.ProxyJni.callObjectMethod(ProxyJni.java:291)
at com.github.unidbg.linux.android.dvm.DvmMethod.callObjectMethod(DvmMethod.java:70)
at com.github.unidbg.linux.android.dvm.DalvikVM$20.handle(DalvikVM.java:372)
at com.github.unidbg.linux.ARM32SyscallHandler.hook(ARM32SyscallHandler.java:103)
at com.github.unidbg.arm.backend.UnicornBackend$6.hook(UnicornBackend.java:271)
at unicorn.Unicorn$NewHook.onInterrupt(Unicorn.java:128)
at unicorn.Unicorn.emu_start(Native Method)
at com.github.unidbg.arm.backend.UnicornBackend.emu_start(UnicornBackend.java:296)
at com.github.unidbg.AbstractEmulator.emulate(AbstractEmulator.java:382)
at com.github.unidbg.AbstractEmulator.eFunc(AbstractEmulator.java:471)
at com.github.unidbg.arm.AbstractARMEmulator.eFunc(AbstractARMEmulator.java:215)
at com.github.unidbg.Module.emulateFunction(Module.java:154)
at com.github.unidbg.linux.android.dvm.DvmObject.callJniMethod(DvmObject.java:128)
at com.github.unidbg.linux.android.dvm.DvmClass.callStaticJniMethodObject(DvmClass.java:277)
at com.bytedance.frameworks.core.encrypt.Candy.getCandyDataWithKeyForJava(Candy.java:94)
at com.bytedance.frameworks.core.encrypt.Candy.main(Candy.java:110)
[22:02:19 751] WARN [com.github.unidbg.AbstractEmulator] (AbstractEmulator:401) - emulate RX@0x400071c5[libmtguard.so]0x71c5 exception sp=unidbg@0xbffff668, msg=obj is null: android.content.Context@55e4af, offset=22ms
`
不知道应该怎么往下了
context为null
On Tue, Dec 1, 2020 at 22:06 nantian-dog [email protected] wrote:
@zhkl0228 https://github.com/zhkl0228
我创建了android.content.Context里面有一个函数是getPackageManager,所以我又创建了android.content.pm.PackageManager空白类,代码如下: `package android.content;
import android.content.pm.PackageManager;
public class Context { public Object getPackageManager(){ return new PackageManager(); } } package android.content.pm;
public class PackageManager { } 现在是报了这么一个错:[22:02:19 747] WARN [com.github.unidbg.linux.ARM32SyscallHandler] (ARM32SyscallHandler:446) - handleInterrupt intno=2, NR=-1073744072, svcNumber=0x113, PC=unidbg@0xfffe01c4, syscall=null java.lang.IllegalStateException: obj is null: android.content.Context@55e4af at com.github.unidbg.linux.android.dvm.jni.ProxyJni.callObjectMethod(ProxyJni.java:291) at com.github.unidbg.linux.android.dvm.DvmMethod.callObjectMethod(DvmMethod.java:70) at com.github.unidbg.linux.android.dvm.DalvikVM$20.handle(DalvikVM.java:372) at com.github.unidbg.linux.ARM32SyscallHandler.hook(ARM32SyscallHandler.java:103) at com.github.unidbg.arm.backend.UnicornBackend$6.hook(UnicornBackend.java:271) at unicorn.Unicorn$NewHook.onInterrupt(Unicorn.java:128) at unicorn.Unicorn.emu_start(Native Method) at com.github.unidbg.arm.backend.UnicornBackend.emu_start(UnicornBackend.java:296) at com.github.unidbg.AbstractEmulator.emulate(AbstractEmulator.java:382) at com.github.unidbg.AbstractEmulator.eFunc(AbstractEmulator.java:471) at com.github.unidbg.arm.AbstractARMEmulator.eFunc(AbstractARMEmulator.java:215) at com.github.unidbg.Module.emulateFunction(Module.java:154) at com.github.unidbg.linux.android.dvm.DvmObject.callJniMethod(DvmObject.java:128) at com.github.unidbg.linux.android.dvm.DvmClass.callStaticJniMethodObject(DvmClass.java:277) at com.bytedance.frameworks.core.encrypt.Candy.getCandyDataWithKeyForJava(Candy.java:94) at com.bytedance.frameworks.core.encrypt.Candy.main(Candy.java:110) [22:02:19 751] WARN [com.github.unidbg.AbstractEmulator] (AbstractEmulator:401) - emulate RX@0x400071c5[libmtguard.so]0x71c5 exception sp=unidbg@0xbffff668, msg=obj is null: android.content.Context@55e4af, offset=22ms ` 不知道应该怎么往下了
— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/zhkl0228/unidbg/issues/211#issuecomment-736573263, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAKSR7YAOMWWHDTHGJIM6HLSSTZ7XANCNFSM4UHPT4QA .
@zhkl0228 我上传了下工程,麻烦给具体怎么写,或者能不能直接帮构建下缺失的类,摸索了一天是在找不到方法
百度网盘分享链接:https://pan.baidu.com/s/1a-uTuuKTqyXGqbbUeQn6hA 提取码:8d91
@zhkl0228 我上传了下工程,麻烦给具体怎么写,或者能不能直接帮构建下缺失的类,摸索了一天是在找不到方法
百度网盘分享链接:https://pan.baidu.com/s/1a-uTuuKTqyXGqbbUeQn6hA 提取码:8d91
hello,解决了吗,我也遇到这个问题,求指教
com.bytedance.frameworks.core.encrypt.Candy.getCandyDataWithKeyForJava(Candy.java:94) 这里的调用代码发来看下
@zhkl0228 我上传百度云,地址:
https://pan.baidu.com/s/1kppFBZFM6-Nvk1bwqv7Kag 提取码:8o9c
谢谢帮忙看看!
@nantian-dog 题主我和你看的是同个so,我直接传入的DvmObject contexts =vm.resolveClass("android/content/Context").newObject(null),但是调用一直返回null,不知道是哪里缺了什么,可以留个联系方式一起交流下吗,十分感谢!!!
解决了吗?我也遇到Context传参到so里的问题,弄了一整天不知道怎么补这个环境