Тут недавно ПМ сказала, что надо обфусцировать нашу плюсовую библиотеку. Я, честно говоря, удивился. Мне приходилось обфусцировать код на Java, на JavaScript. И там я понимаю, зачем это делать. А есть ли смысл обфусцировать плюсовый код?
Ну как-то с натяжкой я могу еще понять, что имеет смысл замаскировать какие-то константные строки с sensitive данными. Но обфускатор как в этом может помочь? Такое ведь надо делать каким-то шифрованием внутри кода.
Поясните, может я туплю или что-то упускаю? Может чего-то не знаю?
Кто-нибудь обфусцировал код на плюсах? Зачем? Добились своей цели? Есть смысл?
DP>>Мне приходилось обфусцировать код на Java, на JavaScript. И там я понимаю, зачем это делать. LVV>А зачем? Я вот ни разу с этим не сталкивался.
Некоторая базовая защита кода от прочтения исходиков. Хотя есть и более замороченные обфускаторы. Естественно, имеет смысл, когда отдаешь библиотеку или приложение пользователю. Когда крутится на сервере — смысла мало, конечно.
DP>Некоторая базовая защита кода от прочтения исходиков. Хотя есть и более замороченные обфускаторы. Естественно, имеет смысл, когда отдаешь библиотеку или приложение пользователю. Когда крутится на сервере — смысла мало, конечно.
Что это некое шифрование (запутывание) кода — я примерно представляю.
Но ведь сложность этого запутывания должна быть такой как и реального шифрования: чтобы затраты на распутывание были соизмеримы с написанием своего аналогичного кода.
Иначе смысла нет.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, DiPaolo, Вы писали:
DP>Поясните, может я туплю или что-то упускаю? Может чего-то не знаю?
Обфусцируют библиотеки, которые нужно передавать клиенту вместе с исходниками.
Детали зависят от цели передачи исходников — мультиплатформенность? какой-то госрепозиторий "исходного кода"? Договорились передать клиенту исходники, но не договорились, в каком виде?)
Программа удаляет комментарии, незначащие пробелы и переименовывают макросы/переменные/функции в нечто вида OO000O, при этом, не меняя логику программы. То есть бинарные коды обфусцированного и необфусцированного текста будут выглядеть одинаково. Обычно применяется, когда по условию лицензионного соглашения необходимо предоставить исходный код.
Обфускация кода с изменением логики программы
В этом случае добавляются лишние ветвления, циклы, вызовы функций и т.д. Бинарные коды обфусцированного и необфусцированного текста будут сильно отличаться. При этом каждый раз создается новая версия. Например, для того, чтобы перестали работать существующие читы и боты в игре достаточно заново обфусцировать исходный код, не меняя ничего внутри. Этот вариант обеспечивает самый высокий уровень защиты от анализа и модификации.
Даже если я очень глупый ничто не мешает мне прочесть название функций, той же nm или ещё чем.
nm -D программа
nm -D библиотека
А дальше по нарастающей, можно понять как работают алгоритмы и прочее с помощью дизассемблеров и декомпиляторов. Конечно, в эпоху свободного кода, когда у людей просто нет времени его разобрать какой-то там местячковый проект никому не сдался. Но если параноить, то вот пожалуйста.
Про читы и боты я не знаю, но в принципе для обфускации должен быть кто-то очень богатый, кто может нанять специалистов по обратной разработке. То есть программа должна иметь какую-то особую ценность. А вообще это требование скорее дали для галочки, как говорится, если в начале пьесы на стене висит ружьё, то в конце оно обязательно выстрелит.
А вот что касается предоставления обфуцированного кода под видом исходного, то это мошенничество. Обфуцированный код это не исходный код, так же как объектный код это не исходный код. Это или какая-то ошибка в договоре, или попытка очковтирательства, которое, кстати, видно в цитате приведённой выше. По условию лицензии нужен исходный код, но используйте наш обфускатор и обмани клиента.
Исхо́дный код (также исхо́дный текст) — текст компьютерной программы на каком-либо языке программирования или языке разметки, который может быть прочтён человеком.
А я бы даже сказал, что исходный код непосредственно написан людьми без какой-либо пост обработки. Мне вообще интересно, если в договоре было написано предоставить исходный код, а особо умный исполнитель взял и обфуцировал его, я не я, корова не моя, на чью сторону встанет суд?
scf>Обфусцируют библиотеки, которые нужно передавать клиенту вместе с исходниками.
scf>Детали зависят от цели передачи исходников — мультиплатформенность? какой-то госрепозиторий "исходного кода"? Договорились передать клиенту исходники, но не договорились, в каком виде?)
Никакой передачи исходников не предполагается. Обычное распространение B2B СДКи: шаред либы под все основные платформы, инклюдники и документация.
Здравствуйте, DiPaolo, Вы писали:
DP>Кто-нибудь обфусцировал код на плюсах? Зачем? Добились своей цели? Есть смысл?
Если кода много — то запутывать врядли имеет смысл.
Есть смыл прятать строковые константы, ключи шифрования, таблицы аппроксимации спецфункций, картинки и подобную информацию, которую легко вытаскивать из исполняемого файла. (Если она ценная, конечно.)
Мне приходилось прятать строки. Использовал compile-time вычисления на constexpr. Не уверен, что эффективно получилось.
Если хотите прятать именно алгоритм, посмотрите в сторону исполнения в виртальной машине или во внешнем usb-устроустве.
Здравствуйте, DiPaolo, Вы писали:
DP>Тут недавно ПМ сказала, что надо обфусцировать нашу плюсовую библиотеку. Я, честно говоря, удивился. Мне приходилось обфусцировать код на Java, на JavaScript. И там я понимаю, зачем это делать. А есть ли смысл обфусцировать плюсовый код?
Какой смысл гадать о целях задачи вместо того, чтобы спросить у ПМ?
Этого не будет достаточно https://manpages.ubuntu.com/manpages/trusty/man1/strip.1.html ? Так-то вполне затрудняет простую отладку. Если же нужно защита от взлома то там уже не обфускатор, там уже поинтереснее нужно. Начинать нужно с защиты от подключения отладчиком, как мне кажется.
Здравствуйте, DiPaolo, Вы писали:
DP>Тут недавно ПМ сказала, что надо обфусцировать нашу плюсовую библиотеку. Я, честно говоря, удивился. Мне приходилось обфусцировать код на Java, на JavaScript. И там я понимаю, зачем это делать. А есть ли смысл обфусцировать плюсовый код?
Здравствуйте, DiPaolo, Вы писали:
G>>Может, имела в виду виртуализацию?
DP>Нет, именно обфускацию
Погуглил, и даже нашел коммерческое решение... http://www.asprotect.ru/asobfuscator.html
Правда в 23-м году ограничиваться C++03 — странно. Видимо в С++14 обфускация и правда ненужна .
Здравствуйте, Chorkov, Вы писали:
C>Видимо в С++14 обфускация и правда ненужна
Обфускация компилируемого исходника вообще не нужна.
Данные бывает обфусцируют, для отдельных кусков кода спецом логику запутывают, но чтоб сурсы обфусцировать это маразм.