
ARM64 ELF वर्चुअल मशीन संरक्षण प्रणाली
ARM64 ELF वर्चुअल मशीन संरक्षण प्रणाली
ARM64 नेटिव निर्देशों को कस्टम VM बाइटकोड में अनुवाद करें फंक्शन-स्तरीय कोड सुरक्षा के लिए
🇨🇳 中文文档 • विशेषताएँ • आर्किटेक्चर • त्वरित आरंभ • उपयोग • लाइसेंस
VMPacker एक वर्चुअल मशीन सुरक्षा (VMP) प्रणाली है ARM64 (AArch64) Linux ELF बाइनरी के लिए। यह लक्ष्य फंक्शन के नेटिव ARM64 निर्देशों को एक मध्यवर्ती प्रस्तुति में डीकोड करता है, उन्हें कस्टम VM बाइटकोड में अनुवाद करता है, और ELF फ़ाइल में एक एम्बेडेड VM इंटरप्रेटर इंजेक्ट करता है। रनटाइम पर, संरक्षित फंक्शन VM इंटरप्रेटर द्वारा निष्पादित किए जाते हैं, न कि मूल रूप से।
ARM64 Native Code → Decode → Translate → Custom VM Bytecode
↓
Original ELF ← Inject ← VM Interpreter Stub
| परत | तकनीक | विवरण |
|---|---|---|
| VM सुरक्षा | कस्टम ISA | यादृच्छिक रूप से मैप किए गए ऑपकोड — रिवर्स इंजीनियर सीधे निर्देश अर्थ की पहचान नहीं कर सकते |
| OpcodeCryptor | प्रति-निर्देश ऑपकोड एन्क्रिप्शन | enc[pc] = op[pc] ^ (key ^ (pc * 0x9E3779B9)) |
| बाइटकोड उलटना | निष्पादन क्रम उलटना | निर्देश उल्टे क्रम में संग्रहीत; इंटरप्रेटर पीछे की ओर चलता है |
| टोकन प्रविष्टि | 3-निर्देश ट्रैम्पोलिन | मूल फंक्शन को टोकनीकृत प्रविष्टि से बदल दिया जाता है, वास्तविक बाइटकोड स्थान छिपा हुआ |
| अप्रत्यक्ष प्रेषण | फंक्शन पॉइंटर जंप टेबल | रनटाइम पर स्टैक पर भरा जाता है, IDA क्रॉस-रेफरेंस तोड़ता है |
![]() |
![]() |
![]() |
| फंक्शन सूची | विश्लेषण और चयन | सुरक्षा विकल्प |
![]() |
![]() |
|
| वास्तविक समय लॉग | सुरक्षा पूर्ण |
vmp/
├── cmd/vmpacker/ # CLI प्रवेश बिंदु
│ ├── main.go # CLI तर्क पार्सिंग + ऑर्केस्ट्रेशन
│ └── vm_interp.bin # संकलित VM इंटरप्रेटर (GCC, go:embed)
│
├── pkg/ # Go कोर लाइब्रेरी
│ ├── arch/arm64/ # ARM64 आर्किटेक्चर समर्थन
│ │ ├── decoder.go # टेबल-संचालित निर्देश डिकोडर (vm.Decoder को लागू करता है)
│ │ ├── decode_*.go # डिकोड पैटर्न टेबल (DP-IMM/DP-REG/Branch/LdSt)
│ │ ├── translator.go # ARM64 → VM बाइटकोड अनुवादक
│ │ ├── tr_alu.go # ALU निर्देश अनुवाद
│ │ ├── tr_branch.go # ब्रांच निर्देश अनुवाद
│ │ ├── tr_loadstore.go # मेमोरी निर्देश अनुवाद
│ │ ├── tr_bitfield.go # बिटफ़ील्ड निर्देश अनुवाद
│ │ └── tr_special.go # विशेष निर्देश (ADRP/ADR)
│ ├── vm/ # VM ISA परिभाषाएँ
│ │ ├── types.go # साझा प्रकार + इंटरफ़ेस (Decoder/Translator/Packer)
│ │ ├── opcodes.go # 58+ VM opcode परिभाषाएँ (यादृच्छिक रूप से मैप किए गए मान)
│ │ └── disasm.go # VM बाइटकोड डिस्सेम्बलर
│ └── binary/elf/ # ELF बाइनरी हेरफेर
│ ├── packer.go # ELF VMP इंजेक्शन (PT_NOTE अपहरण, ट्रैम्पोलिन जनरेशन)
│ └── trampoline.go # ट्रैम्पोलिन कोड जनरेशन
│
├── stub/ # C VM इंटरप्रेटर (PIC फ्लैट बाइनरी में संकलित)
│ ├── vm_interp_clean.c # इंटरप्रेटर मुख्य लूप + प्रवेश बिंदु
│ ├── vm_types.h # VM CPU संदर्भ (vm_ctx_t)
│ ├── vm_opcodes.h # C-पक्ष opcode परिभाषाएँ (opcodes.go के साथ सिंक)
│ ├── vm_decode.h # बाइटकोड पढ़ने की उपयोगिताएँ
│ ├── vm_token.h # टोकन एन्कोड/डिकोड + डिस्क्रिप्टर टेबल
│ ├── vm_dispatch.h # अप्रत्यक्ष प्रेषण जंप टेबल
│ ├── vm_crc.h # CRC32 अखंडता जाँच
│ ├── vm_sections.h # हैंडलर सेक्शन स्कैटरिंग मैक्रो
│ ├── vm_interp.lds # लिंकर स्क्रिप्ट
│ └── vm_handlers/ # मॉड्यूलर निर्देश हैंडलर
│ ├── h_alu.h # अंकगणित/तर्क संचालन
│ ├── h_mem.h # मेमोरी एक्सेस
│ ├── h_branch.h # ब्रांच/जंप
│ ├── h_cmp.h # तुलना/सशर्त
│ ├── h_mov.h # डेटा संचलन
│ ├── h_stack.h # स्टैक (PUSH/POP)
│ └── h_system.h # सिस्टम (SVC/MRS/BLR/BR/RET)
│
├── vmp-gui/ # Wails GUI फ्रंटएंड
│ ├── frontend/ # Vue 3 + Element Plus
│ └── backend/ # Go बैकएंड बाइंडिंग
│
└── build/ # पूर्व-संकलित उपकरण + परीक्षण कलाकृतियाँ
परियोजना एक इंटरफ़ेस-संचालित मॉड्यूलर आर्किटेक्चर का उपयोग करती है, जिससे नए ISA और बाइनरी प्रारूपों तक विस्तार करना आसान हो जाता है:
// आर्किटेक्चर डिकोडर इंटरफ़ेस — x86, RISC-V तक विस्तार योग्य
type Decoder interface {
Decode(raw uint32, offset int) Instruction
InstName(op int) string
}
// बाइटकोड अनुवादक इंटरफ़ेस
type Translator interface {
Translate(instructions []Instruction) (*TranslateResult, error)
}
// बाइनरी प्रारूप इंजेक्टर इंटरफ़ेस — PE, Mach-O तक विस्तार योग्य
type Packer interface {
Process() error
}
graph LR
A[Input ELF] --> B[Locate Target Function]
B --> C[Extract ARM64 Instructions]
C --> D[Decode ARM64]
D --> E[Translate to VM Bytecode]
E --> F[XOR Encrypt Bytecode]
F --> G[Inject VM Interpreter]
G --> H[Generate Trampoline]
H --> I[Replace Function Entry]
I --> J[Output Protected ELF]