https://github.com/zhkl0228/unidbg
将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
);
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)