From 3cf08bc225248b3267bc8ceb53678e67925e06d2 Mon Sep 17 00:00:00 2001 From: _xeroxz Date: Sun, 13 Jun 2021 02:10:06 +0000 Subject: [PATCH] Update README.md --- README.md | 32 ++++++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index aa020ed..0fd656a 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,34 @@ -# VMProfiler - Library To Profile VMProtect 2 Virtual Machines +### VMProfiler - Library To Profile VMProtect 2 Virtual Machines -vmprofiler is a c++ library which is used to statically analyze VMProtect 2 polymorphic virtual machines. This project is inherited in vmprofiler-qt, vmprofiler-cli, and vmemu. This is the base project for all other VMProtect 2 projects inside of this group on githacks. \ No newline at end of file +vmprofiler is a c++ library which is used to statically analyze VMProtect 2 polymorphic virtual machines. This project is inherited in vmprofiler-qt, vmprofiler-cli, and vmemu. This is the base project for all other VMProtect 2 projects inside of this group on githacks. + +### Basic Usage - Creating a **vm::ctx_t** Object + +The `vm::ctx_t` class is a small container-like class which is simply used to contain all information for a given vm entry. This class contains the following useful information: + +* all vm handlers for a given vm entry +* the linear virtual address of the module base in memory +* the image base address +* the image size in virtual memory +* which way VIP advances (exec_type) +* vm entry relative virtual address +* vm entry deobfuscated and flattened +* calc jmp deobfuscated and flattened + +All of the above information is generated by executing the `vm::ctx_t::init` member function. Below is a C++ example of how to create a `vm::ctx_t` object. + +```cpp +const auto module_base = reinterpret_cast< std::uintptr_t >( + LoadLibraryExA( parser.get< std::string >( "bin" ).c_str(), + NULL, DONT_RESOLVE_DLL_REFERENCES ) ); + +const auto vm_entry_rva = std::strtoull( parser.get< std::string >( "vmentry" ).c_str(), nullptr, 16 ); +const auto image_base = umtils->image_base( parser.get< std::string >( "bin" ).c_str() ); +const auto image_size = NT_HEADER( module_base )->OptionalHeader.SizeOfImage; +vm::ctx_t vmctx( module_base, image_base, image_size, vm_entry_rva ); +``` + +***Figure 1. Taken from VMProfiler CLI Project*** \ No newline at end of file