Блог A1QA

О тестировании и качестве ПО

Реверс-инжиниринг в контексте безопасности настольных и мобильных приложений (часть 2)

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

Так как же обезопасить свое приложение или хотя бы усложнить задачу злоумышленнику?

3 популярных способа обезопасить приложение

1 способ: обфускация кода

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

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

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

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

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

3 способ: шифрование программного кода

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

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

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

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

Гарантированного решения не существует, но при помощи предложенных методов защиты можно максимально усложнить задачу злоумышленнику.

Поделиться статьей: