
V8 बाइटकोड (JSC फाइलें) को उच्च-स्तरीय पठनीय JavaScript-जैसे कोड में डीकंपाइल करता है, जिसमें कई V8 संस्करणों के लिए समर्थन, ट्री आउटपुट, और मैलवेयर विश्लेषण के लिए निर्धारित फ़ंक्शन नामकरण शामिल है।
View8 एक स्थैतिक विश्लेषण उपकरण है जिसे क्रमबद्ध V8 बाइटकोड ऑब्जेक्ट्स (JSC फ़ाइलें) को उच्च-स्तरीय पठनीय कोड में डीकंपाइल करने के लिए डिज़ाइन किया गया है। इन क्रमबद्ध ऑब्जेक्ट्स को पार्स और डिसअसेंबल करने के लिए, View8 एक पैच किए गए संकलित V8 बाइनरी का उपयोग करता है। परिणामस्वरूप, View8 JavaScript के समान एक टेक्स्टुअल आउटपुट उत्पन्न करता है।
9.4.146.24 (Node V16.x में उपयोग किया गया)10.2.154.26 (Node V18.x में उपयोग किया गया)11.3.244.8 (Node V20.x में उपयोग किया गया)संकलित संस्करणों के लिए, रिलीज़ पृष्ठ पर जाएँ।
--inp, -i: इनपुट फ़ाइल का नाम।--out, -o: आउटपुट का पथ। चयनित विकल्पों के आधार पर, आउटपुट एक एकल फ़ाइल या एक निर्देशिका वृक्ष हो सकता है।--input_format, -f: इनपुट प्रारूप निर्दिष्ट करें। विकल्प हैं:
raw: इनपुट एक कच्ची JSC फ़ाइल है।disassembled: इनपुट फ़ाइल पहले से ही डिसअसेंबल की गई है।serialized: इनपुट पहले से ही डीकंपाइल किया गया है और क्रमबद्ध प्रारूप में संग्रहीत है। वर्तमान क्रमबद्ध प्रारूप Python pickle है; केवल विश्वसनीय इनपुट का उपयोग करें।--export_format, -e: निर्यात प्रारूप(ों) निर्दिष्ट करें। विकल्प v8_opcode, translated, decompiled, और serialized हैं। कई विकल्पों को जोड़ा जा सकता है। डिफ़ॉल्ट: decompiled।--path, -p: डिसअसेंबलर बाइनरी का पथ। यदि इनपुट कच्चे प्रारूप में है और View8 स्वचालित रूप से मेल खाने वाले डिसअसेंबलर का पता नहीं लगा सकता है तो आवश्यक है।--scope: स्कोप तर्कों का प्रचार करें। डिफ़ॉल्ट: 1।--normalize: पते से प्राप्त फ़ंक्शन पहचानकर्ताओं को पार्स क्रम के आधार पर नियतात्मक नामों से बदलें।--normalize-map [CSV]: --normalize का उपयोग करते समय, प्रत्येक मूल फ़ंक्शन नाम को उसके सामान्यीकृत नाम से मैप करने वाली एक CSV लिखें। जब पथ छोड़ा जाता है, तो View8 --out से <output>.name_map.csv प्राप्त करता है, या जब कोई आउटपुट पथ सेट नहीं होता है तो --inp से।--tree, -t: सभी फ़ंक्शनों को एक फ़ाइल में संग्रहीत करने के बजाय आउटपुट को एक वृक्ष संरचना में विभाजित करें। उस फ़ंक्शन को निर्दिष्ट करें जिसे वृक्ष मूल के रूप में उपयोग किया जाएगा। डिफ़ॉल्ट मुख्य फ़ंक्शन से शुरू करने के लिए, start का उपयोग करें।--split_mode: वृक्ष विभाजन मोड। विकल्प declarers, calls, और references हैं। डिफ़ॉल्ट: declarers।--inline_depth, -d: calls और references मोड में, चयनित वृक्ष मूल से गहराई N तक पहुंच योग्य फ़ंक्शनों को मुख्य वृक्ष फ़ाइल में शामिल करें। गहराई 0 का अर्थ केवल चयनित मूल है; गहराई 1 में प्रत्यक्ष कैली/संदर्भ शामिल हैं; गहराई 2 में उनके बच्चे शामिल हैं। declarers के साथ उपयोग नहीं किया जाता।--inline_branch_limit, -l: वृक्ष मोड में, जब बाल शाखाएँ --inline_depth द्वारा शामिल की जाती हैं, तो अधिकतम N फ़ंक्शनों वाली पूर्ण बाल शाखाओं को मुख्य वृक्ष फ़ाइल में इनलाइन करें। बड़ी शाखाएँ अलग से सहेजी जाती हैं।--split_depth: calls और references मोड में, निर्यातित उपयोग शाखाओं को कितनी गहराई तक ट्रैवर्स किया जाता है, इसे सीमित करें। डिफ़ॉल्ट: 4।--include, -n: आउटपुट में शामिल करने के लिए फ़ंक्शनों वाली फ़ाइल।--exclude, -x: आउटपुट से बाहर करने के लिए फ़ंक्शनों वाली फ़ाइल।--func: चयनित फ़ंक्शन प्रदर्शित करें।--show_all: फ़ंक्शन प्रदर्शन मोड में, छिपे हुए के रूप में चिह्नित पंक्तियों को भी दिखाएँ।--verbosity, -v: वर्बोसिटी स्तर। स्वीकृत सीमा: 0 से 3।V8 बाइटकोड फ़ाइल को डीकंपाइल करने और डीकंपाइल किए गए कोड को निर्यात करने के लिए:
python view8.py -i input_file -o output_file
डिफ़ॉल्ट रूप से, View8 VersionDetector.exe का उपयोग करके इनपुट फ़ाइल के V8 बाइटकोड संस्करण का पता लगाता है और स्वचालित रूप से Bin फ़ोल्डर में एक संगत डिसअसेंबलर बाइनरी खोजता है। इसे --path या -p विकल्प के साथ एक अलग डिसअसेंबलर बाइनरी निर्दिष्ट करके बदला जा सकता है:
python view8.py -i input_file -o output_file --path /path/to/disassembler
डिसअसेंबलिंग प्रक्रिया को छोड़ने और पहले से डिसअसेंबल की गई फ़ाइल को इनपुट के रूप में प्रदान करने के लिए, --input_format disassembled या -f disassembled विकल्प का उपयोग करें:
python view8.py -i input_file -o output_file -f disassembled
पते से प्राप्त फ़ंक्शन नामों को नियतात्मक पहचानकर्ताओं से बदलने के लिए --normalize का उपयोग करें। मूल और सामान्यीकृत नामों के बीच संबंध को संरक्षित करने के लिए, --normalize-map जोड़ें:
python view8.py \
--input_format disassembled \
--inp sample.jsc.disasm.txt \
--normalize \
--normalize-map \
--out decompiled/sample.dec.txt \
--export_format decompiled serialized
यह निम्नलिखित कॉलमों के साथ decompiled/sample.dec.name_map.csv लिखता है:
original_name,normalized_name
func_start_0x268514e9dcd9,func_start_0x100000000
func_rne_0x268514eb0779,func_rne_0x100000001
एक स्पष्ट CSV पथ भी प्रदान किया जा सकता है:
python view8.py \
--input_format disassembled \
--inp sample.jsc.disasm.txt \
--normalize \
--normalize-map mappings/sample.names.csv \
--out decompiled/sample.dec.txt
कभी-कभी फ़ाइल को एक क्रमबद्ध प्रारूप में डीकंपाइल करना उपयोगी होता है जो पार्स किए गए ऑब्जेक्ट्स और संरचनाओं को संरक्षित करता है। इस प्रकार का आउटपुट टेक्स्ट प्रारूप की तुलना में पोस्ट-प्रोसेस करना आसान हो सकता है, उदाहरण के लिए आगे डीऑबफस्केशन के दौरान। क्रमबद्ध आउटपुट बनाने के लिए, serialized निर्यात प्रारूप का उपयोग करें:
python view8.py -i input_file -o output_file -e serialized
सुरक्षा चेतावनी: वर्तमान क्रमबद्ध प्रारूप एक Python pickle फ़ाइल (.pkl) है। अविश्वसनीय स्रोतों से डेटा अनपिकल करना मनमाना कोड निष्पादित कर सकता है। केवल उन क्रमबद्ध फ़ाइलों को लोड करें जिन्हें आपने स्वयं उत्पन्न किया है।
क्रमबद्ध आउटपुट को वापस लोड करने और इसे किसी अन्य प्रारूप में निर्यात करने के लिए, --input_format serialized या -f serialized का उपयोग करें:
python view8.py -i input_file -o output_file -f serialized
--export_format या -e विकल्प का उपयोग करके निर्यात प्रारूप(ों) को निर्दिष्ट करें। आप कई प्रारूपों को जोड़ सकते हैं:
v8_opcodetranslateddecompiledserializedउदाहरण के लिए, V8 ऑपकोड और डीकंपाइल किए गए कोड दोनों को साथ-साथ निर्यात करने के लिए:
python view8.py -i input_file -o output_file -e v8_opcode decompiled