Open-source tool for unpacking stripped Android native (.so) malware: static RegisterNatives recovery, ARM64 OLLVM (BR X8) deobfuscation, and Dobby anti-Frida tracing
Source Reddit Malware
Discussion
JNISleuth-MCP is an open-source tool designed to assist analysts in unpacking and analyzing stripped Android native (.so) malware libraries. It automates the recovery of JNI RegisterNatives bindings, deobfuscates ARM64 OLLVM indirect branches, and bypasses anti-Frida tracing techniques using a stealth Dobby agent. The tool integrates with reverse engineering platforms like Ghidra and IDA Pro to provide unified cross-boundary analysis from Java to native code, facilitating malware triage and research.
r/Malware (opens in a new tab)u/Dull-Plankton30270 points0 comments
If you analyze Android banking trojans, droppers, or spyware, you've probably run into samples where:
classes*.dexdeclaresnativemethods, butlib/*.sohas 0 exportedJava_*symbols and wiped ELF section headers.JNI_OnLoadconstructs strings on the stack (MOVZ/MOVK), uses an OLLVMCSEL+BR X8state machine, and registers JNI handlers dynamically.- Attaching Frida immediately crashes the app due to
/proc/self/mapsor libc prologue checks.
I released JNISleuth-MCP (Apache 2.0) to automate this part of Android malware triage: https://github.com/nighthawkk/JNISleuth-MCP
- Recovers static
JNINativeMethodtriplets from.rodata/.data.rel.ro(withPT_LOADfallback for section-stripped ELFs). - Extracts
MOVZ/MOVKstack strings and XOR-encoded C2 strings fromJNI_OnLoad/.init_array. - Resolves & patches ARM64 OLLVM
CSEL+BR X8indirect branches and.rodatajump tables. - Includes a C++/NDK Dobby agent that hooks
RegisterNativesmid-function (+0x10) and dumps in-memory DEX payloads fromart::DexFileLoader::OpenCommonwithout triggering standard Frida detections. - Syncs all 233
JNIEnv*vtable types and C signatures into Ghidra and IDA Pro 9.0, plus includes an MCP/LLM server.
Ships with a synthetic dropper APK (samples/banker_dropper.apk) so you can test all features offline.