unidbg初识
Unidbg 是一个开源的动态二进制分析工具,基于 Unicorn 引擎,专注于模拟执行 Android 和 iOS 的原生库(主要是 .so 文件)。它允许在无需真实设备或完整运行 APK 的情况下,调用和分析 JNI(Java Native Interface)方法,特别适合逆向工程、算法分析和安全研究。
快速上手
环境准备:
下载 Unidbg 源码:git clone https://github.com/zhkl0228/unidbg
使用 IntelliJ IDEA 打开项目,配置 Maven 依赖。
推荐 Java 8 或更高版本。
基本代码示例(加载 .so 文件并调用函数):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| 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.DalvikModule; import com.github.unidbg.memory.Memory;
public class SimpleTest { public static void main(String[] args) { AndroidEmulator emulator = AndroidEmulatorBuilder.for32Bit().build(); Memory memory = emulator.getMemory(); memory.setLibraryResolver(new AndroidResolver(23));
DalvikModule dm = emulator.createDalvikVM().loadLibrary(new File("path/to/libexample.so"), false); Module module = dm.getModule();
dm.callJNI_OnLoad(emulator);
emulator.close(); } }
|
运行:
确保 .so 文件路径正确。
运行代码,观察输出结果。
通用模板
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
| package com.nb.demo;
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.linux.android.dvm.jni.ProxyClassFactory; import com.github.unidbg.memory.Memory;
import java.io.File;
public class CheZhiying extends AbstractJni { public static AndroidEmulator emulator; public static Memory memory; public static VM vm; public static DalvikModule dm; public static Module module;
public CheZhiying() {
emulator = AndroidEmulatorBuilder.for32Bit().setProcessName("com.che168.autotradercloud").build();
memory = emulator.getMemory();
memory.setLibraryResolver(new AndroidResolver(23));
vm = emulator.createDalvikVM(new File("apks/che/che3.32.1.apk"));
DalvikModule dm = vm.loadLibrary(new File("apks/che/libnative-lib.so"), false);
module = dm.getModule();
}
public void sign() {
}
public static void main(String[] args) { CheZhiying che=new CheZhiying(); che.sign(); } }
|