192K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6*7K9r3E0D9x3o6t1J5z5q4)9J5c8Y4g2F1K9h3c8T1k6H3`.`.
将Unidbg的源码导入Idea中。在unidbg-android模块中的src/test目录下,包含了几个Demo,您可以尝试将Demo运行起来,即可看到Unidbg的效果
使用AndroidEmulatorBuilder可以来帮助你快速创建一个AndroidEmulator的实例。
当我们使用AndroidEmulatorBuilder帮助我们构造了一个AndroidEmulator实例之后,我们就可以直接来操作这个实例
文档持续更新中....
//1.创建Android模拟器实例
AndroidEmulator emulator = AndroidEmulatorBuilder
.for32Bit()
.addBackendFactory(new DynarmicFactory(true))
.build();
//2.获取操作内存的接口
Memory memory = emulator.getMemory();
//3.设置Android SDK 版本
memory.setLibraryResolver(new AndroidResolver(23));
//4.创建虚拟机
VM vm = emulator.createDalvikVM();
//5.加载ELF文件
DalvikModule dm = vm.loadLibrary(new File("你的ELF文件路径名"), false);
//6.调用JNI_OnLoad
dm.callJNI_OnLoad(emulator);
//此时ELF将加载到内存,可以对其做任意操作
//7.执行JNI方法
DvmObject<?> obj = ProxyDvmObject.createObject(vm, this);
boolean result = obj.callJniMethodBoolean(emulator, "jnitest(Ljava/lang/String;)Z", str);
//1.创建Android模拟器实例
AndroidEmulator emulator = AndroidEmulatorBuilder
.for32Bit()
.addBackendFactory(new DynarmicFactory(true))
.build();
//2.获取操作内存的接口
Memory memory = emulator.getMemory();
//3.设置Android SDK 版本
memory.setLibraryResolver(new AndroidResolver(23));
//4.创建虚拟机
VM vm = emulator.createDalvikVM();
//5.加载ELF文件
DalvikModule dm = vm.loadLibrary(new File("你的ELF文件路径名"), false);
//6.调用JNI_OnLoad
dm.callJNI_OnLoad(emulator);
//此时ELF将加载到内存,可以对其做任意操作
//7.执行JNI方法
DvmObject<?> obj = ProxyDvmObject.createObject(vm, this);
boolean result = obj.callJniMethodBoolean(emulator, "jnitest(Ljava/lang/String;)Z", str);
AndroidEmulator emulator = AndroidEmulatorBuilder
//指定32位CPU
.for32Bit()
//添加后端,推荐使用Dynarmic,运行速度快,但并不支持某些新特性
.addBackendFactory(new DynarmicFactory(true))
//指定进程名,推荐以安卓包名做进程名
.setProcessName("com.github.unidbg")
//设置根路径
.setRootDir(new File("target/rootfs/default"))
//生成AndroidEmulator实例
.build();
AndroidEmulator emulator = AndroidEmulatorBuilder
//指定32位CPU
.for32Bit()
//添加后端,推荐使用Dynarmic,运行速度快,但并不支持某些新特性
.addBackendFactory(new DynarmicFactory(true))
//指定进程名,推荐以安卓包名做进程名
.setProcessName("com.github.unidbg")
//设置根路径
.setRootDir(new File("target/rootfs/default"))
//生成AndroidEmulator实例
.build();
//获取内存操作接口
Memory memory = emulator.getMemory();
//获取进程pid
int pid = emulator.getPid();
//创建虚拟机
VM dalvikVM = emulator.createDalvikVM();
//创建虚拟机并指定APK文件
VM dalvikVM = emulator.createDalvikVM(new File("apk file path"));
//获取已创建的虚拟机
VM dalvikVM = emulator.getDalvikVM();
//显示当前寄存器状态 可指定寄存器
emulator.showRegs();
//获取后端CPU
Backend backend = emulator.getBackend();
//获取进程名
String processName = emulator.getProcessName();
//获取寄存器
RegisterContext context = emulator.getContext();
//Trace读内存
emulator.traceRead(1,0);
//Trace写内润
emulator.traceWrite(1,0);
//Trace汇编
emulator.traceCode(1,0);
//是否正在运行
boolean running = emulator.isRunning();
//获取内存操作接口
Memory memory = emulator.getMemory();
//获取进程pid
int pid = emulator.getPid();
//创建虚拟机
VM dalvikVM = emulator.createDalvikVM();
//创建虚拟机并指定APK文件
VM dalvikVM = emulator.createDalvikVM(new File("apk file path"));
//获取已创建的虚拟机
VM dalvikVM = emulator.getDalvikVM();
//显示当前寄存器状态 可指定寄存器
emulator.showRegs();
//获取后端CPU
Backend backend = emulator.getBackend();
//获取进程名
String processName = emulator.getProcessName();
//获取寄存器
RegisterContext context = emulator.getContext();
//Trace读内存
emulator.traceRead(1,0);
[培训]科锐软件逆向54期预科班、正式班开始火爆招生报名啦!!!