r/Malware • u/Dull-Plankton3027 • 54m ago
Open-source tool for unpacking stripped Android native (.so) malware: static RegisterNatives recovery, ARM64 OLLVM (BR X8) deobfuscation, and Dobby anti-Frida tracing
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.