Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

articles:game-mail-ru [2017/09/05 02:55] (текущий)
Строка 1: Строка 1:
 +====== game-mail-ru ======
 +<​sub>​{{game-mail-ru.odt|Original file}}</​sub>​
 +
 +====== games.mail.ru — универсальный взлом за 3 минуты ======
 +
 +крис касперски ака мыщъх, a.k.a. nezumi, a.k.a. souriz, no-email
 +
 +**проект ****games.mail.ru ****"​крышует"​ многие условно-бесплатные игры, работающие всего один час, а затем требующие денег**** (****или расплаты натурой). народ бьется в истерике,​ разрывая свой хвост напополам — платить за софт у нас не принято и унизительно (это все равно что платить за секс), а играть-то хочется! причем,​ серийные номера меняются чуть ли не каждый день и кряки, найденные в сети, не срабатывают. между тем, существует простой,​ элегантный и _универсальный_ способ взлома,​ доступный даже продвинутым пользователям,​ не разбирающимся ни в дизассемблере,​ ни в секретах хакерства!**
 +
 +===== введение — постановка задачи =====
 +
 +Мы будем потрошить симпатичную гейму "​**Age-of-Japan**"​ от компании "LoLo Games" (см. рис. 1). Остальные игры ломаются аналогичным образом,​ поскольку построены на том же самом "​движке"​. Ну, может быть, не все игры, но подавляющее большинство точно. Мыщъх проверял "​**Тайны Египта**"​ (http://​nevosoft.ru/​downloadable-game/​brickshooter-egypt.htm),​ "​**Пузырьковое Ассорти**"​ (http://​games.mail.ru/​shareware/​game/​puzyrkovoe_assorti/​) и еще несколько других,​ взятых наугад.
 +
 +После "​Age-of-Japan"​ они вскрываются на автомате без всяких умственных усилий,​ причем,​ стратегия взлома такова,​ что разработчикам навряд ли удастся исправить защиту после выхода этой статьи. Даже если они перепишут ее с чистого листа, это ничего не поменяет. Мыщъх поставил перед собой задачу:​ не просто хакнуть конкретно взятую игрушку,​ а найти универсальный способ взлома,​ подходящий не только для games.mail.ru,​ но и многих других триальных приложений,​ написанных посторонними разработчиками. И — представьте себе — решил! (решение прилагается ниже).
 +
 +{{game-mail-ru_Image_0.png?​553}}
 +
 +Рисунок 1 "​Век Японии"​ как он есть
 +
 +К сожалению,​ по непонятным причинам,​ "​Age-of-Japan"​ исчезла с games.mail.ru,​ более того, она исчезла и с официального сайта ее непосредственных разработчиков. Тем не менее, она уже успела расползтись по Интернету,​ но чтобы не давать ссылки на потенциально ненадежные ресурсы,​ мы (редакция журнала "​Хакер"​) решили выложить установочный файл на DVD, а так же на: http://​nezumi.org.ru/​souriz/​hacksetupageofjapan.exe (естественно,​ в оригинальном,​ не ломанном варианте).
 +
 +Кстати говоря,​ сам взлом не противоречит УК, поскольку не модифицирует ни одного байта, непосредственно относящегося к игре, поскольку хачить программы это, во-первых,​ не хорошо,​ а во-вторых,​ не универсально.
 +
 +{{game-mail-ru_Image_1.png?​553}}
 +
 +Рисунок 2 лучшие игры с games.mail.ru
 +
 +===== первые эксперименты или артобстрел перед боем =====
 +
 +Запускаем "​setupageofjapan.exe"​и устанавливаем ее на свой компьютер (разумеется,​ это может быть не только "​Век Японии",​ но и любая другая игра, ведь принцип взлома универсален вплоть до мельчайших деталей). Установка проходит успешно и на рабочем столе появляется красивый красный веер, по которому предполагается щелкнуть мышью. Дважды.
 +
 +Сразу же после запуска на экран выпрыгивает противное диалоговое окно (см. рис. 3) с неизменным логотипом "​игры@mail.ru"​и сообщением о то, что у нас осталось 60 минут. Внизу находятся кнопки:​ [играть],​ [купить],​ [еще игры] и [вести колюч]. Последние две кнопки залиты серым цветом и кажутся заблокированы,​ на самом же деле, они активы — это просто дизайн такой.
 +
 +{{game-mail-ru_Image_2.png?​541}}
 +
 +Рисунок 3 при первом запуске Age-of-Japan появляется противный NAG-Screen, сообщающий,​ что игроку дается всего 60 минут
 +
 +Нажимаем [играть] и гоняем мышь по всему экрану пока не надоест,​ после чего выходим по <Esc> и видим (см. рис. 4),​ что количество игрового времени сократилось до 47 минут,​ а мы ведь даже не начали играть!!!
 +
 +Кстати говоря,​ защита подсчитывает только игровое время, а не время установки программы на компьютер,​ благодаря чему мы можем растянуть удовольствие на целую неделю,​ играя каждый день по десять минут. Хорошая новость для любителей халявы. Плохая же состоит в том, что опроса текущей даты в момент запуска игры не производится и "​остановить время"​ путем перевода даты или использования утилит типа Trial Freezer ни за что не удастся. Иначе весь Интернет уже давно бы был завален руководствами по взлому.
 +
 +{{game-mail-ru_Image_3.png?​543}}
 +
 +Рисунок 4 попытка зарегистрировать игру случайным ключом
 +
 +Хорошо,​ нажимаем [ввести ключ] и вводим какое-нибудь число от балды, например,​ "​123456",​ наблюдая за реакцией программы,​ которая после секундной задержки,​ сообщает нам, что мы ошиблись и ввести неверный номер регистрационного ключа (см. рис. 5). Активность персонального брандмауэра при этом нулевая,​ то есть защита не ломится в сеть и проверка осуществляется локально,​ что существенно облегчает взлом. Достаточно дизассемблировать программу,​ выдрать из нее проверочный код и написать свой собственный генератор серийных номеров…
 +
 +Вот только… Никаких гарантий,​ что в остальных программах используется тот же самый алгоритм у нас нет! Более того, этот алгоритм наверняка будет изменен после публикации этой статьи,​ вынуждая хакеров возвращаться к отладчику,​ реконструируя его заново,​ а это такая нудная,​ тупая и утомительная работа,​ и к тому же совсем не творческая… Во всяком случае,​ до сих пор никто универсального генератора еще не написал и не выложил в открытый доступ. А взлом для себя и близких друзей нам не интересен.
 +
 +{{game-mail-ru_Image_4.png?​540}}
 +
 +Рисунок 5 случайно выбранный ключ не подходит и регистрация обламывается
 +
 +Нам нужно найти универсальный способ,​ подходящий для всех игр сразу (в том числе и тех, которые еще не вышли) и желательно не конфликтующий с законом,​ поскольку за распространение кряков,​ генераторов или серийных номеров легко схлопотать по мозгам. Что поделаешь — программисты не любят, когда ломают их программы.
 +
 +===== на подступах к взлому =====
 +
 +Игре соответствует исполняемый файл "​showcase.exe"​. Загружаем его в любой hex-редактор,​ например,​ hiew или FAR) и смотрим в начало файла, где следом за магическом словом "​PE"​ следуют секции с именами UPX0 и UPX1, выдающие имя упаковщика. Скачиваем UPX посвежее с upx.sourceforge.net (благо он бесплатен) и распаковываем файл с помощью самого упаковщика,​ запущенного с ключом -d (сокращение от decompress).
 +
 +После этого игра увеличивается в размере с 500 Кб до 3.7 Мегабайт и все текстовые строки,​ выводимые защитой на экран, становятся зрительно видимыми (см. рис. 6),​ в частности,​ нажав <​ALT-F7>​ мы можем найти "//У Вас осталось… минут… игры//",​ "//​Поздравляем Вас! Игра успешно зарегистрирована!//",​ "//​Ошибка - неверный регистрационный ключ//"​.
 +
 +{{game-mail-ru_Image_5.png?​553}}
 +
 +Рисунок 6 просмотр текстовых строк в файле showcase.exe,​ распакованным упаковщиком UPX, запущенным с ключом -d
 +
 +Действуем по стандартной и годами отработанной схеме. Грузим распакованный файл в IDA Pro (у тех, у кого она есть), находим указанные текстовые строки,​ по перекрестным ссылкам,​ сгенерированным ИДОЙ, поднимается "​наверх",​ к тому коду, который их выводит,​ и анализируем прилегающие к нему окрестности,​ на предмет поиска условного перехода,​ определяющего правильность регистрации (см. рис. 7). С одной стороны к нему примыкает код валидации серийных номеров,​ с другой — счетчик,​ записывающий в специальную переменную,​ подсчитывающую количество игровых тиком и обновляемую посредством инструкции MOV. Очевидно,​ если заменить MOV (копирование данных) командой NOP (нет операции),​ то игровое время _навсегда_ застынет на отметке в 60 секунд и _никогда_ не будет уменьшаться.
 +
 +На взлом уйдет чуть больше десятки минут, а в некоторых случаях и меньше того!!!
 +
 +{{game-mail-ru_Image_6.png?​553}}
 +
 +Рисунок 7 дизассемблирование защитного механизма в IDA Pro
 +
 +Однако,​ предложенный способ страдает рядом недостатков. Прежде всего он не универсален и с каждой игрой приходится разбираться индивидуально,​ что не есть хорошо,​ особенно если хочется играть во все игры и сразу!!! Так же, неподготовленным пользователям _очень_ сложно объяснить,​ какие именно действия они должны предпринять для достижения желаемого результата. Вид дизассемблера большинство начинающих хакеров приводит в ужас и они предпочитают пользоваться готовыми кряками,​ а писать кряки для всех игр… ну какому нормальному профи это нужно?​!
 +
 +В принципе,​ возможно расшифровать алгоритм генерации серийных номеров,​ который должен быть общим для всех игр, но… никаких гарантий в этом у нас нет, тем более, что изменить алгоритм (имея исходные тексты игры на руках) минутное дело и хакерские генераторы тут же откажут в работе,​ а постоянно дорабатывать их ни у кого желания нет.
 +
 +Так что мы пойдем другим путем. Таким, который заведомо сохранит свою работоспособность даже при кардинальной перестройке защитного механизма.
 +
 +===== начинаем ломать =====
 +
 +Очевидно,​ чтобы знать, сколько времени осталась,​ защита должна где-то хранить это значение в той или иной форме. Начнем с простого. Копируем игру в другой каталог,​ запускаем,​ играем. Возвращаемся к оригиналу. И что же мы видим! Оригинал прекрасно осведомлен сколько времени мы играли!!! Следовательно,​ игровое время внутри каталога "Age of Japan" не хранится и его нужно искать совершенно в другом месте (что, кстати сказать,​ совершенно логично,​ иначе бы игру уже давно сломали).
 +
 +Для сужения района поиска проведем следующий эксперимент:​ запустим штатную утилиту MS BackUp (вызываемую из командной строке по "​ntbackup.exe"​) и сохраним образ операционной системы в bkf файл (см. рис. 8),​ затем поиграем немного (хоть до полного истечения игрового времени),​ после чего выполним процедуру восстановления из bkf-файла.
 +
 +{{game-mail-ru_Image_7.png?​507}}
 +
 +Рисунок 8 архивация состояния системы (вместе с данными о прошедшем игровом времени)
 +
 +Ну и что?! Время "​волшебным образом"​ возвращается назад! Эту операцию можно проделывать сколько угодно раз (пока не надоест),​ она вполне легальна,​ но… архивация/​восстановление выполняется достаточно тормозно,​ да к тому же требует прав администратора и перезагрузки. К тому же, образ системы должен быть создан _до_ окончания триала,​ а не после него.
 +
 +Тем не менее, теперь и мы точно знаем, что информация о времени хранится в одном из тех мест, что сохраняет MS BackUp, а сохраняет он:
 +
 +  - некоторые ветви реестра,​ сосредоточенные в файлах:​ system, software, security, sam, default, ComRegDb.bak,​ образующие ветвь HKEY_LOCAL_MACHINE (остальные ветви реестра _не_ сохраняются);​
 +  - практически все содержимое папок Sytem32 и System (стратегия отбора файлов не совсем понятна,​ похоже,​ берутся все жизненно необходимые компоненты плюс некоторые файлы, относящиеся к установленным приложениям сторонних разработчиков);​
 +  - некоторые важнейшие файлы и папки из каталога Windows (например,​ AppPatch, msagent, MICROSOFT.NET,​ etc);
 +  - отдельные файлы и папки из каталога PROGRAM FILES (например,​ COMMON FILES, Internet Explorer, Outlook Express, etc);
 +  - содержимое каталога RSA\MachineKeys из папки DOCUMENTS AND SETTINGS\ALL USERS\APPLICATION DATA\ MICROSOFT\CRYPTO,​ содержащее ключи шифрования (если, конечно,​ таковые имеются);​
 +Хорошо,​ предположим,​ что данные о времени хранятся в реестре (действительно,​ прятать их в файлах было бы неразумно и слишком заметно). Берем бесплатный "​Registry Monitor"​ от Марка Руссиновича и смотрим:​ к каким ветвям реестра обращается программа.
 +
 +{{game-mail-ru_Image_8.png?​552}}
 +
 +Рисунок 9 наблюдаем к каким ветвям реестра обращается защита
 +
 +Таких ветвей на самом деле очень много, но при тщательном разборе лога обращают на себя внимание два ключа, название которых,​ говорит самого за себя: **HKCU\Software\ITTGames\58\RemainTime** и **HKCU\Software\ITTGames\58\TotalTime**,​ то есть сколько времени осталось и сколько его всего соответственно.
 +
 +Попробуем их изменить?​! От предвкушения близкой победы у нас пересыхает во рту и мы едва попадаем по клавишам. Однако,​ все наши действия имеют нулевой эффект,​ воздействующий только на "​градусник"​ (линейку прогресса),​ но игра все равно завершается в положенный срок, несмотря на захаченный реестр.
 +
 +Собственно,​ этого и следовало ожидать. MS BackUp _не_ сохраняет HKEY_CURRENT_USER,​ следовательно,​ значения,​ содержащиеся в этой ветви, используются защитой исключительно в качестве вспомогательных данных (например,​ для быстрой отрисовки градусника без актуального запуска защитного механизма). Впрчем,​ такой трюк ничуть не усложняет взлом (во всяком случае для тех, кто помимо монитора реестра владеет техникой отладки и знает ассемблер как свой хвост родной).
 +
 +Но, прежде чем бросаться в объятия,​ дизассемблера,​ нелишне запустить API-шпион,​ чтобы узнать с какими системными функциями работает защита и в каком направлении нам вообще копать. API-шпионов много. Лично мыщъх предпочитает бесплатный Kerberos (см. рис. 10) от Рустема Фасихова (http://​www.wasm.ru/​baixado.php?​mode=tool&​id=313).
 +
 +{{game-mail-ru_Image_9.png?​419}}
 +
 +Рисунок 10 kerberos – один из лучших API-шпионов,​ который мы будем использовать
 +
 +Однако,​ если просто скормить ему имя исполняемого файла (в данном случае:​ "​showcase.exe"​) ничего хорошего из этого не получится и программа завершится не успев еще начаться с сообщением о неправильной установке. Создается такое впечатление,​ что она содержит мощные анти-отдадочные приемы,​ сопротивляющиеся шпионажу,​ но на самом деле все гораздо проще!
 +
 +В командной строке игра ожидает получить определенный параметр,​ равный (в случае "Age of Japan"​) числу "​97",​ что легко выяснить,​ щелкнув правой клавишей мыши по ярлыку с веером и как следует изучив его свойства (см. рис. 11). От глаз опытного хакера ничто не уйдет!!!
 +
 +{{game-mail-ru_Image_10.png?​420}}
 +
 +Рисунок 11 просмотр свойств ярлыка — программе передается идентификатор "​97"​ в командной строке
 +
 +Запускаем Kerberos еще раз, явным образом прописав аргумент "​97"​в параметрах командой строки (разумеется,​ в вашем случае это значение может быть другим),​ после чего жмем на [Inject] и даем ему поработать до появления основного игрового поля на экране,​ после чего выходим из программы и приступаем к анализу отчета,​ сохраненного в "​showcase.rep"​ файлеи содержащего сотни тысяч строк, преимущество состоящих из повторяющихся функций,​ так что пара банок пива нам не помешает.
 +
 +Подавляющее большинство API-функций,​ совершенно обычны по своей природе и сохранять значение в реестре (или за его пределами) не могут. Однако,​ наше внимание привлекает серия функций с префиксом **LSA**(//​**L**////​ocal ////​**S**////​ecurity ////​**A**////​uthority//​),​ использующихся для хранения секретных криптографических ключей (и другой конфиденциальной информации) в "​Защищенном Хранилище",​ доступа к которому не имеет даже Администратор!!!
 +
 +Так-так-так!!! Уже тепло, если не сказать ‑ жарко!!! Пахнет чем-то паленым! Наверное,​ защита горит, точнее догорает. Еще немного и мы ее взломаем!!!
 +
 +This file generated by kerberos API spy v1.02
 +
 +(C) 2004-2005 Rustem Fasihov ​ <​fasihov@mail.ru>​
 +
 +Mon Aug 13 19:13:34 2007
 +
 +Plugin not installed
 +
 +Analyzing database...
 +
 +OK...
 +
 +Installing hooks
 +
 +OK...
 +
 +DLL's in database: ​ 2
 +
 +DLL's failed to load:  0
 +
 +Functions in database: ​ 1302
 +
 +Functions failed to initialize:​0
 +
 +======================================================================================MODULE_NAME ​ RET_ADDR ​ FUNCTION_NAME
 +
 +======================================================================================showcase.exe | 0047268C | GetProcAddress(77DB0000,​ 011EAF08: "​LsaOpenPolicy"​)
 +
 +...
 +
 +showcase.exe | 0047268C | GetProcAddress(77DB0000,​ 011EAF08: "​LsaStorePrivateData"​)
 +
 +...
 +
 +showcase.exe | 0047268C | GetProcAddress(77DB0000,​ 011DE920: "​LsaClose"​)
 +
 +...
 +
 +showcase.exe | 0047268C | GetProcAddress(77DB0000,​ 011EAF08: "​LsaOpenPolicy"​)
 +
 +...
 +
 +showcase.exe | 0047268C | GetProcAddress(77DB0000,​ 011F1F58: "​LsaRetrievePrivateData"​)
 +
 +...
 +
 +showcase.exe | 0047268C | GetProcAddress(77DB0000,​ 011EAF08: "​LsaFreeMemory"​)
 +
 +...
 +
 +showcase.exe | 0047268C | GetProcAddress(77DB0000,​ 011DE920: "​LsaClose"​)
 +
 +...
 +
 +showcase.exe | 0047268C | GetProcAddress(77DB0000,​ 011EAF08: "​LsaOpenPolicy"​)
 +
 +...
 +
 +showcase.exe | 0047268C | GetProcAddress(77DB0000,​ 011F1F58: "​LsaRetrievePrivateData"​)
 +
 +showcase.exe | 0047268C | GetProcAddress(77DB0000,​ 011EAF08: "​LsaFreeMemory"​)
 +
 +showcase.exe | 0047268C | GetProcAddress(77DB0000,​ 011DE8C0: "​LsaClose"​)
 +
 +...
 +
 +...
 +
 +...
 +
 +showcase.exe | 004752D1 | GetTickCount() returns: 0048C3BF
 +
 +...
 +
 +...
 +
 +...
 +
 +showcase.exe | 00405171 | ExitProcess(00000000) ​
 +
 +======================================================================================END OF REPORT
 +
 +Листинг 1 фрагмент отчета API-шпиона (приводится с сокращениями),​ выявляющий обращение к функциями с префиксом LSA
 +
 +===== битва за LSA =====
 +
 +По замыслу разработчиков NT, доступ к секретной информации должна получать только та программа,​ которая их туда положила. Между тем, функции LsaRetrievePrivateData/​LsaStorePrivateData,​ дающие доступ ко _всем_ секретным данным,​ существовали еще со времен NT 4.0, хоть и оставались недокументированными (типа для внутренних нужд системы). Однако,​ сейчас о них знает каждый (или практически каждый) хакер. Физически они сосредоточены в файле \WINNT\system32\config\SAM,​ монтируемом на следующую ветвь системного реестра:​ **HKLM\SECURITY\Policy\Secrets**,​ доступа к которому имеет только System, но, увы, не Администратор!
 +
 +Тем не менее мы можем написать несложную утилиту,​ читающую и записывающую секретные данные с помощью API-функций LsaRetrievePrivateData/​LsaStorePrivateData,​ что позволит нам получить неограниченный триал. Вся проблема в том, что мы не знаем, в какой именно слот (см. врезку "​скрытая угроза"​) игра записывает свои данные,​ более того, прежде чем править эти данные (а они зашифрованы) в них как минимум следует разобраться,​ анализируя мегабайты дизассемблерного текста,​ что утомительно,​ непродуктивно и опять-таки не универсально (а ведь наша цель — универсальный взлом!).
 +
 +К счастью,​ существует множество бесплатных LSA-шпионов,​ например,​ "​Каин-и-Авель"/"​Cain-n-Abel"​ (http://​www.oxid.it/​cain.html) услугами которого мы и воспользуемся. Запускаем шпион на стерильной машине (то есть _до_ установки любой игры из тех, что представлены на games.mail.ru),​ запускаем "​Каина",​ переходим в раздел "​LSA Secrets",​ нажимаем кнопку "​+"​ на панели инструментов и… получаем дамп секретов в шестнадцатеричной форме.
 +
 +Затем устанавливаем "​Age-of-Japan"​ (или любую другую игрушку),​ повторяем сканирование вновь и ага! В дампе появляться пара слот вида L$DTnn, L$DTnn_ (см. рис. 12),​ где nn – некоторое число, например,​ равное "​22"​. Поиграем немного и повторим сканирование LSA еще один раз. Слоты L$DTnn, L$DTnn_ — изменились,​ в то время как остальные остались без изменений.
 +
 +{{game-mail-ru_Image_11.png?​552}}
 +
 +Рисунок 12 шпионаж за содержимым LSA-слотов с помощью утилиты "​Каин и Авель"​
 +
 +Таким образом,​ мы нашли где защита прячет свои данные и теперь остается придумать,​ как уговорить ее продолжить работу даже после истечения триала.
 +
 +===== техника взлома =====
 +
 +Мы находимся на финальной стадии взлома,​ но от самого взлома нас отделяет множество путей. Можно, например,​ написать перехватчик,​ подменяющий вызовы LSA-функций своими собственными процедурами,​ лишь имитирующими запись в "​Защищенное Хранилище",​ но не осуществляющий ее физически. Это довольно универсальный способ,​ работающий со множеством триальных программы (а не только тех, что с games.mail.ru),​ но ему присущи по меньшей мере два серьезных недостатка:​
 +
 +а) это же сидеть и писать надо! то есть тратить время, шевелить мозгом,​ стучать по клавиатуре и вращать хвостом. скажите честно — оно вам надо?!
 +
 +б) некоторые программы _действительно_ нуждаются в LSA и с подобным перехватчиком работать не будут, поэтому,​ нам придется изобретать сложный эвристический механизм,​ позволяющий отличить "​защитные данные"​ от честных криптографических ключей. LSA интенсивно используется системой (особенно Server 2003) и потому автоматический перехват приводит к развалу Windows, в чем мыщъх уже успел убедиться.
 +
 +На самом деле для взлома ничего своего писать не нужно — вполне хватит и штатных средств в лице "​Редактора Реестра"​. Вот только заглянуть в нужную весть даже с правами администратора ни за что не получается. Нас просто туда не пустят! Ведь это все-таки Защищенное Хранилище,​ а не проходной двор! Но ведь не писать же из-за этого целый драйвер?​!
 +
 +Разумеется нет! Достаточно воспользоваться штатным планировщиком,​ запускающим приложения с привилегиями System, позволяя нам просматривать и модифицировать все ветви реестра без исключения (в том числе и защищенные!).
 +
 +Запускаем "​regedit32"​ (полноценный 32-битный редактор реестра),​ указав время на минуту или две вперед текущего и терпеливо ждем. Если редактор не появится на экране,​ значит,​ мы забыли задать ключ "/​interactive"​или служба планировщика отключена — зайдите в раздел "​Службы"​ и включите.
 +
 +
 +
 +**Текущее время: 19:​61:​****59****,​69#​ ****узнаем текущее время**
 +
 +**Введите новое время:​**
 +
 +at 19:63 /​interactive regedt32.exe#​ устанавливаем запуск regedit32 на минуту вперед
 +
 +Листинг 2 запуск "​Редактора Реестра"​ через штатный планировщик с привилегиями System
 +
 +Когда "​Редактор Реестра"​ наконец-то запустится,​ открываем ветвь **HKLM\SECURITY\Policy\Secrets** и смотрим что у нас там (см. рис. 13). Подветви виде L$DTnn и L$DTnn_ принадлежат играм games.mail.ru. Если на компьютере установлено несколько игр, то выяснить какому приложению соответствует та или иная пара ветвей можно при помощи "​Каина и Авеля"​.
 +
 +{{game-mail-ru_Image_12.png?​552}}
 +
 +Рисунок 13 работа с LSA-слотами в Редакторе Реестра
 +
 +Идея — экспортируем пару ветвей L$DTnn/​L$DTnn_ в reg-файлы,​ а когда игровое время закончиться — просто импортируем их оттуда (//​**внимание**////:​ просто навести курсор на ////​reg-////​файл и нажать на ////<​ENTER>​ ////​явно недостаточно — у нас просто не хватит прав! и потому необходимо запустить "​Редактор Реестра"​ через команду ////at.exe ////и выполнить импорт уже в нем с привилегиями ////​System//​).
 +
 +Действуя таким образом,​ мы можем продлевать игровое время бесконечное количество раз (как вручную,​ так и по расписанию,​ благо планировщик под рукой, а "​Редактор Реестра"​ еще не разучился понимать ключи командной строки). Этот трюк особенно полезен для игр типа "​бродилка",​ которые не позволяет сохранять состояния игрока,​ а бродить по ним можно часами и так обидно,​ когда отпущенное время заканчивается на самом интересном месте, буквально в двух шагах от победы! Так что планировщик рулит!
 +
 +А как быть, если мы спохватились слишком поздно и отпущенное нам игровое время уже истекло?​! Экспорт/​импорт в этом случае ничего не даст, но!!! Если набраться смелости и удалить пару ветвей L$DTnn/​L$DTnn_,​ при следующем запуске игра сообщит,​ что она неправильно установлена и потребует переустановки,​ после которой… Правильно! Мы получим целый час законного игрового времени!!!
 +
 +===== заключение =====
 +
 +Вот мы и поломали "​Age-of-Japan",​ а вместе с ней… и все остальные игры с games.mail.ru,​ включая многочисленные триальные защиты,​ скрывающие данные в LSA. На самом деле, назвать эти действия "​взломом"​ язык не поворачивается! Ведь код и данные игры остаются в полной неприкосновенности,​ ну а из _своего_ _собственного_ Защищенного Хранилища мы вправе выкидать всякий мусор, который туда записывается без нашего ведома. ​
 +
 +Так что с юридической точки зрения,​ все законно и привлечь "​хакеров"​ к ответственности очень трудно даже в наше смутное время, когда на пиратов устаиваются массовые облавы… Короче,​ братва,​ здесь один закон — тайга, но и в тайге жить можно.
 +
 +===== >>>​ врезка скрытая угроза =====
 +
 +Защитный метод, используемый games.mail.ru (и многими другими триальными приложениями) порочный и небезопасный. Объем LSA Policy ограничен 4096 слотами и примерно половина из них уже занята и активно используется системой (здесь,​ в частности,​ хранятся пароли служб Windows). Причем при удалении программ с games.mail.ru,​ используемая ими пара слот остается в реестре (на тот случай,​ если вдруг пользователь решит переустановить программу,​ ранее установленную в системе). Таким образом,​ мы можем устанавливать не больше 4096/​2/​2 == 1024 программ с games.mail.ru,​ а на практике и меньше этого, после чего Windows войдет в штопор и произойдет общесистемный крах.
 +
 +Кому-то 1024 программ может показаться _очень_ большой величиной,​ но это не так. Если система не переустанавливается годами,​ но каждый день устанавливается/​удаляется новое программное обеспечение (а, почему бы, собственно и нет?! может, мы любим поэкспериментировать!).
 +
 +Такими темпами отведенный лимит исчерпывается очень быстро. И что самое интересное,​ начиная с Windows 2000 функции LsaStorePrivateData/​LsaRetrievePrivateData официально документированы и существует множество утилит,​ отображающих содержимое Защищенного Хранилища. Наконец,​ существует "​Редактор Реестра",​ а сама технология взлома широко описана в доступной литературе,​ так что это никакая не защита,​ а так… пионерство сплошное.
 +
 +Microsoft вообще не рекомендует использовать LSA, а уж тем более такими варварскими методами без удаления слот при деинсталляции приложения.
 +
 +===== >>>​ врезка утилиты для мониторинга LSA =====
 +
 +  - **Cain & Abel**:
 +    - www.oxid.it;​
 +  - **LSA Secrets**:
 +    - http://​www.windowsnetworking.com/​nt/​registry/​rtips320.shtml;​
 +  - **LSASecretsDump v1.10**:
 +    - http://​www.nirsoft.net/​utils/​lsa_secrets_dump.html;​
 +  - **LSASecretsView screenshot**:​
 +    - http://​www.bestvistadownloads.com/​screenshot/​lsasecretsview-download-ruumoiwi.html;​
 +  - **LSASecretsView v1.10 - View LSA secrets stored on your computer**:
 +    - http://​www.nirsoft.net/​utils/​lsa_secrets_view.html
 +===== >>>​ врезка прочие полезные ресурсы =====
 +
 +  - **закрытие доступа к базам данных и другим секретным параметрам в коде**:
 +    - статья Алека Дэвиса,​ рассказывающая о тайниках операционной системы,​ пригодных для хранения секретных данных (на русском языке):​ http://​www.microsoft.com/​rus/​msdn/​magazine/​archive/​2003-11/​LockingAccessToSecretDataFull.asp;​
 +  - **LsaStorePrivateData**:​
 +    - официальное описание API-функции LsaStorePrivateData,​ используемой многими защитными механизмами для хранения триальных данных и прочей секретной информации,​ предназначенной "не для всех"​ (на английском языке):​ http://​msdn2.microsoft.com/​en-us/​library/​ms721818.aspx;​
 +  - **Age-of-Japan**:​
 +    - по нижеследующим адресам на games.mail.ru раньше размещалась замечательная игрушка "​Age-of-Japan",​ которая потом неожиданно утратилась:​ http://​games.mail.ru/​shareware/​game/​vek_yaponii/​ и http://​downloads.games.mail.ru/​4336/​27653/​setupageofjapan.exe?​time=1186554051&​hash=f24b923f0ee25ed7b6521d7e3d39210e;​
 +