unidbg is a Java-based emulator framework for Android native libraries with experimental iOS support. It provides JNI/VM emulation, hooks, various backends, memory leak detection, and MCP AI-assisted debugging features.
Collecting history — the radar snapshots this repo daily. The trend line appears after 3 days of data (1 so far).
What it is
Allows you to emulate an Android native library, and an experimental iOS emulation. This is an educational project to learn more about the ELF/MachO file format and ARM assembly.
How it works
Features include: MCP (Model Context Protocol) debugging integration, JNI_OnLoad emulation, JavaVM/JNIEnv emulation, syscall instruction emulation, ARM32/ARM64 support, inline hooks via Dobby, Android import hooks via xHook, iOS fishhook and Whale hooks, Unicorn backend with a console debugger and tracing, iOS objc/swift runtime, dynarmic backend, Apple M1 hypervisor backend, Linux KVM backend for Raspberry Pi B4, and memory leak detection with guest/backtrace reporting.
Getting started
The repository provides MCP quick start and tools to run custom MCP tools, attach a debugger, and start an MCP server for AI-assisted analysis. Examples show how to attach a debugger, set breakpoints, and run MCP tooling:
Debugger debugger = emulator.attach();
debugger.addBreakPoint(address);
McpToolkit toolkit = new McpToolkit();
toolkit.addTool(new McpTool() {
@Override public String name() { return "encrypt"; }
@Override public String description() { return "Run encryption"; }
@Override public String[] paramNames() { return new String[]{"input"}; }
@Override public void execute(String[] params) {
String input = params.length > 0 ? params[0] : "default";
// call encryption with input
}
});
toolkit.run(emulator.attach());
McpToolkit toolkit = new McpToolkit();
toolkit.addTool(new McpTool() {
@Override public String name() { return "dumpClass"; }
@Override public String description() { return "Dump an ObjC class definition by name"; }
@Override public String[] paramNames() { return new String[]{"className"}; }
@Override public void execute(String[] params) {
String className = params.length > 0 ? params[0] : "AppDelegate";
IClassDumper classDumper = ClassDumper.getInstance(emulator);
System.out.println("dumpClass(" + className + "):\n" + classDumper.dumpClass(className));
}
});
toolkit.run(emulator.attach());
Low-level API: Debugger.addMcpTool() + Debugger.run(DebugRunnable) for full control.
Recent releases
Latest releases include:
- v0.9.9 (2026-03-05)
- v0.9.8 (2024-09-05)
- v0.9.7 (2022-07-30)
- v0.9.6 (2022-01-31)
- v0.9.5 (2021-09-21)
Traction
Stars: 5105 Forks: 1170 Open issues: 419
License
Apache-2.0
What it does (concrete capabilities)
- Emulates Android native libraries and experimental iOS emulation.
- Supports MCP (Model Context Protocol) debugging for AI-assisted tooling.
- Emulates JNI Invocation API, JavaVM, and JNIEnv.
- Emulates syscalls and supports ARM32/ARM64 architectures.
- Inline hooking (Dobby) and Android import hooks (xHook).
- iOS hooks via fishhook, substrate, and whale; Unicorn backend with basic debugger and trace features.
- Backends for Apple M1 hypervisor and Linux KVM (Raspberry Pi B4).
- Memory leak detection with guest backtrace and host stack trace.
- Memory tracking usage example shown with MemoryTracker and try-with-resources.
Examples and tests
Examples mention tests under src/test and include utilities demonstrating JNI/dispatch, and memory leak checks.
Relationships
Unidbg is an educational project focusing on ELF/MachO formats and ARM assembly understanding, with APIs for emulation, debugging, and memory tracking.






