Защита программы от декомпиляции

Скажите, уверены ли вы на 100% что вашу программу не смогут взломать? Лично я не уверен. Даже самую замечательную защиту при должном внимании вскроют, как банку консервов. Тем более, что вся защита так или иначе сводится всего к нескольким пунктам. Я не буду распылять статью этими методами, лучше напишу другую о защите. В этой же статье мы будем «техниками». Взломщики вооружены гораздо лучше, чем разработчики. Да и взлом программы осуществить гораздо проще, чем написать ее копию. Конечно, реверсеры (это те, кто по дизассемблированному листингу восстанавливает исходный текст программы) зарабатывают в месяц умопомрачительные суммы и, что самое главное, это будет вполне легально. Лично мне самому доводилось патчить  программу для одной фирмы, добавляя  к ней нужный функционал. А все потому, что их штатный программист уехал жить в США, не оставив сорцы этой программы. Когда я учился всем компьютерным премудростям, на одном компьютерном форуме увидел пост, который изрядно меня позабавил. Один «гуру» наставлял новичка, чем лучше всего защищать программу. Наверняка многие из вас слышали о термине «упаковщик» или «пакер». Данные утилиты  сжимают бинарник, модифицируя таким образом таблицы импорта. В итоге любой отладчик буквально вешался. Хотя, вскоре и это дурацкое недоразумение научились обходить, используя всевозможные плагины.  В любом случае, взломщик может снять дамп программы и ковырять уже его.

Так Ольга ругается на упакованный бинарник

Я привел на скриншоте ситуацию,  когда OllyDbg сталкивается с файлом, обработанным пакером.  Вроде бы, задача решена, однако так может показаться только на первый взгляд.  Для той же Ольги сейчас есть множество плагинов, которые могут распаковать бинарники, упакованные многими пакерами.  Распаковать  прогу можно еще до отладки. Вот  поэтому меня и позабавил ответ  «гуру». Он написал, что самую лучшую защиту предоставит UPX, т.к. он бесплатен, в основном не конфликтует с антивирусами и дает достаточную защиту.  В общем, сообщение ориентировано на абсолютных чайников.  Любой пакер оставляет свою подпись в бинарнике, и, умея пользоваться Hex-редакторами, можно определить его сигнатуру. Но как я и обещал, мы будем «техниками». Для определения сигнатуры до сих пор используется программа PeID. У нее есть конкурент в лице LordPE, но зачастую PEId хватает за глаза.

Peid определила компилятор – Delphi 7.

Я выложил в примере скриншот программки, написанной на Delphi 7. Как видите, Peid отлично справилась с задачей. Утилита умеет определять многие типы компиляторов, включая версии Delphi, C++ или C#, типы упаковщиков и протекторов. К сожалению, она перестала поддерживаться и нам приходится довольствоваться лишь старой версией 0.95. У меня была идея возродить эту славную тулзу, но увидев, что многие ее прямые конкуренты развиваются, отбросил идею за ненадобностью. Тем не менее, даже не смотря на ее моральное устаревание, Peid просто обязана быть в арсенале любого более-менее грамотного компьютерщика. А теперь вернемся к тому пресловутому посту, о котором я упомянул в начале статьи. «Гуру» посоветовал новичку защитить программу пакером под названием UPX. Он бесплатен, хорошо упаковывает и отпугнет новичков, увидевших безобразие в Ольге (хотя сейчас этот абсолютно неактуально).  Утилита имеет консольный вид, что иногда отпугивает новичков, не способных использовать командую строку. Однако этузиасты позаботились об этом и привязали к UPX графические окошки. Называется эта программа UPX Shell. Скачать бесплатно вы ее можете  отсюда. Там все очень просто.

Интерфейс UPX Shell

Ну а для тех, кто привык все делать руками в командной строке есть удобные ключи. Я не буду зацикливаться на них, так как ключ ? сам покажет все варианты. Я нарочно сжал свою программу из примера UPX и теперь PEID выдает такое: Как видите, наш пакер сразу обнаружился, что не очень хорошо. Дело в том, что UPX позволяет не только сжимать файлы, но и распаковывать их. Для этого можно воспользоваться ключом –d в консоли или же в том же UPX Shell нажать на соответствующую кнопку. Программа распакуется и с ней можно делать, все, что угодно. Вот так «гуру» вводят в заблуждение. Скажу сразу – достойных упаковщиков я не видел. Есть неплохой пакер от нашего соотечественника Алексея Солодовникова ASPacker, но он устарел и также легко снимается утилитами – анпакерами (или распаковщиками). Кроме того, на упакованные бинарники страшно матерятся антивирусники. Дело в том, что пакеры меняют сигнатуру Pe файла, затрудняя ее анализ антивирусом. В итоге, любой  запакованный вирус, будет не виден антивирусной защите, что поставит под вопрос безопасность вашего компьютера. Поэтому, на всякий случай, производители антивирусов ввели на всякий случай возможность определения любого упаковщика и считать, что там все заражено, помещая упакованный файл в карантин. Особенно этим грешат зарубежные антивирусы. Кстати, тут  есть маленькая польза – именно благодаря антивируснику мы можем узнать версию пакера без всяких там PeID. Можно обойти и это недоразумение, но нужно будет включить свой мозг. Я обещал вам, что мы пока будет «техниками», т.е. использовать готовые программы. Но со временем благодаря моим урокам вы научитесь сами писать достойные защиты. Скептиков могу обрадовать – нам придется вначале обучиться взлому программ (ломать будем мои программы). Разработчики быстро пришли к выводу, что от упаковщиков мало толку и придумали новый способ защиты. Называются они протекторами. Протекторы  на порядок выше упаковщиков, не только сжимая бинарник, но и защищая его. К моим любимчикам могу отнести ASProtect от того же Алексея Солодовникова и очень крутой протектор Armadillio. Да, их тоже определит тот же Peid. Но вот толку от этого будет мало.  Протекторы часто определяют, что запущены в отладчиках  и прекращают свою работу. Дело в предательской функции Api IsDebugPresent (), с которой мы познакомимся на уроках по C++.  Скажу лишь немного, что Windows помечает отладчик как «выполняющийся в специальном режиме», а функция IsDebugPresent() определяет, отлаживается ли программа или нет. В одном из уроков по защите программ я покажу, как при помощи данной функции вырубать многие типы отладчиков. В отличие от упаковщиков, протекторы в большинстве своем платные. Тем не менее, они обеспечивают отличную защиту и уж точно отпугнут дилетантов от взлома. Вам уже будет не так обидно, что вашу зашиту обошел четырнадцатилетний подросток. В конце-концов, если нужно будет взломать вашу программу, ее все равно взломают, а протекторы хотя бы отпугнут многих желающих это сделать.

Ваш VeGA

Рубрика: Хакинг

Комментарии

2 коммент. на “Защита программы от декомпиляции”
  1. Кирилл:

    А как ломают сайты?

  2. aaa:

    sql injection один из простых вариантов 😉

Добавить комментарий

Внимание! Не будут добавляться комментарии в виде откровенного спама или прямого анкора на свои сайты. Все спамеры будут передаваться в базу Akismet

Подтвердите, что Вы не бот — выберите человечка с поднятой рукой: