
VTIL द्वारा संचालित एक गतिशील VMP डंपर और आयात फिक्सर।

VTIL द्वारा संचालित एक गतिशील VMP dumper और import fixer। VMProtect 3.X x64 के लिए काम करता है।

VMPDump.exe <Target PID> "<Target Module>" [-ep=<Entry Point RVA>] [-disable-reloc]
आर्गुमेंट्स:
<Target PID>: लक्ष्य प्रक्रिया का आईडी, दशमलव या हेक्स रूप में।<Target Module>: मॉड्यूल का नाम जिसे डंप और फिक्स किया जाना है। यदि प्रक्रिया इमेज मॉड्यूल चाहिए तो यह एक खाली स्ट्रिंग ("") हो सकता है।[-ep=<Entry Point RVA>]: एक वैकल्पिक रूप से प्रदान किया गया एंट्री-पॉइंट RVA, हेक्स रूप में। VMPDump केवल वैकल्पिक हेडर में एंट्री पॉइंट को इस मान से ओवरराइट करता है।[-disable-reloc]: एक वैकल्पिक सेटिंग जो VMPDump को निर्देश देता है कि आउटपुट इमेज में रिलोक्स हटा दिए गए हैं, जिससे इमेज को डंप किए गए ImageBase पर लोड होने के लिए मजबूर किया जाता है। यह उपयोगी है यदि चलने योग्य डंप वांछित हैं।VMPDump चलाने से पहले लक्ष्य प्रक्रिया में VMProtect आरंभीकरण और अनपैकिंग पूर्ण होनी चाहिए। इसका मतलब है कि यह OEP (मूल एंट्री पॉइंट) पर या उसके बाद होना चाहिए। डंप और फिक्स किया गया इमेज प्रक्रिया इमेज मॉड्यूल निर्देशिका में नाम <Target Module Name>.VMPDump.<Target Module Extension> के तहत दिखाई देगा।
VMProtect हर import call या jmp के लिए स्टब्स इंजेक्ट करता है। ये स्टब्स .vmpX सेक्शन में 'obfuscated' थंक को रिज़ॉल्व करते हैं, और इसे 'deobfuscate' करने के लिए एक निश्चित स्थिरांक जोड़ते हैं। कॉल या जंप स्वयं तब ret निर्देश के साथ डिस्पैच किए जाते हैं।
VMPDump सभी निष्पादन योग्य सेक्शनों को इन स्टब्स के लिए स्कैन करता है, और VTIL x64 lifter का उपयोग करके उन्हें VTIL में लिफ्ट करता है। फिर इन स्टब्स पर विश्लेषण किया जाता है, ताकि यह निर्धारित किया जा सके कि किस प्रकार की कॉल को बदला जाना चाहिए और किन बाइट्स को ओवरराइट किया जाना चाहिए।
एक बार सभी कॉल प्राप्त हो जाने के बाद, VMPDump एक नई import table बनाता है और मौजूदा IAT में थंक जोड़ता है। VMP import स्टब्स के कॉल को इन थंकों के सीधे कॉल से बदल दिया जाता है।
ध्यान दें कि उत्परिवर्तित रूटीन में, ऐसी स्थितियाँ होती हैं जब VMP import स्टब कॉल को सीधे थंक कॉल से बदलने के लिए पर्याप्त बाइट्स नहीं होते, क्योंकि बाद वाला 1 बाइट बड़ा होता है। इन मामलों में, सेक्शन को विस्तारित किया जाता है और एक स्टब इंजेक्ट किया जाता है जो import थंक पर जाता है। फिर VMP import स्टब कॉल को उक्त इंजेक्टेड स्टब के लिए 5-बाइट रिलेटिव कॉल या jmp से बदल दिया जाता है।
mkdir build && cd build
cmake -G "Visual Studio 16 2019" ..
cmake --build . --config Release
VS में बिल्ड करना उतना ही सरल है जितना vcxproj में include/library निर्देशिकाओं को VTIL-NativeLifers/VTIL-Core/Keystone/Capstone से बदलना।
प्रोजेक्ट को C++20 की आवश्यकता है।
इस तथ्य के कारण कि कोड सेक्शनों को रैखिक रूप से स्कैन किया जाता है, विशेष रूप से भारी रूप से उत्परिवर्तित और अस्पष्ट कोड में, कुछ import स्टब कॉल छूट सकते हैं और इसलिए हल नहीं हो पाते। हालांकि, VMPDump में अधिकांश VMProtect उत्परिवर्तन असंगतियों के लिए कार्य-समाधान शामिल हैं, इसलिए यह भारी रूप से उत्परिवर्तित कोड में भी अच्छे परिणाम दे सकता है।
यदि आप इसका सामना करते हैं, तो कृपया प्रासंगिक जानकारी के साथ एक issue बनाएं और मैं इसे देखूंगा।
GPL-3.0 लाइसेंस के तहत लाइसेंस प्राप्त। किसी भी प्रकार की कोई वारंटी प्रदान नहीं की जाती है।