Реверсинг и обфускация, как это работает
Многие в детстве разбирали свои игрушки в надежде понять, как они устроены, т.е. задатки реверс-инженера есть у каждого второго. Однако, у кого-то это с возрастом прошло, в то время как другие, наоборот, отточили свои умения и достигли в этом определенного мастерства.
Например Китай - это настоящая прародина реверс-инженеров. На любом значимом событии: автосалоне, показе мод, выставке оружия вы обязательно увидите китайцев, которые тщательно все фотографируют с тем, чтобы через некоторое время (обычно очень непродолжительное) сделать свой аналог, обычно намного дешевле и более низкого качества, хотя тут бывают и исключения. Зачастую, то же самое касается и программного обеспечения, но в данном случае цели и задачи могут отличаться.
Кому нужен реверс-инжиниринг программного обеспечения?
Если отбросить промышленный шпионаж, реверс-инжиниринг широко используется аналитиками для препарирования вирусов и создания средств защиты. В то же время, аналогичный подход применяется для анализа ПО с закрытым исходным кодом, поиска уязвимостей и создания вирусов. Также энтузиастами проводится анализ драйверов и некоторых других полезных утилит с закрытым исходным кодом для того, чтобы создавать аналоги для Linux с открытым кодом. Хотите поиграть бесплатно? Генераторы ключей для платного ПО, пиратские серверы онлайн-игр также создаются с помощью реверс-инжиниринга. Однако, взлом софта и обратная разработка это, в большинстве случаев, разные вещи, для взлома, как правило, достаточно разобрать процесс проверки ключа лицензии, а во втором случае придется потратить намного больше времени и сил.
Как бороться с реверсингом?
Прежде всего, можно затруднить анализ программы на уровне разработчика, продвинутый кодер может раздуть код искусственным образом, тогда, даже имея оригинальные исходники, зачастую будет непонятно, как все работает. Этот способ не рекомендуется, потому как над одним и тем же проектом в разное время могут вести работу различные команды разработчиков, искусственное усложнение исходного кода может сильно затруднить работу.
Самым известным и популярным способом защиты является обфускация – превращение исходного кода в кашу, понять что-либо в которой в принципе невозможно. Программа берет исходную инструкцию в коде и делает из нее несколько, делающих то же самое, плюс еще много ложных инструкций, которые предназначены исключительно для того, чтобы запутать реверс-инженера. Широко применяется как в обычных программах, так и в вирусах, особенно в полиморфных, что приводит к появлению многих копий одной и той же вредоносной программы, каждая новая копия которой отличается от оригинала и других копий. С шедеврами в области обфускации кода и признанными мастерами в этой области можно познакомиться, например, на этом сайте.
Что касается надежных программ для обфускации кода, с этим сложнее. На самом деле, их сотни, и многие являются платными. Ссылки не привожу по той причине, что надежность той или иной программы определить сложно. Если на торренте лежит взломанный обфускатор, значит он уже проанализирован, алгоритмы его работы, возможно, уже известны, значит он бесполезен.
Помните о том, что помимо защиты от посторонних обфускатор не дает разработчику возможности отлаживать собственный код, поэтому при отладке необходимо его отключать.
Как бороться с защитой от реверсинга?
На первом этапе бинарный код обычно преобразовывают дизассемблером или декомпилятором, иногда этого достаточно, если разработчик не применил каких-то специальных средств, затрудняющих анализ. Однако, в большинстве случаев не обойтись без отладчика и специальных скриптов, потому что разработчик не заинтересован в анализе своего кода сторонними пользователями - ведь это ведет к появлению бесплатных аналогов и взлому существующих версий программы.
Реверс-инжиниринг - это тема не для одной статьи, где я смог более-менее подробно остановиться только на основном - на обфускации кода.Хотите узнать больше - ставьте лайк, и мы более подробно обсудим эту тему в следующей статье.
А тем, кто хочет стать программистом, рекомендуем профессию «Веб-разработчик».