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

Rio

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

Для начала ответ на самый распространенный вопрос.

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
Патч и кейген RSA в VMProtect 3.x
VMProtect ULTIMATE v3.5.0 Build 1213
Анализ VMProtect c Triton (dynamic binary analysis (DBA) framework)
Inside VMProtect
Vm2Import
Исследование кода VMProtect. Часть 1. Патч хешей
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

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

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

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

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 для реверсинга
 
Последнее редактирование модератором:

Dark_Bull

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

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

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

plutos

_Вечный_Студент_
Мудрец
Сообщения
146
Реакции
623
пытаюсь 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

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

OKOB

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

Indy

Постоянный
Ветеран
Сообщения
66
Реакции
51
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

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

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

Indy

Постоянный
Ветеран
Сообщения
66
Реакции
51
mak

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

Indy

Постоянный
Ветеран
Сообщения
66
Реакции
51
Собрал семпл, работает оно в 32 ос, на 64 трабла имеется с сегментами, впрочем не проблема.

A.png
B.png
 

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

qq_patriot

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


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

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