Да, в целом неплохо, интересно на сколько такая обфускация "раздувает" размер бинаря?
Сложно сказать, зависит от того, на что допиливать трешген и другие алгоритмы. Если накрывать весь код и если нужно сигнатуру авера сбивать, то раза в 1.5-2.0, я думаю. Если усложнить жизнь реверсеру, то раза в два-три.Да, в целом неплохо, интересно на сколько такая обфускация "раздувает" размер бинаря?
кстати, есть идеи на счет сбитие графа, кроме while+switch? Я на таком моменте протупел, когда свой писал.Сложно сказать, зависит от того, на что допиливать трешген и другие алгоритмы. Если накрывать весь код и если нужно сигнатуру авера сбивать, то раза в 1.5-2.0, я думаю. Если усложнить жизнь реверсеру, то раза в два-три.
Ну джамп-тейбл можно сделать, создаешь массив указателей, запихиваешь туда адреса меток, проходишь по массиву и переходишь по меткам. Хотя возможно это какое-то расширение для GCC/MinGW, не уверен, что такое можно в студии делать: https://gcc.gnu.org/onlinedocs/gcc/Labels-as-Values.html Ну можно наверное через лямбды что-то такое сделать, но это уже нужны плюсы стандарта не ниже C++11 штоли.кстати, есть идеи на счет сбитие графа, кроме while+switch?
Ну по разному. Можно делать асм вставки с прыжками в середину инструкций (это сбивает линейные дизассемблеры с толку и каждое такое место нужно руками фиксить, или скрипт для этого писать). Можно в мусорном коде размешать всякие трюки против отладки. Можно виртуализацию кода сделать (по типу VMProtect или Tigress). Тут многое можно придумать.А как усложнить жизнь реверсеру? Примерный концпет в студию.
Ну трешген сразу отпадает. Зашифровать строки и другие бинарные данные, сделать control flow flattening. Если нужно сбивать сигнатуру по коду, то делать это на уровне ассемблера - заменять инструкции на аналогичные, менять местами регистры в инструкциях и тд.И да, главный трабл, как обфусцировать код и при этом минимально раздуть вес?
Ну спрашивай, если что, лучше в этой теме (мало ли у кого-то еще будут похожие проблемы), но можно и в личке, если хочешь так.тут вникать и вникать ещё правда нужно, много чего написано, так с одного прочтения всё не понять мне к сожалению
Tigress кстати тоже встречал, но пока не дошло дело его погонять, есть успешный опыт?по типу VMProtect или Tigress
Накинь плз топ литературы по теме, что по твоему мнению хорошо. Везде, куда не посмотрю, одно и то же .Я тоже много времени провел за анализом научной литературы (а её реально много, например на arxiv.org) по обсускации, морфингу и так далее.
Tigress не выдается, кому попало, чтобы ее получить, насколько я понимаю, нужно подтвердить свою личность, а запросить исходники могут только всякие институты и официальные исследователи в области компьютерной безопасности из официальных контор. Судя по примерам обфускации Tigress, там достаточно хорошо реализована виртуализация кода. Остальные алгоритмы уже давно хорошо известны и описаны. Кстати есть еще забавная проблема в том, что даже если ты получишь сорсы Tigress, то в них еще придется попотеть, чтобы разобраться, так как вся система написана на OCaml'е. Но если вдруг у кого-то есть сорсы, то я был бы очень благодарен, если бы получил их для ознакомления.Tigress кстати тоже встречал, но пока не дошло дело его погонять, есть успешный опыт?
Алгоритмы обфускации не являлись целью статьи, они дают некоторые более менее приемлемые результаты, но не более того. Целью статьи было показать архитектуру и реализацию для типичного обфускатора на базе абстрактного синтаксического дерева. У меня есть обфускаторы, которые используются в реальных кейсах, в частности мы накрываем ими наши тулзы, когда проводим пентест и всякую такую редтимерскую деятельность. Но семплы этого выкладывать не могу.Кстати, а можешь сказать, как используется данная реализация морфера в реальных кейсах или это PoC (понимаю что в статье не все алгоритмы реализованы)?
Code Obfuscation using Code Splitting with Self-modifying CodeНакинь плз топ литературы по теме, что по твоему мнению хорошо. Везде, куда не посмотрю, одно и то же .
Which one is this dissassembler? IDA with dark theme?Посмотреть вложение 15389
Ну вот, например, один и тот же фрагмент функции из двух разных билдов. Безусловно тут можно проследить некие закономерности, но не забывайте, что мы генерим только одно (по структуре) простое математическое выражение в генераторе мусорного кода и шифруем строки только двумя примитивными алгоритмами. Зная это, мы имеем (на мой взгляд) довольно неплохой результат. Но само собой если эти алгоритмы допилить (а целью статьи алгоритмы не являются) то все будет гораздо лучше.
This is VSCode with assembly highlighting.Which one is this dissassembler? IDA with dark theme?
Enhance virtual-machine-based code obfuscation security through dynamic bytecode schedulingЧто думаешь про это? Octavian![]()
Enhance virtual-machine-based code obfuscation security through dynamic bytecode scheduling
Code virtualization built upon virtual machine (VM) technologies is emerging as a viable method for implementing code obfuscation to protect programs …www.sciencedirect.com
Да, виртуализация - наверное самый хороший метод для сокрытия технологий. Но весь код ей не накроешь, тк это существенно скажется на производительности. Я пробовал, даже c шитым кодом серьезно просаживает по производительности.для сокрытия технологии в коде наилучшим образом подойдет виртуализация
Да, по хорошему надо при каждой пересборке генерировать разный набор байт-кодов и разный код самой виртуальной машины. Ну либо очень хорошо его морфить.А еще её эффективно заморфить сложно, и в vx целях малоприменимо потому как это одна большая сигна.
У них какая-то своя технология, или они накрывают чем то типа вмпротекта?С другой стороны FinSpy например активно используют виртуализацию и мало кто копается в кишках виртуализированного кода.
У них какая-то своя технология, или они накрывают чем то типа вмпротекта?
Я могу попробую запилить на следующий конкурс, но это будет явно не из одной части статья, тк по самой виртуализации нужно рассказать - это много текста, а потом еще и мофрить машину - про это тоже много текста. Тема интересная для меня канеш, но не уверен, что нашему уютненькому комьюнити так прям интересны технические темы. В прошлом конкурсе победила не техническая статья. Посмотрим, как люди проголосуют за текущие статьи, если проголосуют плохо, то наверное не стоит их мучать чем то более замудреным и с кучей кода.Крутая идея кстати для статьи на будущие конкурсы по написанию своей метаморфной ВМки).
Тут да, тут уровень нужен...