Реверс-инжиниринг в контексте безопасности ПО

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

Метод № 1: обфускация кода

Обфускация – это приведение кода к трудному для анализа виду при сохранении функциональности кода. К примеру, обфускация значительно усложнит задачу хакера, ведь даже в случае получения исходного кода ему будет очень сложно понять, что же этот код делает.

Мутация — один из самых эффективных видов обфускации. Это означает, что приложение регулярно меняет свой исходный код в процессе работы, что значительно усложняет задачу реверс-инжиниринга. Но это палка о двух концах: обфусцированный код «нечитаем» как для злоумышленника, так и для разработчика. К тому же, добавление лишних ветвей кода может понижать производительность приложения и даже добавлять ошибки.

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

Метод № 2: проверка целостности

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

Метод № 3: шифрование

Шифрование программного кода позволяет проверить, что лишь «легальные» покупатели имеют право использовать приложение, то есть при отсутствии ключа шифрования программа будет либо неработоспособной, либо станет функционировать лишь по trial-веткам. Но и тут нельзя гарантировать сохранность кода, так как всегда есть вероятность раскрытия механизма генерирования ключей.

Что учесть при выборе?

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

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

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

По материалам: https://www.a1qa.ru/blog.