Tigress является диверсифицирующим виртуализатором/запутанным языком C, который поддерживает многие новые защиты от статической и динамической обратной инженерной инженерии и атак девиртуализации. В частности, Tigress защищает от статической де-виртуализации, генерируя наборы виртуальных инструкций произвольной сложности и разнообразия, путем создания переводчиков с несколькими типами диспетчеры инструкций и вставки кода для анализа антиаса. Тигресса защищает от динамической де-виртуализации путем объединения реального кода с фальшивыми функциями, вставив неявный поток и создавая медленно выполняющего переводчиков. Tigress реализует свою собственную версию упаковки кода с помощью генерации кода выполнения. Наконец, динамическое преобразование Tigress обеспечивает обобщенную форму постоянной модификации кода выполнения.
Команда Tigress предоставила некоторые проблемы, когда мы можем найти различные виды защиты
Все проблемы принимают в качестве ввода номер и возвращают хэш. Пример:
$ ./obfuscated_binaries/tigress-2-challenge-2 1234 202180712448 $ ./obfuscated_binaries/tigress-2-challenge-2 823748 50564355584 $ ./obfuscated_binaries/tigress-2-challenge-2 2834723 50714072576
Функция вычисления хеша запутывается. Типы возможных атак:
Наши цели были:
И все это только с одним общим сценарием :). Для этого мы сделали в следующем порядке:
Если вам нужна дополнительная информация, вы можете проверить наш сценарий Solve-Vm.py.

Тем не менее, мы уже подтолкнули все наши результаты в этом репозитории, но если вы хотите воспроизвести этот анализ, вам нужно только выполнить solve-vm.py , как это:
$ ./solve-vm.py ./obfuscated_binaries/_binary_
Пример:
$ ./solve-vm.py ./tigress-challenges/tigress-0-challenge-0 [+] Загрузка 0x400040 - 0x400238 [+] Загрузка 0x400238 - 0x400254 [+] Загрузка 0x400000 - 0x400f14 [+] Загрузка 0x601E28 - 0x602550 [+] Загрузка 0x601E50 - 0x601fe0 [+] Загрузка 0x400254 - 0x400298 [+] Загрузка 0x400DC4 - 0x400E08 [+] Загрузка 0x000000 - 0x000000 [+] Загрузка 0x601E28 - 0x602000 [+] Зацепление Printf [+] Зацепление __libc_start_main [+] Зацепление Strtoul [+] Начало эмуляции. [+] __libc_start_main [+] argv [0] = ./tigress-challenges/tigress-0-challenge-0 [+] argv [1] = 1234 [+] Стритул зацепил [+] Символизируя возврат Strtoul [+] printf зацепил 303532114416078008 [+] Нарезка пользовательского выражения конечной точки [-] Инструкция не поддерживается: 0x400539: HLT [+] Выполнено инструкция: 39816 [+] Уникальная инструкция выполнена: 458 [+] ПК Лен: 0 [+] Эмуляция сделана. [+] Генерирование symbolic_expressions/tigress-0-challenge-0.py [+] Преобразование символических выражений в модуль LLVM ... [+] Модуль LLVM написал в LLVM_EXPRENSS/TIGRESS-0-Challenge-0.ll [+] Перекомпиляция бинарного изданного ... [+] Deobfuscated Бинарная перекомпилированная: deobfuscated_binaries/tigress-0-challenge-0.deobfuscated
Затем здесь можно найти символические выражения, представления LLVM можно найти здесь, и здесь можно найти перекомпилированные двоичные файлы.
Использование Docker:
$ git clone [email protected]: jonathansalwan/tigress_protection.git $ cd/path/to/tigress_protection $ docker build -t Image_tigress_protection. $ docker run -v/path/to/tigress_protection:/root/tigress_protection -ti - -name = tigress_protection -ulimit = 'Stack = -1: -1' Image_tigress_protection
Проверка внутри контейнера Docker
# CD ~/tigress_protection # ./Solve-vm.py Тигресс-чалленги/тигрес-0-challenge-0
Когда мы упростили и перекомпилировали новые двоичные файлы, мы должны обеспечить то же поведение исходных двоичных файлов. Итак, чтобы проверить наши бинарные версии, мы используем этот скрипт.
$ ./scripts/testing_equality.py ./tigress-challenges/tigress-0-challenge-0 ./deobfuscated_binaries/tigress-0-challenge-0.deobfuscated [...] [+] Успех с 272966812638982633 [+] Успех с 2304147855562358786 [+] Успех с 15697842028176298504 [+] Успех с 15273138908025273913 [+] Успех с 17329851347176088980 [+] Успех с 12160831137213706322 [+] Успех с 3489058267725840982 [+] Успех с 6474275930952607745 [+] Успех с 7363567981237584398 [+] Успех с 3685039181436704621 [+] Успех: 100.00
По сути, этот сценарий запускает запутанные и деобуснированные двоичные файлы со случайными входами и проверяет, имеют ли они одинаковые результаты выходных данных.

Что касается таблицы коэффициентов, после решений проблем с тигрией мы попросили Кристиана Колберга источники его проблем, чтобы сравнить размер оригинальных источников и наши девиртизированные версии. Обратите внимание, что по просьбе христианина мы не можем предоставить источники проблем с тигрикой, если вы хотите эти источники, пожалуйста, спросите ему :).
Мы также подбираем 20-хэш-алгоритмы (10 хорошо известных, 10 из Tigress Challenge), и мы защищали каждый из этих алгоритмов, используя 46 различных защитных тигриков (см. Следующий раздел). В конце у нас есть испытательная скамья из 920 защищенных двоичных файлов. Каждое из этих защищенных двоичных файлов было успешно переводится с использованием сценария solve-vm.py . Эти хэш -алгоритмы можно найти в каталоге образцов и их девиртизированных версиях в каталоге deobfuscated_binary. Следующая таблица - это краткое изложение наших результатов, касающихся наших 920 образцов.

Для получения дополнительной информации об этих вариантах см. Страницы 1 и 2.