Skip to content
KitploitKITPLOIT
उपकरणब्लॉग
जमा करें
उपकरणब्लॉग
जमा करें

हैकिंग, पेनटेस्ट और साइबर सुरक्षा उपकरण आपके सुरक्षा शस्त्रागार के लिए!

Kitploit हैकिंग, साइबर सुरक्षा और पेंटेस्टिंग टूल्स की एक निर्देशिका है। कमजोरियों को खोजने, सिस्टम का विश्लेषण करने, परीक्षण को स्वचालित करने और अपनी सुरक्षा को मजबूत करने के लिए नवीनतम प्रोजेक्ट अपडेट खोजें।

··फ़ीड·संपर्क·गोपनीयता·© 2026 Kitploit

टूल निर्देशिका

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
covirt — VM आधारित अस्पष्टीकरण के लिए एक x86-64 कोड वर्चुअलाइज़र | Kitploit
उपकरण/GitHubGitHub/dmaivel/covirt
स्थैतिक विश्लेषणगतिशील विश्लेषण (सैंडबॉक्सिंग)कोड विश्लेषणरिवर्स इंजीनियरिंगमालवेयर विश्लेषणबाइनरी विश्लेषण
GitHubdmaivel/covirt

covirt

VM आधारित अस्पष्टीकरण के लिए एक x86-64 कोड वर्चुअलाइज़र

रिपॉजिटरी देखें
2483821 साल पहलेKitploit द्वारा समीक्षित

सबसे लोकप्रिय

सभी देखें →

हमारे समुदाय द्वारा सबसे अधिक उपयोग किए जाने वाले उपकरण खोजें।

सभी उपकरण खोजें

हमारे उपकरणों का संग्रह ब्राउज़ करें

सभी उपकरण देखें →
साझा करें

covirt license

VM-आधारित अस्पष्टता के लिए एक x86-64 कोड वर्चुअलाइज़र।

विशेषताएँ

  • स्टैक-आधारित वर्चुअल मशीन आर्किटेक्चर
  • MBA, स्व-संशोधित कोड अस्पष्टता
  • PE* और ELF बाइनरी दोनों के लिए समर्थन
  • संरक्षित क्षेत्रों को परिभाषित करने के लिए कोड मार्कर

*PE समर्थन केवल MinGW-w64 के माध्यम से संकलित बाइनरी पर परीक्षण किया गया

आरंभ करना

निर्भरताएँ

CMake ये सभी निर्भरताएँ स्वचालित रूप से लाएगा, इसलिए इन्हें स्वयं स्थापित करना आवश्यक नहीं है।

नामसंस्करण
CMake3.25+
Zydis4.1.0+
zasmLatest
LIEF0.15.1+

निर्माण

C++23 संगत कंपाइलर आवश्यक है।

root@kitploit:~
git clone https://github.com/dmaivel/covirt.git
cd covirt
mkdir build
cd build
cmake ..
cmake --build . --config Release

यदि आप Windows पर Visual Studio के माध्यम से संकलन कर रहे हैं, तो आपको clang-cl का उपयोग करना होगा: cmake .. -T ClangCL -A x64।

उपयोग

root@kitploit:~
Usage: covirt [--help] [--version] [--output OUTPUT_PATH] [--vm_code_size MAX] [--vm_stack_size SIZE] [--no_self_modifying_code] [--no_mixed_boolean_arith] [--show_dump_table] INPUT_PATH

Code virtualizer for x86-64 ELF & PE binaries

Positional arguments:
  INPUT_PATH                         path to input binary to virtualize 

Optional arguments:
  -h, --help                         shows help message and exits 
  -v, --version                      prints version information and exits 
  -o, --output OUTPUT_PATH           specify the output file [default: INPUT_PATH.covirt] 
  -vcode, --vm_code_size MAX         specify the maximum allowed total lifted bytes [default: 2048]
  -vstack, --vm_stack_size SIZE      specify the size of the virtual stack [default: 2048]
  -no_smc, --no_self_modifying_code  disable smc pass 
  -no_mba, --no_mixed_boolean_arith  disable mba pass 
  -d, --show_dump_table              show disassembly of the vm instructions

कोड मार्कर

covirt को यह पता चले कि किन फ़ंक्शनों को वर्चुअलाइज़ करने की आवश्यकता है, आपको अपने स्रोत कोड में प्रारंभ और समाप्ति मार्कर जोड़ने होंगे, जैसे:

root@kitploit:~
#include "covirt_stub.h"

int my_function(...)
{
    int result = 0;
  
    __covirt_vm_start();
    // ...
    __covirt_vm_end();

    return result;
}

[!IMPORTANT]

  • __covirt_vm_end को अगम्य स्थानों पर न रखें (जैसे कि return के बाद), क्योंकि इससे अंतिम स्टब उत्सर्जित नहीं होगा।
  • __covirt_vm_...(); स्टब MSVC का उपयोग करते हुए काम नहीं करेंगे क्योंकि वे इनलाइन असेंबली का उपयोग करते हैं।
  • SSE4 समर्थन आवश्यक है।

डेमो

root@kitploit:~
#include <covirt_stub.h>
#include <stdio.h>

int calculate(int a, int b)
{
    int result = 0;

    __covirt_vm_start();
    
    for (int i = 0; i < 10; i++)
        if (i > 5)
            result += result + a;
        else
            result += (result >> 1) + b;
    printf("result = %d\n", result);

    __covirt_vm_end();

    return result;
}

int main()
{
    calculate(5, 12);
}

उपरोक्त उदाहरण एप्लिकेशन को covirt a.out -d का उपयोग करके वर्चुअलाइज़ किया गया था, जो अस्पष्टता और वर्चुअलाइज़ेशन के बाद VM निर्देशों का एक डंप आउटपुट करता है। वर्तमान VM कार्यान्वयन अधिकांश ऑपरेंड को संसाधित करने के लिए स्टैक पर धकेलता है, जिससे VM निर्देशों को एन्कोड करने की जटिलता कम हो जाती है। उन निर्देशों के लिए जिनके लिए परिभाषित VM हैंडलर नहीं है, वे मूल रूप से निष्पादित होंगे (vm_exit -> native instruction -> vm_enter)। फ़ंक्शन कॉल करना उसी पाइपलाइन का अनुसरण करता है, जिसमें हम बाहर निकलते हैं, फ़ंक्शन को कॉल करते हैं, और VM में पुनः प्रवेश करते हैं। सब मिलाकर, ये परिवर्तन बाइनरी के आकार को काफी बढ़ा देते हैं:

  • a.out एक ELF के रूप में: 15.5 kB -> 1.0 MB
  • a.out एक PE के रूप में: 259.3 kB -> 1.3 MB

अस्पष्टता

विवरणIDA
vm_entry का IDA डीकंपाइलेशन, जिसे केवल MBA पास के माध्यम से अस्पष्ट किया गया है। डीकंपाइलर द्वारा 27k से अधिक LOC उत्पन्न किए गए।cpp
vm_entry का IDA डिसअसेंबली, जिसे MBA और SMC पास के माध्यम से अस्पष्ट किया गया है। डीकंपाइलेशन काम नहीं करता।cpp

ज्ञात समस्याएँ

  • संरक्षित क्षेत्र के अंदर किसी अन्य VM संरक्षित फ़ंक्शन को कॉल नहीं कर सकते
    • यदि VM अस्पष्ट है तो segfault का कारण बनता है
    • यदि VM अस्पष्ट नहीं है तो कोई वापसी मान नहीं
टूल डाउनलोड करें