Использование обфускации кода на разных языках - PullRequest
0 голосов
/ 06 января 2011

Я недавно узнал об обфускации кода. Это приятно делать, когда у тебя есть свободное время, но у меня другой вопрос. Зачем это делать?

Во-первых, есть языки, в которых, я уверен, это здорово - интерпретируемые, такие как php, JavaScript и многие другие. Там это кажется хорошей и более безопасной вещью.

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

И последняя категория - это языки, в которых я не совсем уверен. И это главная причина, которую я спрашиваю. Этими языками будут Java, C # (.NET) и последний Silverlight, используемый в WP7. Я спрашиваю, потому что я прочитал статью, в которой говорится, что в приложениях WP7 запутывание кода помогает предотвратить взлом кода. Но я всегда думал, что байт-код очень похож на стандартные коды ассемблера, поэтому опять не имею никакой информации о реальных именах переменных перед компиляцией, именах функций и т. Д. Итак, где же правда?

Ответы [ 2 ]

2 голосов
/ 06 января 2011

Сделайте это, если хотите, но не ожидайте, что какой-то решительный человек будет напуган этим.Существуют де-обфускаторы, люди могут читать обфусцированный код (точно так же, как есть люди, которые могут читать оптимизированную сборку и восстанавливать оригинальный код C).Запутывание кода просто дает вам ложное чувство безопасности и может удержать человека, который просто любопытен (вместо того, чтобы сдерживать тех, кто серьезно относится к краже вашего кода).Все это дает вам ложное чувство безопасности, но не настоящее.Шнайер удачно называет этот «театр безопасности».

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

Еще одна проблема, о которой вы должны знать: если вы даете своим клиентам запутанный исполняемый файл и ваша программа падает, убедитесь, что у вас есть способ получить реальную трассировку стеканазад вместо запутанного.Сказать: «Извините, я не могу определить причину, почему моя программа убила часы вашей работы, так как я решил ее запутать», я не собираюсь ее сокращать, я думаю: -)

0 голосов
/ 06 января 2011

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

...