• XSS.stack #1 – первый литературный журнал от юзеров форума

Статья Обфускация С/С++ кода с помощью Python и libclang

Пожалуйста, обратите внимание, что пользователь заблокирован
Да, в целом неплохо, интересно на сколько такая обфускация "раздувает" размер бинаря?
Сложно сказать, зависит от того, на что допиливать трешген и другие алгоритмы. Если накрывать весь код и если нужно сигнатуру авера сбивать, то раза в 1.5-2.0, я думаю. Если усложнить жизнь реверсеру, то раза в два-три.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Сложно сказать, зависит от того, на что допиливать трешген и другие алгоритмы. Если накрывать весь код и если нужно сигнатуру авера сбивать, то раза в 1.5-2.0, я думаю. Если усложнить жизнь реверсеру, то раза в два-три.
кстати, есть идеи на счет сбитие графа, кроме while+switch? Я на таком моменте протупел, когда свой писал.
А как усложнить жизнь реверсеру? Примерный концпет в студию.

И да, главный трабл, как обфусцировать код и при этом минимально раздуть вес?
 
Пожалуйста, обратите внимание, что пользователь заблокирован
кстати, есть идеи на счет сбитие графа, кроме while+switch?
Ну джамп-тейбл можно сделать, создаешь массив указателей, запихиваешь туда адреса меток, проходишь по массиву и переходишь по меткам. Хотя возможно это какое-то расширение для GCC/MinGW, не уверен, что такое можно в студии делать: https://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html Ну можно наверное через лямбды что-то такое сделать, но это уже нужны плюсы стандарта не ниже C++11 штоли.

А как усложнить жизнь реверсеру? Примерный концпет в студию.
Ну по разному. Можно делать асм вставки с прыжками в середину инструкций (это сбивает линейные дизассемблеры с толку и каждое такое место нужно руками фиксить, или скрипт для этого писать). Можно в мусорном коде размешать всякие трюки против отладки. Можно виртуализацию кода сделать (по типу VMProtect или Tigress). Тут многое можно придумать.

И да, главный трабл, как обфусцировать код и при этом минимально раздуть вес?
Ну трешген сразу отпадает. Зашифровать строки и другие бинарные данные, сделать control flow flattening. Если нужно сбивать сигнатуру по коду, то делать это на уровне ассемблера - заменять инструкции на аналогичные, менять местами регистры в инструкциях и тд.
 
DildoFagins, огромное спасибо за статью, классно всё расписал.)))

Я как-то тоже делал обфускатор на питоне, но потом забил, может как-раз ещё попробую, было время разбирался как будут реагировать антивирусы на обфусцированный код.

Кстати, в какой-то статье старой, Мердок делал треш-код и обфускатор на си...

В итоге, да первое время антивирусы не детектили зверьков, но при распространении на вирустотал и т.д., антивирусы каким-то образом определяли алгоритм обфускатора и начинали детектить сам обфускатор, вернее обфусцированный код.

Интересно, как будет с таким алгоритмом как у тебя ?

Может время будет проведу эксперименты, вообще мало просто обфусцировать код, если для чёрных дел, нужно еще менять алгоритмы обфускации постоянно.

А за статью ещё-раз спасибо, тут вникать и вникать ещё правда нужно, много чего написано, так с одного прочтения всё не понять мне к сожалению.)
 
Пожалуйста, обратите внимание, что пользователь заблокирован
тут вникать и вникать ещё правда нужно, много чего написано, так с одного прочтения всё не понять мне к сожалению
Ну спрашивай, если что, лучше в этой теме (мало ли у кого-то еще будут похожие проблемы), но можно и в личке, если хочешь так.
 
Я тоже много времени провел за анализом научной литературы (а её реально много, например на arxiv.org) по обсускации, морфингу и так далее.
Много времени провел за написанием своих реализаций, одна из них реализована в крипторе в конкурсной статье.
Я также оценивал перспективы морфинга через разбор AST (как предлагается в данной статье), но лучше обфускатора на LLVM пока ничего не встречал.

по типу VMProtect или Tigress
Tigress кстати тоже встречал, но пока не дошло дело его погонять, есть успешный опыт?

Кстати, а можешь сказать, как используется данная реализация морфера в реальных кейсах или это PoC (понимаю что в статье не все алгоритмы реализованы)?
 
Я тоже много времени провел за анализом научной литературы (а её реально много, например на arxiv.org) по обсускации, морфингу и так далее.
Накинь плз топ литературы по теме, что по твоему мнению хорошо. Везде, куда не посмотрю, одно и то же .
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Tigress кстати тоже встречал, но пока не дошло дело его погонять, есть успешный опыт?
Tigress не выдается, кому попало, чтобы ее получить, насколько я понимаю, нужно подтвердить свою личность, а запросить исходники могут только всякие институты и официальные исследователи в области компьютерной безопасности из официальных контор. Судя по примерам обфускации Tigress, там достаточно хорошо реализована виртуализация кода. Остальные алгоритмы уже давно хорошо известны и описаны. Кстати есть еще забавная проблема в том, что даже если ты получишь сорсы Tigress, то в них еще придется попотеть, чтобы разобраться, так как вся система написана на OCaml'е. Но если вдруг у кого-то есть сорсы, то я был бы очень благодарен, если бы получил их для ознакомления.

Кстати, а можешь сказать, как используется данная реализация морфера в реальных кейсах или это PoC (понимаю что в статье не все алгоритмы реализованы)?
Алгоритмы обфускации не являлись целью статьи, они дают некоторые более менее приемлемые результаты, но не более того. Целью статьи было показать архитектуру и реализацию для типичного обфускатора на базе абстрактного синтаксического дерева. У меня есть обфускаторы, которые используются в реальных кейсах, в частности мы накрываем ими наши тулзы, когда проводим пентест и всякую такую редтимерскую деятельность. Но семплы этого выкладывать не могу.
 
Накинь плз топ литературы по теме, что по твоему мнению хорошо. Везде, куда не посмотрю, одно и то же .
Code Obfuscation using Code Splitting with Self-modifying Code
Binary Obfuscation from the Top Down
Binary Obfuscation Using Signals
Metamorphic Code Generator based on bytecode of LLVM IR
Binary code obfuscation through C++ template metaprogramming
Metamorphic Java Engine
Mimimorphism: A New Approach to Binary Code Obfuscation


Еще параллельно иду от обратного, читаю академические работы с противоположной стороны, так лучше можно понять как надо делать:
Semantics-Based Obfuscation-Resilient Binary Code Similarity Comparison with Applications to Software Plagiarism Detection
The devil’s right hand: An investigation on malware-oriented obfuscation techniques
Unity in diversity: Phylogenetic-inspired techniques for reverse engineering and detection of malware families


Вообще по данным кейвордам можно тонну литературы найти на самом деле.. например так Google -> filetype:pdf binary code obfuscation
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Посмотреть вложение 15389
Ну вот, например, один и тот же фрагмент функции из двух разных билдов. Безусловно тут можно проследить некие закономерности, но не забывайте, что мы генерим только одно (по структуре) простое математическое выражение в генераторе мусорного кода и шифруем строки только двумя примитивными алгоритмами. Зная это, мы имеем (на мой взгляд) довольно неплохой результат. Но само собой если эти алгоритмы допилить (а целью статьи алгоритмы не являются) то все будет гораздо лучше.
Which one is this dissassembler? IDA with dark theme?
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Что думаешь про это? Octavian
Enhance virtual-machine-based code obfuscation security through dynamic bytecode scheduling
Виртуализация кода это всегда круто, особенно правильно реализованная, когда сама виртуальная машина морфится и набор опкод тоже...
Но по сути всё зависит от задачи:
- сокрытие сигнатур, тут лучше морфинг кода
- усложнение реверса, тут лучше не снимаемый запутывающий мусорный код
- для сокрытия технологии в коде наилучшим образом подойдет виртуализация.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
для сокрытия технологии в коде наилучшим образом подойдет виртуализация
Да, виртуализация - наверное самый хороший метод для сокрытия технологий. Но весь код ей не накроешь, тк это существенно скажется на производительности. Я пробовал, даже c шитым кодом серьезно просаживает по производительности.
 
А еще её эффективно заморфить сложно, и в vx целях мало применимо потому как это одна большая сигна.
С другой стороны FinSpy например активно используют виртуализацию и мало кто копается в кишках виртуализированного кода.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
А еще её эффективно заморфить сложно, и в vx целях малоприменимо потому как это одна большая сигна.
Да, по хорошему надо при каждой пересборке генерировать разный набор байт-кодов и разный код самой виртуальной машины. Ну либо очень хорошо его морфить.

С другой стороны FinSpy например активно используют виртуализацию и мало кто копается в кишках виртуализированного кода.
У них какая-то своя технология, или они накрывают чем то типа вмпротекта?
 
У них какая-то своя технология, или они накрывают чем то типа вмпротекта?

Полностью кастомная ВМка, можешь глянуть на ресерч от мелкомягких, они там бегло прошлись по ним, или на threat report от positive technologies
Прикольно кстати сделана, чтобы такое запилить и чтобы в конечном итоге все вместе работало и ни один из компонентов системы не отваливался это уже уровень ( там считай 6 уровней стейджинга )
 
Крутая идея кстати для статьи на будущие конкурсы по написанию своей метаморфной ВМки).
Тут да, тут уровень нужен...
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Крутая идея кстати для статьи на будущие конкурсы по написанию своей метаморфной ВМки).
Тут да, тут уровень нужен...
Я могу попробую запилить на следующий конкурс, но это будет явно не из одной части статья, тк по самой виртуализации нужно рассказать - это много текста, а потом еще и мофрить машину - про это тоже много текста. Тема интересная для меня канеш, но не уверен, что нашему уютненькому комьюнити так прям интересны технические темы. В прошлом конкурсе победила не техническая статья. Посмотрим, как люди проголосуют за текущие статьи, если проголосуют плохо, то наверное не стоит их мучать чем то более замудреным и с кучей кода.
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх