VMProtect зависает при загрузке файла

Issues related to VMProtect
Post Reply
lach
Posts: 18
Joined: Sat Mar 23, 2019 1:18 pm

VMProtect зависает при загрузке файла

Post by lach »

Использую VMProtect под Linux, билд 1141 (Так же проверял на 1146, 1148 (Demo), на почту они не приходили)
Пытаюсь наложить защиту на 3 бинарника, скомпилированные под 3 платформы: MacOS, Windows, Linux
Во всех случаях использую llvm 9.0, линковщики - MacOS: ld64-450.3, Windows: link.exe 14.22.27905.0, Linux: GNU ld 2.32
С одинаковой кодовой базой получаю зависание VMProtect на Windows и Linux (Бинарь под MacOS читается нормально)

При зависании ядро процессора нагружено на 100%, в gui версии отображает "Loading aaa_bin.vmp..." (Анимация есть, т.е зависает поток обработчика), в консольной "Loading aaa_bin... 100%"
Зависание воспроизводится на трёх машинах, так что проблема скорее всего не в них

Пример, на котором проблема воспроизводится всегда достаточно жирный, т.к не смог определить точной причины зависания (Убрал по максимуму, теперь любое убирание атомарного изменения числа/вызова функции/e.t.c заставляет vmprotect нормально читать бинарь)
Пример собран под Linux, могу собрать под Windows
aaa.tgz
(550 KiB) Downloaded 364 times
lach
Posts: 18
Joined: Sat Mar 23, 2019 1:18 pm

Re: VMProtect зависает при загрузке файла

Post by lach »

В том бинарнике что приложил используются маркеры, однако даже без маркеров получаю зависание
lach
Posts: 18
Joined: Sat Mar 23, 2019 1:18 pm

Re: VMProtect зависает при загрузке файла

Post by lach »

Так и не нашёл способа решения этой проблемы
Попробовал создать aaa_bin.vmp вручную:
При попытке открыть исполняемый файл зависает в том же месте, и в консоли пишет "QFileSystemWatcher::removePaths: list is empty"
При попытке открыть .vmp - зависание без каких либо сообщений в консоль (Сообщение в gui всё то же - Loading aaa_bin.vmp...)
Особо сам vmprotect не поотлаживаешь, но через gdb видно что зависает он хотя бы что то делая (Поток бесконечно ходит по файлу (вызывает lseek64), где именно - у меня отладить не выходит)
Изначально об этом не подумал, но скорее всего проблемы с анализом функции по смещению 0x121f1
Выглядит она крайне страшно, особенно из за того что в неё заинлайнило кучу других, её не переваривает HexRays decompiler (function frame is wrong), но это обычный код, который выдаётся для асинхронных функций/корутин в Rust (В компиляторе у него отдельная их реализация, это не https://llvm.org/docs/Coroutines.html )
Если проблема всё таки в них, было бы не плохо иметь возможность просто отключить анализ подобных функций (Новый маркер?), т.к выносить весь код под обработку в отдельную библиотеку, не использующую async/await не хотелось бы
Admin
Site Admin
Posts: 2566
Joined: Mon Aug 21, 2006 8:19 pm
Location: Russia, E-burg
Contact:

Re: VMProtect зависает при загрузке файла

Post by Admin »

Проверяйте 1152 билд.

P.S. Там конечно полный треш - есть несколько SWITCH с одной таблицей переходов и неизвестно как это будет работать после виртуализации.
lach
Posts: 18
Joined: Sat Mar 23, 2019 1:18 pm

Re: VMProtect зависает при загрузке файла

Post by lach »

Да, спасибо, с 1152 всё работает

Конкретно в тестовом бинарнике у меня из за инлайна слишком много попало в маркер, в реальном такое не происходит, в нём всё хорошо)
Если не секрет, то в чём была проблема?

P.S: А свитчи - это и есть конечный автомат созданный для кода с корутинами. Даже с таким инлайном как в тестовом бинарнике он всё таки работает под виртуализацией)
Post Reply