Допустим, ваше приложение использует веб-сервис "www.example.com" и аутентифицируется с паролем "letmein". Скомпилируйте программу и проверьте ее с помощью strings
, objdump
или чего-либо еще:
$ make
$ objdump -j .rodota -s program
a.out: file format elf64-x86-64
Contents of section .rodata:
4005f8 01000200 7777772e 6578616d 706c652e ....www.example.
400608 636f6d00 6c65746d 65696e00 com.letmein.
$ strings program
/lib64/ld-linux-x86-64.so.2
__gmon_start__
...
www.example.com
letmein
Это довольно легко. Если вы запутываете его, вам все равно нужно поместить обычный текст в память, прежде чем вы сможете его использовать, поэтому взломщик выполняет одно из следующих действий:
- Перехватывает сетевые пакеты (легко, занимает 5 минут с базовыми знаниями Wireshark)
- Использует отладчик (легко, занимает 10 минут с базовыми знаниями GDB)
- Обратный инжиниринг вашего исходного кода (трудно, занимает несколько часов или дней)
Обратите внимание, что инструменты запутывания усложняют работу только тем злоумышленникам, которые уже делают это сложным путем. Какой в этом смысл? Все, что вы сделали, - это взяли 15 минут, а не 5 минут, чтобы злоумышленник получил пароль от вашего исполняемого файла. Поскольку это в значительной степени лучшее, что вы можете сделать, не усердно работайте над этим. Просто сделайте XOR пароль с простым рисунком и надейтесь, что злоумышленники очень ленивы или глупы.
C-3PO: Мастер Люк, сэр. Извините за вопрос, но что делать R2 и мне, если нас здесь обнаружат?
Люк: Закрой дверь.
Хан Соло: И надеюсь, что у них нет бластеров.
C-3PO: Это не очень обнадеживает.
(Возможно, вы потратите на это больше времени, чем ваш злоумышленник.)
С другой стороны: Если вы пытаетесь запретить пользователям без полномочий root доступ к паролю в доверенной системе, вы можете сделать это с разрешениями и двоичными файлами setuid.
Сноска: Цель обфускаторов вообще - скрыть программу код , а не данные. Например, если ваше приложение использует алгоритм, являющийся коммерческой тайной, тогда вы захотите использовать обфускатор.