VMP VMProtect (Туторы, скрипты, плагины, ...)

Rio

Администратор
Сообщения
182
Реакции
235
Решил создать отдельную тему по VMProtect'у, чтобы собирать в одном месте информацию по этому проту и обсуждать детали.

VMProtect Unpacking & Devirtualization

1. Почему OllyDbg вылетает при запуске программы, защищенной VMProtect'ом?

Потому что VMProtect использует баг с переполнением буфера в старых версиях dbghelp.dll, из-за которого отладчик падает. Чтобы обойти его необходимо исправить баг в dbghelp.dll или положить в папку отладчика новую версию файла dbghelp.dll, который можно взять из комплекта Debugging Tools for Windows:

http://www.microsoft.com/whdc/devtools/ ... fault.mspx

Добавлено

Microsoft включил дистрибутив Debugging Tools в состав пакета Windows SDK (который весит достаточно прилично), поэтому вот альтернативные ссылки на:

1. Дистрибутив Debugging Tools v6.12.2.633 x86 от 26.02.2010 (18,3 Мбайт)
http://www.revenge-crew.com/xchg/kio/Debugging_Tools_for_Windows_v6.12.2.633_x86.msi

2. Только библиотека dbghelp.dll из дистрибутива Debugging Tools v6.12.2.633 x86 (0,5 Мбайт)
http://www.revenge-crew.com/xchg/kio/dbghelp_v6.12.2.633_x86.zip
#####################################
Темы на форуме -
Use of syscall and sysenter in VMProtect 3.1
VMP VirtualProtect Bypass - Disables virtualprotect checks/hooks so you can modify memory and change memory protection
Bypass anti-debug and anti-vm of VMP ( DWORD FLAG )
Патч и кейген RSA в VMProtect 3.x
VMProtect Ultimate v3.6.0 Build 1406
Анализ VMProtect c Triton (dynamic binary analysis (DBA) framework)
Inside VMProtect
Vm2Import
Исследование кода VMProtect. Часть 1. Патч хешей
VMProtect 3: Virtualization-Based Software Obfuscation
Analysis of Anti-Reversing Functionalities of VMProtect and Bypass Method Using Pin (we analyze Anti-reversing techniques of executables with Debugger Detection and Viralization Tools Detection options through VMProtect 3.5.0)

VTIL (Virtual-machine Translation Intermediate Language) -

NoVmp , vmpattack , vmpdump

VMProtect Windows API Address Decoder (IDA Pro - Python)
VMProtect xx_vm Chinese Decompiler
Quick PoC for a taint based attack on VMProtect

Сборник версий
VirtualizedFuncFinder
ZVM - пакет для изучения и практики по VMP2, сорсы и пример, док на Драконском
VmpGetHWID - может быть полезен
Плагин и Сорсы для OllyDBG, цель VMP2 - Unpacking VMProtect With ODPlugin
Деобфускация VMProtect в IDA Pro используя Qiling Framework
Collection of code for HWID-Locking .NET apps with VMProtect 3.4.0
VMP.NET-Kill V2.1 (VMP 1213-1261)
GH VMProtect 3 Import Fixer 1.0.1 x86 & x64
FixVmpDump - use python script to fix vmp dump api in ida. support x86 and x64
Vm2Import - fix vmprotect import function used unicorn-engine
VMPImportFixer - VMPImportFixer is a tool aimed to resolve import calls in a VMProtect'd (3.x) binary
VMUnprotect.NET
- VMUnprotect is a project engaged in hunting virtualized VMProtect methods
x64Unpack for VMProtect 3.4 - Hybrid Emulation Unpacker for 64-bit Windows
vmpfix - VMPfix is a dynamic x86/x64 VMProtect 2.0-3.x import fixer. The main goal of this project was to build correct and reliable tool to fix imports in x86/x64 applications
VMProtect 3.x IAT Fix and Rebuild Import Table
Updated VMP Demutator from sn0w (.NET) - VMProtect Mutation Cleaner/Remover - Updated for the latest VMP + Fully fixed

#####################################
Отключение обфускации в защите бинарника в VMProtect 3.5.1
VMProtect 3.3 Example с отключённой обфускацией, не сам файл протектора, а пример самого отключения

#####################################
VMP Hardware ID - HWID
Universal x86/x64 VMProtect 2.0-3.X Import fixer

#####################################
Detailed Analysis of the Virtual Machine Architecture - VMProtect 2 Reverse Engineering
+ Source https://githacks.org/vmp2 or https://cracklab.team/index.php?threads/12/post-2346,
+ Bin - https://githacks.org/vmp2/um-tracer/-/tree/master/refbuilds)
Detailed Analysis of the Virtual Machine Architecture - VMProtect 2 Reverse Engineering - Part Two, Complete Static Analysis


#####################################
VMProtect 2 Reverse Engineering (x64 PE Only) (Detailed Analysis of the Virtual Machine Architecture - VMProtect 2 Reverse Engineering)

Name:
release
release bundle of all vmp2 projects
um-hook
VMProtect 2 Usermode Virtual Instruction Hook Demo
vmassembler
VMProtect 2 Virtual Instruction Assembler
vmdevirt
VMProtect Devirtualization
vmemu
VMProtect 2 Virtual Machine Handler Emulation
vmhook
VMProtect 2 Virtual Machine Hooking Library
vmprofiler
VMProtect 2 Virtual Machines Profiler Library
vmprofiler-cli
VMProtect 2 CLI Virtual Machine Information Displayer
vmprofiler-qt
VMProtect 2 Qt Virtual Instruction Inspector
#####################################

Quick look around VMP 3.x - Part 1 : Unpacking
Quick look around VMP 3.x - Part 2 : Code Mutation
Quick look around VMP 3.x - Part 3 : Virtualization

#####################################

The idea of using machine learning to analyze vmp - Автоматическая классификация VM Handler-ов
Optimization of vmp trace

#####################################
Tickling VMProtect with LLVM: Part 1 + https://github.com/LLVMParty/TicklingVMProtect
Tickling VMProtect with LLVM: Part 2 + https://github.com/LLVMParty/TicklingVMProtect
Tickling VMProtect with LLVM: Part 3 + https://github.com/LLVMParty/TicklingVMProtect
Тема по LLVM - LLVM, Clang для реверсинга
Playing with the VMProtect software protection - Automatic deobfuscation of pure functions using symbolic execution and LLVM
Unsupported Instructions Lifting To LLVM - VM Template Handlers
VMProtect Devirtualization
An experimental dynamic approach to devirtualize pure functions protected by VMProtect 3.x (Automatic deobfuscation of pure functions using symbolic execution and LLVM.)

#####################################

VMUnprotect.Dumper can dynamically untamper VMProtected Assembly - https://github.com/void-stack/VMUnprotect.Dumper
VMP Mutation API Fix - https://github.com/Shhoya/MutantKiller
MutantKiller32.exe <32bit vmp dump> <process id>
MutantKiller64.exe <64bit vmp dump> <process id>
MutantKiller64.exe <64bit vmp driver dump> 4

VMP Mutation Fix using the Zydis disassembly engine. Enjoy your analysis

blog : https://shhoya.github.io
post : https://shhoya.github.io/vmp_vmpmk.html

#####################################
#####################################

NoVmpy ( IDA plugin ) - This project is just a POC and only works with VMProtect 3.x (not including the demo version)
VMProtect Hardware ID Decoder - This page implements a Javascript Ajax utility that calls the API to decode a hardware ID by VMProtect. Note: The hardware ID changes if you have added or removed a ethernet adapter.
How to Decode Hardware ID by VMProtect (using VBScript)
Decoder for VMProtect hwids

#####################################

Bypass Vmp vm detect - This tool is aimed to bypass Vmp vmware detection (Tested on Vmp3.6), it patches SystemFirmwareTable at runtime, it removes all detectable signatures like "VMware" "Virtual" "VMWARE". Vmp check virtual machine in 2 ways:
  • use cpuid instruction check
  • check firmware table from the firmware table provider
Bypass cpuid check
Edit vmware .vmx file,add the following code
hypervisor.cpuid.v0 = "FALSE"
Build
Visual Studio 2019 and WDK 10
Bypass firmware table check
Install our driver to patch SystemFirmwareTable

#####################################
 

Прикрепленные файлы:

Последнее редактирование модератором:

Dark_Bull

Зарегистрированный
Сообщения
6
Реакции
2
В этой серии статей, если я правильно понял, автор накрывает свои sample files VMP 3.x и потом исследует результат.
Смотреть пассивно на screenshots как-то скучно, да и непонятно порой что откуда берется.

Я взял свой sample, простую программку на "С", вставил маркеры и накрыл. Но мои результаты какие-то совсем другие, мало похожие на результаты из статьи.

Так вот, собственно вопрос:
кто-нибудь видел оригинальные исходные файлы, над которыми автор экспериментирует?
Может в самой статье есть ссылка, которую я проглядел?
Или, есть ли способ самому создать "исходный файл", путем максимального приближения наугад к тому, что автор мог иметь?
Заранее спасибо!
Он писал, что узнал, что демо и платная версия сильно отличается по методам защиты. (Усиленная мутация и более сильная ВМ)
И вроде как, он в 3ей части статьи запротектил софты платной версией. Так может в этом проблема? Вы тоже лицензионной версией накрывали ПО?
 

plutos

_Вечный_Студент_
Мудрец
Сообщения
208
Реакции
722
пытаюсь build vtil project.
Беру VS 2019 16.10.2, в ней открываю VTIL-Core.sln. Все вроде просто и хорошо, но не может найти capstone-static.vcxproj,
хотя file "capstone-static.vcxproj" is present in this location: C:\vtil\dependencies\capstone\msvc,
т.е. именно там, где ему и надлежит быть согласно спецификации из solution file:
Project("{///}") = "capstone-static", "..\capstone\msvc\capstone-static.vcxproj", "{...}"

KEYSTONE:
Код:
------ Rebuild All started: Project: keystone, Configuration: Debug x64 ------
C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Current\Bin\Microsoft.Common.CurrentVersion.targets(1966,5): warning : The referenced project 'D:\keystone\msvc\ZERO_CHECK.vcxproj' does not exist.
Building Custom Rule D:/keystone/llvm/keystone/CMakeLists.txt
The system cannot find the path specified.
C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Microsoft\VC\v160\Microsoft.CppCommon.targets(241,5): error MSB8066: Custom build for 'D:\keystone\llvm\keystone\CMakeLists.txt' exited with code 3.
Done building project "keystone.vcxproj" -- FAILED.
что тут надо делать? Может эти проэкты надо сперва отдельно собрать?

И еще один вопрос:
C++ Standard in VS is set to
"Preview - Features from the Latest C++ Working Draft (/std:c++latest)"
Я так понимаю, это и есть C++ 20?
Каким образом эта опция устанавливается в VS? В самом solution file об этом вроде ничего не сказано? Или студия видит по самому исходному коду какой стандарт использовать и если он студией поддерживается, то он выставляется автоматически?
 
Последнее редактирование:

mak

Соломенные сандалии
Администратор
Сообщения
1 024
Реакции
1 357
что тут надо делать? Может эти проэкты надо сперва отдельно собрать?
Важная строчка - "Building Custom Rule D:/keystone/llvm/keystone/CMakeLists.txt" обычно пути разные, Смэйк создаёт свою конфигурацию, можно сделать это повторно или проверив пути, удалить из проекта CMakeLists.txt, если он там есть.
 

OKOB

Победители турниров
Финалисты турниров
Мудрец
Сообщения
102
Реакции
660

Indy

Ветеран
Сообщения
116
Реакции
73
mak

#21, Vm2Import - я глянул, получается ведь простейшая задача. Эти стабы примитивны, можно решить без всяких визоров и вирт. Взять произвольный call/jmp и начать хард. трассировать, при этом соблюдать несколько условий:

- Выборка W в память за пределы стека только R.
- Выборка в стек ниже sp что был при call.
- Окончание трейса при передаче управления на экспорт.

Если тред валится, то обработать фаулт(первое условие - стек не будет изменён), перейти к следующему call. При иных условиях трассировка будет прекращаться. А call's найти сканом памяти.

Продумал алго, вопрос как определить тип выборки. Обычно нужно тянуть ксед, но есть и системное решение - подменить сегмент. Псевдокод:

Код:
Trap(Ins, State):
    !State.EFlags.TF
if #DB
    if ID
        State.Ds = ds
        State.Ss = ss
        !ID
    fi
    DecodeIns(Ins)
    if Ins.Fetch
        P = TranslateFetch(Ins)
        if !((P < Call.Esp) & (P > Thread.StackLimit))
            State.Ds = Cs    ; R-access to seg.
            State.Ss = Cs
            ID = 1
        fi
    fi
    State.EFlags.TF = 1
   Run()
else #AV
    if ID
        !ID
        State.Ds = Ds
        State.Ss = Ss
    fi
Stop:
    State.Esp = Call.Esp
    Run()
fi
Всегда можно найти системное решение, но обычно оно не нужно, используют всякие толстые костыли на скриптах, которые есчо и не работают в новой версии отладчика.)
 
Последнее редактирование:

mak

Соломенные сандалии
Администратор
Сообщения
1 024
Реакции
1 357
@Indy, можно и скрипт в отладчике написать, как это раньше писали в Олли, по смыслу практически одно и тоже, авторы обычно использовали разный подход на базе того, что уже было доступно в паблике, а в теме эмуляции сейчас это очень популярно, есть ещё пару проектов по теме как https://github.com/mike1k/VMPImportFixer

Для системного решения требуется системное мышление, где, в свою очередь, нужна информация :)
 

Indy

Ветеран
Сообщения
116
Реакции
73
mak

VMPImportFixer - тянуть вирту это оверхед, какая сложность и тайминг что бы такое написать, если можно за час по простому ^. Тем более что бы решить примитивную задачу по обработке простых процедур. Имхо это стрелять пушкой по воробьям. А если что то сложнее нужно, даже сложно представить что для этого потребуется.. :)
 
  • Понравилось
Реакции: mak

Indy

Ветеран
Сообщения
116
Реакции
73
Собрал семпл, работает оно в 32 ос, на 64 трабла имеется с сегментами, впрочем не проблема.

A.png
B.png
 

Прикрепленные файлы:

qq_patriot

Зарегистрированный
Сообщения
2
Реакции
3
Потестил версию 3.5 на бинарниках dotnet 6. Имеем на входе:


Защита минимальная, только виртуализация метода Main(), антиотлачик и прочее отключено. Имеем на выходе виртуальную машину (код из ILSpy):

Это реально как-то восстановить в исходный код? Какой вообще подход к модификации виртуального кода?
 

MrPavlik

Зарегистрированный
Сообщения
3
Реакции
1
Есть 32-битное приложение (Turbo Linker(2.25*,Delphi)[EXE32]), накрытое Vmprotect. OEP нашёл, вроде распаковал. С частью импорта справился VMPImportFixer, часть пришлось править руками. Внутри приложения есть защищённые функции. До перехода в них приложение работает нормально. На выполнении функций, накрытых VMProtect - крашится. Пока не совсем понимаю, это нормальная ситуация с распакованным приложением или при корректной распаковке (без разбора VM-функций) такого быть не должно? Спасибо.
 
Верх Низ