Информационные технологииStfw.Ru 🔍

Кряк без дизассемблера

Универсальный взлом триальных программ Крис Касперски
🕛 28.08.2008, 13:59
Универсальный взлом триальных программ

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

Цена шаровар невелика и в среднем составляет порядка 20-50 долларов, однако десяток мелких утилит уже обгоняет в стоимости легальный дистр хрюши и вплотную приближается к стоимости таких мощных пакетов, как, например, Photoshop. Но если на Photoshop'е многие реально зарабатывают деньги (и его приобретение окупается), то эти утилиты сосут деньги, делая жизнь приятной в мелочах, но не собираются возвращать их назад, так что разработчикам шаровар следует задуматься о ценовой политике. Снижение стоимости в два раза, зачастую повышает продажи в четыре!

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

Мыщъх, демонстрируя разнообразные техники взлома, в первую очередь стремился показать слабость и бесполезность популярных защитных механизмов, неспособных остановить даже квалифицированных пользователей, вооруженных набором утилит, входящих в штатную поставку операционных систем семейства Windows NT, не говоря уже о специализированных хакерских отмычках!
Какие бывают защиты

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

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

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

Загвоздка в том, где может храниться защитный флаг. Очевидно, не в каталоге самой программы, поскольку в этом случае он гибнет при его удалении (а удалить каталог программы - первое, что придет в голову пользователю). Следовательно, это должен быть либо каталог Windows (включая все подкаталоги), либо реестр. Программы времен MS-DOS записывали флаг своего присутствия в энергонезависимую CMOS-память, в физические сектора жесткого диска или в другие злачные места, но сейчас время защит подобного типа уже прошло. Впрочем, это неудивительно, поскольку запись в CMOS возможна только с нулевого кольца (то есть защите понадобится драйвер), а низкоуровневая работа с жестким диском нуждается в правах администратора и вызывает срабатывание проактивных антивирусных технологий, в результате чего защищенная программа теряет значительную часть рынка и пользователи начинают шарахаться от нее, как от приведения, что, в общем-то, вполне закономерно.

Как показывает личный опыт автора, реестр и каталог Windows покрывают приблизительно от 90% до 96-99% всех триальных программ, что дает большую вероятность на успешный обход триала. Но прежде чем отправляться на поиски флага регистрации, рассмотрим пару альтернативных способов взлома.
Виртуальные машины

Рост тактовой частоты современных процессоров вызывает ответный рост интереса к всевозможным эмуляциям. Продвинутые виртуальные машины типа VMware позволяют вполне комфортно работать с Windows 2000 уже на Pentium III 733 MHz, а на Pentium 4 все уже просто летает.

Поддержка виртуальной мыши и общего буфера обмена существенно упрощает работу с гостевыми осями. По умолчанию виртуальная мышь всегда включена. Просто перемещаем курсор внутрь окна VMware и автоматически переключаемся на гостевую операционную систему. Соответственно, переводя его за пределы окна, возвращаемся к основной (host) операционной системе. А поддержка виртуальной сети позволяет программам работать с интернетом (если, конечно, им это нужно). В общем, не жизнь, а самая настоящая сказка.

Не так уж трудно раз в месяц переустановить гостевую ось со всеми триальными программами, а в последних версиях VMware все даже проще. Механизм Record/Replay позволяет создавать слепки операционной системы, проигрывая их сколько угодно раз. Очевидно, что, создав слепок до установки защищенной программы и выполнив откат, мы сможем установить ее заново сколько угодно раз и защита этому не воспрепятствует (на самом деле воспрепятствует, но об этом мы поговорим чуть позже).

В общем, использование виртуальных машин - это не такая уж и безумная идея. Она хорошо работает со сложными защитами, которые не удается взломать никаким другим путем. Однако если программа требует прямого доступа к железу (особенно к видеокарте), то VMware тут не поможет. Допустим, устанавливаем мы поверх VMware видеоплеер, и что? Ни тебе аппаратного сглаживания изображения, ни тебе оверлея для правильной цветопередачи… и, чтобы не тормозило, потребуется нехилая мощность ЦП. То же самое относится к 3D-играм и скринсейверам. Действительно, какой смысл в скринсейвере, если он работает только под VMware?!
Игры со временем

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

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

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

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

Файловый монитор, конечно, чрезвычайно мощная штука, но среднестатистическая программа обращается к сотням, а то и к тысячам системных файлов: динамическим библиотекам, шрифтам… Замаскировать флаг своего присутствия под DLL или шрифт - плевое дело, а вот обнаружить его без отладчика - это ж какую интуицию надо иметь!

Не-е-ет! Мы пойдем другим путем! Заходим в Program Files и смотрим на дату создания (не путать с датой MS-DOS!) файлов программы или дату создания ее каталога. Чтобы узнать дату создания, достаточно щелкнуть по файлу (каталогу) правой кнопкой мыши и в появившемся контекстом меню выбрать пункт «Свойства». В FAR'е то же самое делается путем нажатия на <Ctrl-A>.

Так, записываем (запоминаем) эту дату, после чего нажимаем «Пуск -> Поиск -> Файлы и папки» и говорим искать файлы, датированные этим числом. Действуя таким образом, мы найдем все файлы/папки, созданные программой при инсталляции. А также все файлы и папки других программ, установленных в тот же самый день. Для простоты предположим, что мы устанавливаем не более одной программы в день.

Сносим защищенную программу через «Установку/Удаление программ», после чего повторяем поиск вновь. Файлы, которые не будут удалены, с определенной степенью вероятности и окажутся флагами присутствия. Удаляем их в корзину (или перемещаем в другой каталог) и переустанавливаем защищенную программу.

В каких случаях описанная техника поиска файлов-флагов не срабатывает (разумеется, при том условии, что защита хранит флаги присутствия именно в файлах, а не в реестре)? Первое, что приходит в голову, - использование NTFS-потоков. Да, действительно, на файловой системе NTFS можно беспрепятственно создать еще один поток внутри уже существующих файлов, ранее созданных другими программами (если, конечно, у защищенной программы достаточно прав). Однако потоки не поддерживаются FAT'ом и потому делают защиту крайне неуниверсальной. К тому же о потоках знают далеко не все программисты. В общем, на практике потоки используются очень редко.

А вот что используется часто, так это создание флагов присутствия уже после установки. При первом запуске программы или за несколько дней до истечения срока действия триала. А после срабатывания триала очень часто создается еще и флаг «Сработал триал». Обнаружить такие флаги позволяет «Поиск файлов, созданных за последние… дней», находящийся там же, где и «Поиск файлов и папок».
Поиск флага в реестре

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

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

Хорошо, пусть в пользовательском. А как его найти? Вот тут кто-то советует воспользоваться монитором реестра Марка Руссиновича, чтобы посмотреть, к каким ветвям реестра обращается программа при установке. Очевидно, что одной из этих ветвей будет флаг присутствия. Однако, помимо флага присутствия, программа читает и другие ветви реестра. Очень много ветвей! Настолько много, что на поиск нужной может уйти несколько дней. К тому же удалять ветви, к которым произошло обращение, очень опасно, особенно если их назначение неизвестно. Одно неверное движение мышью - и хана системе. Вот так радость!

На самом деле искать флаг присутствия совершенно необязательно! «Пуск -> Настройка -> Панель управления -> Пользователи и пароли». Создаем нового пользователя, заставляя систему генерировать девственно чистый экземпляр пользовательского реестра, и устанавливаем программу, войдя в систему под его именем. Если программа установилась и успешно работает, значит она действительно хранит флаг присутствия в пользовательском реестре.

Теперь заходим в систему под нашим основным именем, создаем ярлык исполняемого файла защищенной программы, щелкаем по нему правой клавишей мыши и в «Свойствах» ставим галочку напротив пункта «Запускать от имени другого пользователя». Все! Теперь при каждом запуске программы будет высвечиваться диалоговое окно для ввода имени и пароля, что немного раздражает, но все же лучше, чем совсем ничего. Однако не все программы могут быть запущены подобным образом, и для некоторых из них необходимо использовать штатную утилиту командной строки runas.exe с ключами /profile и /env, назначение которых можно узнать из справки.

Переходим к более сложной части - системному реестру. Самое лучшее, что можно сделать, - это до установки защищенной программы вызвать штатную утилиту Microsoft Backup (Пуск -> Выполнить -> ntbackup.exe), во вкладке «Архивация» взвести галочку «Состояние системы», сохранив реестр на диск. После окончания срока действия триала достаточно выполнить операцию восстановления, возвращая реестр в исходное состояние. При этом, естественно, теряются все системные настройки, выполненные после архивации, и перестают работать программы, установленные после этого момента, требуя переустановки, что является главным недостатком описанной методики.

С другой стороны, свыше 90% триальных программ хранит флаги присутствия именно в системном реестре, а потому Microsoft Backup становится весьма эффективным средством взлома. В принципе ничего не мешает нам установить все постоянные программы (не требующие регистрации), после чего зарезервировать реестр, тогда время обустройства системы после отката существенно сократится.

Существуют специализированные утилиты типа TrailReset, ищущие флаги присутствия, которые создаются популярными протекторами типа Armadillo, ASProtect, ExeCryptor, etc, и удаляющие их из реестра, не трогая настройки остальных программ, что позволяет получить вечный триал без лишнего геморроя. Однако достаточно часто TrailReset не срабатывает, вынуждая нас прибегать к ручному сохранению/восстановлению реестра.

Мы также можем задействовать утилиты, предназначенные для деинсталляции программ, которые не умеют удалять себя сами. Таких утилит очень много, но принцип их работы один: перед установкой программы создается слепок реестра, а после выполняется поиск вновь созданных ветвей. Утилиты автоматической деинсталляции ломают большое количество триальных защит, но… далеко не все. В частности, в системном реестре содержится так называемое «защищенное хранилище», в которое лезет большинство триальных программ, но которое не проверяет ни одна известная мне утилита автоматической деинсталляции.
Сложные защиты

Развитие интернета привело к появлению мерзкого класса триалов, требующего активации через Сеть. Если на активацию отпущено хотя бы семь дней, мы имеем тот же самый триал, но только с крылышками, ломаемый посредством сохранения/восстановления реестра (или же поиском флагов на диске). Хуже, если активация требуется при первом же запуске программы! Такие защиты обычно работают по следующему принципу: программа определяет конфигурацию компьютера, отправляя данные на сервер активации. Если на сервере активации такая конфигурация еще не обозначена, сервер отправляет кодовый ответ «Включить триал», после чего программа работает определенное количество дней. Повторные активации, как легко сообразить, не дают желаемого результата, поскольку сервер видит, что этот пользователь уже активировал программу, а его срок действия триала истек.

Ситуация кажется безнадежной, но нас здорово выручает тот факт, что в информацию о конфигурации обычно входит и MAC-адрес сетевой карты (если она есть). Теоретически он должен быть уникален и на планете Земля не может существовать двух сетевых карт с одинаковыми MAC-адресами. Но это, повторяюсь, теоретически. Практически же MAC-адрес легко изменить с помощью специальных утилит. А еще проще и безопаснее - установить драйвер виртуальной сетевой карты, MAC-адрес которой зачастую может быть изменен через графический интерфейс управления драйвером!

Также некоторые (между прочим, достаточно многие) защиты откладывают активацию до первого выхода в интернет, справедливо полагая, что постоянный доступ в Сеть есть не у всех и включать его в список обязательных требований по меньшей мере негуманно. Следовательно, спасти нас от посягательств защиты может любой нормальный персональный брандмауэр - достаточно запретить программе ломиться в интернет! Впрочем, пародия на брандмауэр под названием Windows Firewall, встроенная в XP, помогает далеко не всегда. Дело в том, что она не запрещает программам вызывать системные функции, определяющие, подключен ли компьютер к интернету или нет. А потому, если компьютер подключен к интернету, но установить соединение с сервером активации не удается, защита вправе потребовать, чтобы пользователь открыл ей доступ на брандмауэре.

Другой тонкий момент. Некоторые защиты содержат в своем теле жестко прошитую дату «забастовки», например, на шесть месяцев отстоящую от текущей даты. Тогда, даже если мы удалим флаг присутствия, переустановить программу по окончании этого срока уже не удастся. Выход - скачать свежую версию или же перевести системные часы назад (воспользоваться утилитой Trial Freezer).

WARNING

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

Информационная безопасность   Теги:

Читать IT-новости в Telegram
Информационные технологии
Мы в соцсетях ✉