
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
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]git clone https://github.com/LeoChen-CoreMind/VMPacker.git
cd VMPacker
make all
# एकल फंक्शन की सुरक्षा
./vmpacker -func check_license -v -o protected.elf original.elf
# एकाधिक फंक्शन की सुरक्षा
./vmpacker -func "check_license,verify_token" -v -o protected.elf original.elf
# पता श्रेणी निर्दिष्ट करें
./vmpacker -addr "0x4006AC-0x400790:main" -v -o protected.elf original.elf
# मिश्रित मोड
./vmpacker -addr "0x4006AC-0x400790:main" -func verify -o protected.elf original.elf
./vmpacker -info input.elf
# मानक निर्माण (GCC)
aarch64-linux-gnu-gcc -Os -nostdlib -fPIC -ffreestanding \
-o stub.elf stub/vm_interp_clean.c \
-T stub/vm_interp.lds
aarch64-linux-gnu-objcopy -O binary stub.elf vm_interp.bin
go build -o vmpacker ./cmd/vmpacker/
cd vmpacker
make gui
VMPacker यादृच्छिक रूप से मैप किए गए ऑपकोड मानों के साथ एक कस्टम निर्देश सेट आर्किटेक्चर (ISA) को परिभाषित करता है ताकि रिवर्स-इंजीनियरिंग कठिनाई बढ़ सके।
📖 पूर्ण ऑपकोड तालिका और एन्कोडिंग विवरण के लिए, चीनी दस्तावेज़ीकरण देखें।
योगदान का स्वागत है! कृपया इन दिशानिर्देशों का पालन करें:
git checkout -b feature/new-archgit commit -m 'feat: add x86_64 decoder'git push origin feature/new-archहम पारंपरिक कमिट का पालन करते हैं:
feat: नई सुविधाfix: बग फिक्सrefactor: कोड रीफैक्टरिंगdocs: दस्तावेज़ीकरणtest: परीक्षणयह परियोजना AGPL-3.0 लाइसेंस के तहत लाइसेंस प्राप्त है।
AGPL-3.0 क्यों:
यह सॉफ़्टवेयर "जैसा है" प्रदान किया जाता है, बिना किसी प्रकार की वारंटी के, स्पष्ट या निहित, जिसमें व्यापारिकता, किसी विशेष उद्देश्य के लिए उपयुक्तता और गैर-उल्लंघन की वारंटी शामिल है लेकिन यहीं तक सीमित नहीं है। किसी भी स्थिति में लेखक या कॉपीराइट धारक किसी भी दावे, क्षति या अन्य देयता के लिए उत्तरदायी नहीं होंगे, चाहे वह अनुबंध की कार्रवाई में हो, टोर्ट में या अन्यथा, सॉफ़्टवेयर या इसके उपयोग या अन्य लेन-देन से उत्पन्न या संबंधित।
यह परियोजना सॉफ़्टवेयर डेवलपर्स को वैध बौद्धिक संपदा संरक्षण प्रदान करने के लिए डिज़ाइन की गई है, जो वाणिज्यिक सॉफ़्टवेयर में कोर एल्गोरिदम और महत्वपूर्ण कोड को अनधिकृत रिवर्स इंजीनियरिंग या चोरी से बचाने में मदद करती है।
उपयोगकर्ता सूचना:
- इस सॉफ़्टवेयर का उपयोग करते समय आपको अपने क्षेत्राधिकार में सभी लागू कानूनों और विनियमों का पालन करना होगा
- इस सॉफ़्टवेयर का किसी भी अवैध उद्देश्य के लिए उपयोग सख्त वर्जित है, जिसमें शामिल है लेकिन यहीं तक सीमित नहीं: मैलवेयर विकास, सुरक्षा ऑडिट को दरकिनार करना, दूसरों के बौद्धिक संपदा अधिकारों का उल्लंघन करना, या कंप्यूटर सिस्टम सुरक्षा से समझौता करना
- लेखक इस सॉफ़्टवेयर के किसी भी व्यक्ति द्वारा उपयोग से उत्पन्न किसी भी प्रत्यक्ष या अप्रत्यक्ष परिणाम के लिए उत्तरदायी नहीं होंगे
- इस सॉफ़्टवेयर को डाउनलोड करने, उपयोग करने या वितरित करने से, आप स्वीकार करते हैं कि आपने उपरोक्त शर्तों को पढ़ लिया है और उनसे सहमत हैं
LeoChen — @LeoChen-CoreMind
कॉपीराइट © 2026 LeoChen। सर्वाधिकार सुरक्षित।
| परत | तकनीक | विवरण |
|---|
| VM सुरक्षा | कस्टम ISA | यादृच्छिक रूप से मैप किए गए ऑपकोड — रिवर्स इंजीनियर सीधे निर्देश अर्थ की पहचान नहीं कर सकते |
| OpcodeCryptor | प्रति-निर्देश ऑपकोड एन्क्रिप्शन | enc[pc] = op[pc] ^ (key ^ (pc * 0x9E3779B9)) |
| बाइटकोड उलटना | निष्पादन क्रम उलटना | निर्देश उल्टे क्रम में संग्रहीत; इंटरप्रेटर पीछे की ओर चलता है |
| टोकन प्रविष्टि | 3-निर्देश ट्रैम्पोलिन | मूल फंक्शन को टोकनीकृत प्रविष्टि से बदल दिया जाता है, वास्तविक बाइटकोड स्थान छिपा हुआ |
| अप्रत्यक्ष प्रेषण | फंक्शन पॉइंटर जंप टेबल | रनटाइम पर स्टैक पर भरा जाता है, IDA क्रॉस-रेफरेंस तोड़ता है |
![]() | ![]() | ![]() |
| फंक्शन सूची | विश्लेषण और चयन | सुरक्षा विकल्प |
![]() | ![]() | |
| वास्तविक समय लॉग | सुरक्षा पूर्ण |
| विकल्प | डिफ़ॉल्ट | विवरण |
|---|
-func | — | सुरक्षा के लिए फंक्शन नाम (अल्पविराम से अलग) |
-addr | — | पते द्वारा सुरक्षा (0xSTART-0xEND[:name]) |
-o | input.vmp | आउटपुट फ़ाइल पथ |
-v | false | विस्तृत आउटपुट (डिस्सेम्बली दिखाएँ) |
-strip | true | प्रतीक तालिका हटाएँ |
-debug | false | ARM64 → VM बाइटकोड डीबग मैपिंग फ़ाइल उत्पन्न करें |
-token | true | टोकन-आधारित प्रविष्टि मोड |
-info | false | केवल ELF जानकारी प्रिंट करें |
| श्रेणी | गिनती | विवरण |
|---|
| डेटा संचलन | 3 | MOV_IMM64, MOV_IMM32, MOV_REG |
| अंकगणित/तर्क | 21 | ADD, SUB, MUL, XOR, AND, OR, SHL, SHR, ASR, NOT, ROR, UMULH + _IMM variants |
| मेमोरी एक्सेस | 8 | LOAD/STORE 8/16/32/64 |
| ब्रांच/जंप | 13 | JMP, JE, JNE, JL, JGE, JGT, JLE, JB, JAE, JBE, JA, TBZ, TBNZ |
| तुलना | 6 | CMP, CMP_IMM, CCMP_REG, CCMP_IMM, CCMN_REG, CCMN_IMM |
| स्टैक | 2 | PUSH, POP |
| सिस्टम/विशेष | 8 | NOP, HALT, RET, CALL_NATIVE, CALL_REG, BR_REG, SVC, MRS |
| SIMD | 2 | VLD16, VST16 |
| कुल | 63 |