Каковы преимущества запутывания кода релиза?

12

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

Minecraft написан на Java, и трассировки стека обычно выглядят так (реальный пример):

java.lang.NullPointerException
    at d.a(SourceFile:247)
    at gi.b(SourceFile:92)
    at bd.a(SourceFile:33)
    at bn.a(SourceFile:69)
    at bn.e(SourceFile:115)
    at bn.d(SourceFile:103)
    at net.minecraft.client.Minecraft.i(SourceFile:1007)
    at net.minecraft.client.Minecraft.run(SourceFile:596)
    at java.lang.Thread.run(Unknown Source)

Очевидно, что это не настоящие имена пакетов и методов, которые разработчик использует, когда пишет. Поскольку он находится в стадии альфа, кажется, что разработчик хотел бы иметь возможность разобраться в его трассировках стека, особенно если кто-то может предоставить его для отчета об ошибках. Поскольку это стоит, это в основном бессмысленно.

Какое преимущество можно было бы надеяться получить, запутав свой код таким образом, чтобы преодолеть недостатки более сложной идентификации ошибок?

StrixVaria
источник
1
Проще говоря, запутывание изменяет экономику обратного проектирования вашего кода, не более того.
Марк Бут

Ответы:

22

Мы также запутываем наш Java-код ....

Преимущество состоит в том, что это усложняет реинжиниринг (если вы беспокоитесь о том, что кто-то может украсть вашу кодовую базу и использовать ее в качестве основы для создания аналогичного конкурирующего продукта, например, и т. Д.).

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

Это не имеет недостатков на самом деле. :)

Бобби Столы
источник
3
Интересно, я никогда не знал, что они пришли с «не запутыванием следа стека» (никогда не использовавшим обфускатор) ... какая изящная идея :-)
Дин Хардинг
1
Единственный недостаток, с которым я когда-либо сталкивался, - это иногда обфускатор (в данном случае - .NET) запутывает его до такой степени, что джиттер даже не может его прочитать (недопустимые инструкции). Массовый провал.
vcsjones
@vcsjones: Тогда это не совсем запутанность ...
конфигуратор
3
  • защита вашей интеллектуальной собственности

Большинство obfuscator также оптимизируют ваш код , удаляют ненужные метаданные или неиспользуемый код, сжатие, удаление мертвого кода или удаление дубликатов.


источник
Если для таких оптимизаций нужно использовать обфускатор, используемый компилятор должен быть очень ленивым программным обеспечением.
Френель
@phresnel: Да, обфускатор может сделать довольно хорошую работу
@phresnel: неполный, вероятно, но дрянной ...
Вы правы. Позвольте мне репост.
Френель
1
Дело не в том, что я тебе не верю; Я делаю! Но все эти оптимизации обычно также осуществляются современными компиляторами. По крайней мере, я знаю, что у gcc есть все. Поэтому мое мнение таково: если обфускатор действительно дает вам значительное ускорение, то либо компилятор [vendor] не слишком старался, либо ему не были предоставлены соответствующие флаги оптимизации.
Френель