Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Технологии защиты программного обеспечения > Обфускация C++


Автор: xperienced 14.10.2010, 13:48
Задача - сделать си++ исходник трудночитабельным, позаменять имена функций, классов, переменных. 

Погуглил - все обфускаторы джава или дотнет.

А надо именно си++ и именно исходник (не бинарник).

Кто чего знает?

Автор: UniBomb 14.10.2010, 14:31
xperienced, исходники компилируемых языков как правило не обфусцируют. Их в таких случаях просто не дают. Машинный код может быть, но это сильный удар по производительности. Но если есть настойчивое желание, то ctrl+h тебе в помощь.

Автор: xperienced 14.10.2010, 14:49
Цитата(UniBomb @  14.10.2010,  14:31 Найти цитируемый пост)
исходники компилируемых языков как правило не обфусцируют


"как правило" это ведь не "всегда"? Значит надежда ещё остаётся.
И речь не о том, чтобы давать свой исходник кому-то. 
Здесь скорее поиск альтернативы всяким крипторам - хочется сделать код неузнаваемым для анализаторов (читай антивирусов). 
Почему не использовать именно крипторы? Потому что закриптованность бинарника быстро детектится. 

зы. ctrl-h не катит. сильно долго и муторно.

Автор: UniBomb 14.10.2010, 15:34
Цитата(xperienced @  14.10.2010,  15:49 Найти цитируемый пост)
читай антивирусов

Это скользкая тема. Подобные вещи на форуме запрещено обсуждать.

Автор: djamshud 14.10.2010, 15:44
Я что-то пропустил или антивирусы начали анализировать поведение программ по именам переменных и типов в их (отсутствующих) исходниках?

Автор: xperienced 14.10.2010, 16:42
На самом деле конечно речь не об антивирях. Это я так, для примера. Их так просто не обдуришь.
Да и не пытаюсь обсуждать ничего.

Просто спрашиваю, знает ли кто об обфускаторах  для си++.

Автор: UniBomb 15.10.2010, 08:11
xperienced, если ничего такого делать не собираешся, то.. http://www.google.ru/search?rlz=1C1_____en___RU387&aq=0&oq=C%2B%2B+obf&sourceid=chrome&ie=UTF-8&q=c%2B%2B+obfuscator правильный запрос в гугл. http://soft.necromancers.ru/prog_41853.html, http://www.stunnix.com/prod/cxxo/overview.shtml и http://www.plexaure.de/cobf/index.htm то, что лежит на поверхности. 

Автор: xperienced 15.10.2010, 18:29
Спасибо. Поюзаю, видимо, mangle-it.
Вот кое-что нагуглил и сам (правда не совсем то, о чём спрашивал):
http://www.siliconrealms.com/index.php
http://oreans.com/codevirtualizer.php

Вдруг кому пригодится.

Автор: icecrashldr 28.10.2010, 14:09
http://oreans.com/codevirtualizer.php

Код

 VIRTUALIZER_START      // the area to protect starts here

      printf("Hello World");

 VIRTUALIZER_END       // end of area to protect 


C чего вы взяли что это не пакер? Причем относительно дешевый... Так как имеет широкую популярность и кто мы же без каких либо протектов ... 
Вот если бы он мог любой исполняемый файл морфить , а так токо с заглушками ... 

На самом деле всю куда проще ... 
Все что нужно так это динамический декрипт делать , а для это вариантов масса, причем пишется за несколько дней ... 

Автор: kinetik 27.1.2012, 00:06
Цитата(icecrashldr @ 28.10.2010,  14:09)
На самом деле всю куда проще ... 
Все что нужно так это динамический декрипт делать , а для это вариантов масса, причем пишется за несколько дней ...

А можете примерно сказать где искать алгоритмы и способы?

Автор: ТарасАтавин 30.11.2013, 16:47
Цитата(xperienced @  14.10.2010,  13:48 Найти цитируемый пост)
Задача - сделать си++ исходник трудночитабельным, позаменять имена функций, классов, переменных. 
А зачем? Если ты распространяешь исходник, то делаешь это именно для того, чтоб его читали, а если нет, то его не прочитают независимо от того, приведена ли программа в состояние алкогольного опьянения.

Добавлено через 1 минуту и 34 секунды
Цитата(xperienced @  14.10.2010,  14:49 Найти цитируемый пост)
Здесь скорее поиск альтернативы всяким крипторам - хочется сделать код неузнаваемым для анализаторов (читай антивирусов). 
Они в любом случае не знают языка.

Добавлено через 2 минуты и 14 секунд
Цитата(xperienced @  14.10.2010,  14:49 Найти цитируемый пост)
Потому что закриптованность бинарника быстро детектится. 
А спрашиваешь зачем то про исходник.

Автор: SecRate 5.11.2014, 13:41
Цитата(kinetik @  27.1.2012,  00:06 Найти цитируемый пост)
А можете примерно сказать где искать алгоритмы и способы?

Ну, например, можно динамически определять текущий адрес  в теле процедуры, затем после virtualprotect , декриптить код процедуры, и восстанавливать его после выполнения.
Так , обычно поступают основные пакеры.
Минус тут в том, что можно всегда перехватить обратный енкрипт и сдампить расшифрованный кусок. Т.е. дополнительно нужна верификация.

Автор: Proger10 15.6.2016, 09:27
Хочу поднять старую тему, но интересную.

Тут проскочила фраза:
Цитата(UniBomb @  14.10.2010,  14:31 Найти цитируемый пост)
 исходники компилируемых языков как правило не обфусцируют. 

А почему именно не обфусцируют исходники компилируемых языков? Я так понимаю, они сами обфусцируются при компляции. К примеру, заменяются ли имена переменных, удаляются ли комментарии, шифруются ли строчные значения при компиляции? (интересует для C++, можно даже clang компайлер)

Автор: _zorn_ 18.6.2016, 18:05
Не обфусцируют, потому что исходники нужны для того чтобы потом их изменять/дорабатывать/улучшать.
Если возникла задача обфусцировать исходник, то это одно из двух - либо ты дебил, либо писал на заказ и привязываешь к себе.

А "привязывальщиков" никто не любит.

Автор: Proger10 19.6.2016, 06:42
Цитата(_zorn_ @  18.6.2016,  18:05 Найти цитируемый пост)
Не обфусцируют, потому что исходники нужны для того чтобы потом их изменять/дорабатывать/улучшать.
Если возникла задача обфусцировать исходник, то это одно из двух - либо ты дебил, либо писал на заказ и привязываешь к себе.

А "привязывальщиков" никто не любит.

Не понял. Имелось ввиду, естественно: клонируем исходник, один обфусцируем, его компилируем, публикуем бинарник. Исходные исходники остаются у нас для дальнейших правок. Далее всё по кругу.
Для чего? Для того, чтобы дизассемблировать было сложнее. Так имеет смысл делать или нет? Скорее всего, нет? Объясните, пожалуйста, почему тогда "нет"?

Добавлено через 8 минут и 48 секунд
...В связи с чем, у меня пара вопросов относительно дизасемблирования, покуда сам не шарю:
1. Видны ли имена переменных и функций в бинарнике? (например для C++-LLVM)
2. Видны ли строковые значения в бинарнике?

Автор: _zorn_ 23.6.2016, 21:23
Цитата(Proger10 @  19.6.2016,  13:42 Найти цитируемый пост)
Для чего? Для того, чтобы дизассемблировать было сложнее.

Ой вы такой наивный...
Обфусцировать исходник чтобы бинарник был запутанее... ну это делали наверное еще в 90х  smile 

Компилятор неплохо так оптимизирует человеческий ###код. Но ДАЖЕ если ему приказать не оптимизировать, это будет "пук в лужу" в качестве "защиты от дезасемблирования"

Starforce, Securom, Themida... и т.п. 
Все они специализировались на защите БИНАРНИКОВ (и не плохо это делали)... Где они сейчас ?

ЗЫ. Чтобы не возникало глупых вопросов, изучите ассемблер и пробуйте свой "обфусцированный исходник" под дизасемблером  smile 

Автор: Proger10 23.6.2016, 21:25
Цитата(_zorn_ @  23.6.2016,  21:23 Найти цитируемый пост)
Где они сейчас ? 

Старфорс стоит 450к в год, спрашивал неделю назад у них smile

А что тогда следует делать для защиты от взлома? Порекомендуйте в каком направлении смотреть, если не в этом?

Автор: _zorn_ 23.6.2016, 21:28
Цитата(Proger10 @  24.6.2016,  04:25 Найти цитируемый пост)
Старфорс стоит 450к в год, спрашивал неделю назад у них smile


Я не спрашивал сколько он стоит, я спрашивал ГДЕ ОН СЕЙЧАС ?
Если вы не можете ответить, то я отвечу - в ОПЕ  smile

Добавлено через 7 минут и 5 секунд
Цитата(Proger10 @  24.6.2016,  04:25 Найти цитируемый пост)
А что тогда следует делать для защиты от взлома?

Что вы понимаете под "взломом" ?

Если обычная ###прожка - не заморачивайтесь. Кому надо все равно взломают (если взлом дешевле покупки).
Если что то более серьезное, то тут уже вы мне будете должны денег за консультацию  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)