How sxtufs/vmc works
VMPacker is an Android APK protection app: users select an APK, optionally add a mapping and exclusions, preview candidates, choose signing credentials, and pack a rebuilt APK. The central packer coordinates analysis, DEX rewriting, VMC container creation, APK assembly, and signing; a native JNI runtime later verifies the installed APK and interprets protected methods. The graph preserves documented preview and signing capabilities. Some implementation files were not sampled, so uncertain internal links are omitted; README-documented workflow links are cited to the README.
Main entry points: Packer.kt Pack coordinator · MainActivity.kt Main screen · VmcWriter.kt VMC containers · vmp.cpp JNI runtime loader
Components 22
App Workflow
- Main screen
app/src/main/java/com/vmp/packer/MainActivity.kt - Package preview
app/src/main/java/com/vmp/packer/PackagePreviewAdapter.kt - Name mapping
app/src/main/java/com/vmp/packer/ProguardMapping.kt - Signing identities
app/src/main/java/com/vmp/packer/SigningSource.kt
APK Processing
- Pack coordinator
app/src/main/java/com/vmp/packer/Packer.kt - Selection policy
app/src/main/java/com/vmp/packer/PackPolicy.kt - DEX analysis
app/src/main/java/com/vmp/packer/DexParser.kt - DEX rewriting
app/src/main/java/com/vmp/packer/DexRewriter.kt - Manifest patching
app/src/main/java/com/vmp/packer/AxmlPatcher.kt - ABI preflight
app/src/main/java/com/vmp/packer/AbiPreflight.kt - APK assembly
app/src/main/java/com/vmp/packer/ApkBuilder.kt - APK signing
app/src/main/java/com/vmp/packer/ApkSigner.kt
Protected Payload
- VMC containers
app/src/main/java/com/vmp/packer/VmcWriter.kt - IR encoding
app/src/main/java/com/vmp/packer/IrCodec.kt - Opcode permutation
app/src/main/java/com/vmp/packer/InsnPerm.kt
Native Runtime
- JNI runtime loader
native/src/vmp.cpp - APK verification
native/src/vmp_apk_verify.cpp - Signature block
native/src/vmp_sigblock.cpp - Container reader
native/src/vmp_file.cpp - DEX interpreter
native/src/interpreter.cpp - Compression support
native/src/miniz.c
Other components
- App user
Connections 28
- App user → Main screen: selects APK
README.md - Main screen → Pack coordinator: starts scan or pack
app/src/main/java/com/vmp/packer/MainActivity.kt - Main screen → Package preview: shows candidates
app/src/main/java/com/vmp/packer/MainActivity.kt - Main screen → Name mapping: imports mapping
app/src/main/java/com/vmp/packer/MainActivity.kt - Main screen → Signing identities: selects signing
app/src/main/java/com/vmp/packer/MainActivity.kt - Pack coordinator → Name mapping: uses names
app/src/main/java/com/vmp/packer/Packer.kt - Pack coordinator → ABI preflight: checks ABI
app/src/main/java/com/vmp/packer/Packer.kt - Pack coordinator → Manifest patching: patches manifest
app/src/main/java/com/vmp/packer/Packer.kt - Pack coordinator → DEX analysis: analyzes DEX
app/src/main/java/com/vmp/packer/Packer.kt - Pack coordinator → Selection policy: selects methods
app/src/main/java/com/vmp/packer/Packer.kt - DEX analysis → Selection policy: checks eligibility
app/src/main/java/com/vmp/packer/DexParser.kt - Pack coordinator → DEX rewriting: rewrites DEX
README.md - Pack coordinator → VMC containers: creates containers
app/src/main/java/com/vmp/packer/Packer.kt - VMC containers → DEX analysis: reads method data
app/src/main/java/com/vmp/packer/VmcWriter.kt - VMC containers → Opcode permutation: encodes opcodes
app/src/main/java/com/vmp/packer/VmcWriter.kt - VMC containers → IR encoding: encodes IR
app/src/main/java/com/vmp/packer/VmcWriter.kt - Pack coordinator → APK assembly: rebuilds APK
README.md - APK assembly → Opcode permutation: uses permutation
app/src/main/java/com/vmp/packer/ApkBuilder.kt - APK assembly → IR encoding: uses IR codec
app/src/main/java/com/vmp/packer/ApkBuilder.kt - Pack coordinator → APK signing: signs output
README.md - APK signing → Signing identities: uses identity
- JNI runtime loader → APK verification: verifies APK
native/src/vmp.cpp - APK verification → Signature block: checks signature
native/src/vmp_apk_verify.cpp - JNI runtime loader → Container reader: loads containers
native/src/vmp.cpp - JNI runtime loader → DEX interpreter: dispatches methods
native/src/vmp.cpp - JNI runtime loader → Compression support: uses compression
native/src/vmp.cpp - Container reader → DEX interpreter: provides method data
- VMC containers → Container reader: supplies VMC data
README.md