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

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

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


Анна Андреева, инженер A1QA


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


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


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


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


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


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


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


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



r

© A1QA for A1QA Blog , 2014. |r
Permalink |r
No comment |r
Add tor
del.icio.us r

r
Post tags:
r


Feed enhanced by Better Feed from Ozh


U
Alt text

Ваша приватность умирает красиво, но мы можем спасти её.

Присоединяйтесь к нам!

a1qa

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