2016-11-29 5 views
-2

Я занимался некоторыми исследованиями в обфускации, мне было интересно, насколько эффективна оптимизация для обфускации кода.Использование оптимизации в запутывании кода C++

Будет ли оптимизация кода удалять вещи из сборки, которые помогли бы кому-то перепроектировать код?

В целом, что делает оптимизация кода, чтобы сделать сборку труднее понять? Общие ответы в порядке, я просто хочу понять соотношение между ними, если они есть.

Edit: Это не для клиента, это для отдыха запутывания и любопытства

+2

Не очень эффективен. Любой квалифицированный программист сборки и/или инженер-реверс имеет опыт чтения оптимизированного кода, учитывая, что каждый устанавливает свой компилятор для генерации релизов. В более общем плане, обфускация не очень эффективна. Самое лучшее, на что вы можете надеяться, - это замедлить работу хорошего реверсивного инженера или, возможно, остановить сценарий kiddie. Если ваше приложение стоит взломать, кто-то его взломает. Сосредоточьтесь на том, чтобы сделать его достойным взломать, что также заставит его заплатить за него. –

ответ

2

Существует мало смысла в запутывании кода C++ при доставке клиенту бинарного исполняемого файла или библиотеки.

Обфускация обычно используется в интерпретируемых языках, чтобы препятствовать обратному проектированию. Затем это делается с помощью программного обеспечения, чтобы исходный код был удобочитаемым/поддерживаемым.

Что касается влияния производительности. Обфускация обычно дает переменные/функции случайным и бессмысленным именам наряду с удалением пробела. Это не повлияет на двоичный код из компиляции C. Поэтому не будет иметь никакого значения.

2

Код запутывание может означать разные вещи. Обычно это относится к трюкам, которые делают код более сложным или невозможным для чтения.

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

+0

Черт возьми, если вы достаточно запутаете источник, ваш код может быть легче читать к моменту завершения оптимизации компилятора. – user4581301

+0

Значит, использование флагов ничего особенного не осложняет сборку? Когда я посмотрел на отладку, он выглядел странно, и я удивился, что это не имеет большого значения, чем я думал! – Semaphore

+0

@JayM. Компилятор возьмет безумный, запутанный беспорядок, который является исходным кодом и проанализирует его на [синтаксическое дерево] (https://en.wikipedia.org/wiki/Abstract_syntax_tree). После того, как у него есть дерево, он будет фильтровать мякину, сдвигать узлы вокруг и в противном случае принудительно ввести нормальный порядок в дереве, чтобы он мог ускорить выходную программу. Затем все станет немного более сумасшедшим, так как дерево преобразуется в машинные команды, но в выходе будут отличаться шаблоны, распознаваемые тем, кто знаком с процессором и компилятором. – user4581301