trial-uni-hack

универсальный взлом триальных программ

крис касперски ака мыщъх, no-email

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

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

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

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

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

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

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

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

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

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

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

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

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

Рисунок 1 с программой, запущенной из-под VM Ware, можно работать так же, как и с обычной программой

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

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

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

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

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

Рисунок 2 определение даты создания файла через «Проводника»

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

Рисунок 3 определение даты создания с помощью FAR'а

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

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

Рисунок 4 поиск файлов с заданной датой на диске

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

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

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

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

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

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

Рисунок 5 запуск программы от имени другого пользователя

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

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

Рисунок 6 резервирование реестра с помощью штатной утилиты Microsoft Backup

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

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

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

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

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

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

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

Ломать — не строить и во взломе ничего сложного нет. Защитные механизмы намного проще, чем они кажутся. Главное – начать, а там мы по ходу что-нибудь да придумаем. Например, начнем точить ассемблер и осваивать отладчик, постепенно переходя от грубого взлома в сторону намного более ювелирного.