game-mail-ru

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, но и многих других триальных приложений, написанных посторонними разработчиками. И — представьте себе — решил! (решение прилагается ниже).

Рисунок 1 «Век Японии» как он есть

К сожалению, по непонятным причинам, «Age-of-Japan» исчезла с games.mail.ru, более того, она исчезла и с официального сайта ее непосредственных разработчиков. Тем не менее, она уже успела расползтись по Интернету, но чтобы не давать ссылки на потенциально ненадежные ресурсы, мы (редакция журнала «Хакер») решили выложить установочный файл на DVD, а так же на: http://nezumi.org.ru/souriz/hacksetupageofjapan.exe (естественно, в оригинальном, не ломанном варианте).

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

Рисунок 2 лучшие игры с games.mail.ru

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

Сразу же после запуска на экран выпрыгивает противное диалоговое окно (см. рис. 3) с неизменным логотипом «игры@mail.ru»и сообщением о то, что у нас осталось 60 минут. Внизу находятся кнопки: [играть], [купить], [еще игры] и [вести колюч]. Последние две кнопки залиты серым цветом и кажутся заблокированы, на самом же деле, они активы — это просто дизайн такой.

Рисунок 3 при первом запуске Age-of-Japan появляется противный NAG-Screen, сообщающий, что игроку дается всего 60 минут

Нажимаем [играть] и гоняем мышь по всему экрану пока не надоест, после чего выходим по <Esc> и видим (см. рис. 4), что количество игрового времени сократилось до 47 минут, а мы ведь даже не начали играть!!!

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

Рисунок 4 попытка зарегистрировать игру случайным ключом

Хорошо, нажимаем [ввести ключ] и вводим какое-нибудь число от балды, например, «123456», наблюдая за реакцией программы, которая после секундной задержки, сообщает нам, что мы ошиблись и ввести неверный номер регистрационного ключа (см. рис. 5). Активность персонального брандмауэра при этом нулевая, то есть защита не ломится в сеть и проверка осуществляется локально, что существенно облегчает взлом. Достаточно дизассемблировать программу, выдрать из нее проверочный код и написать свой собственный генератор серийных номеров…

Вот только… Никаких гарантий, что в остальных программах используется тот же самый алгоритм у нас нет! Более того, этот алгоритм наверняка будет изменен после публикации этой статьи, вынуждая хакеров возвращаться к отладчику, реконструируя его заново, а это такая нудная, тупая и утомительная работа, и к тому же совсем не творческая… Во всяком случае, до сих пор никто универсального генератора еще не написал и не выложил в открытый доступ. А взлом для себя и близких друзей нам не интересен.

Рисунок 5 случайно выбранный ключ не подходит и регистрация обламывается

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

Игре соответствует исполняемый файл «showcase.exe». Загружаем его в любой hex-редактор, например, hiew или FAR) и смотрим в начало файла, где следом за магическом словом «PE» следуют секции с именами UPX0 и UPX1, выдающие имя упаковщика. Скачиваем UPX посвежее с upx.sourceforge.net (благо он бесплатен) и распаковываем файл с помощью самого упаковщика, запущенного с ключом -d (сокращение от decompress).

После этого игра увеличивается в размере с 500 Кб до 3.7 Мегабайт и все текстовые строки, выводимые защитой на экран, становятся зрительно видимыми (см. рис. 6), в частности, нажав <ALT-F7> мы можем найти «У Вас осталось… минут… игры», «Поздравляем Вас! Игра успешно зарегистрирована!», «Ошибка - неверный регистрационный ключ».

Рисунок 6 просмотр текстовых строк в файле showcase.exe, распакованным упаковщиком UPX, запущенным с ключом -d

Действуем по стандартной и годами отработанной схеме. Грузим распакованный файл в IDA Pro (у тех, у кого она есть), находим указанные текстовые строки, по перекрестным ссылкам, сгенерированным ИДОЙ, поднимается «наверх», к тому коду, который их выводит, и анализируем прилегающие к нему окрестности, на предмет поиска условного перехода, определяющего правильность регистрации (см. рис. 7). С одной стороны к нему примыкает код валидации серийных номеров, с другой — счетчик, записывающий в специальную переменную, подсчитывающую количество игровых тиком и обновляемую посредством инструкции MOV. Очевидно, если заменить MOV (копирование данных) командой NOP (нет операции), то игровое время _навсегда_ застынет на отметке в 60 секунд и _никогда_ не будет уменьшаться.

На взлом уйдет чуть больше десятки минут, а в некоторых случаях и меньше того!!!

Рисунок 7 дизассемблирование защитного механизма в IDA Pro

Однако, предложенный способ страдает рядом недостатков. Прежде всего он не универсален и с каждой игрой приходится разбираться индивидуально, что не есть хорошо, особенно если хочется играть во все игры и сразу!!! Так же, неподготовленным пользователям _очень_ сложно объяснить, какие именно действия они должны предпринять для достижения желаемого результата. Вид дизассемблера большинство начинающих хакеров приводит в ужас и они предпочитают пользоваться готовыми кряками, а писать кряки для всех игр… ну какому нормальному профи это нужно?!

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

Так что мы пойдем другим путем. Таким, который заведомо сохранит свою работоспособность даже при кардинальной перестройке защитного механизма.

Очевидно, чтобы знать, сколько времени осталась, защита должна где-то хранить это значение в той или иной форме. Начнем с простого. Копируем игру в другой каталог, запускаем, играем. Возвращаемся к оригиналу. И что же мы видим! Оригинал прекрасно осведомлен сколько времени мы играли!!! Следовательно, игровое время внутри каталога «Age of Japan» не хранится и его нужно искать совершенно в другом месте (что, кстати сказать, совершенно логично, иначе бы игру уже давно сломали).

Для сужения района поиска проведем следующий эксперимент: запустим штатную утилиту MS BackUp (вызываемую из командной строке по «ntbackup.exe») и сохраним образ операционной системы в bkf файл (см. рис. 8), затем поиграем немного (хоть до полного истечения игрового времени), после чего выполним процедуру восстановления из bkf-файла.

Рисунок 8 архивация состояния системы (вместе с данными о прошедшем игровом времени)

Ну и что?! Время «волшебным образом» возвращается назад! Эту операцию можно проделывать сколько угодно раз (пока не надоест), она вполне легальна, но… архивация/восстановление выполняется достаточно тормозно, да к тому же требует прав администратора и перезагрузки. К тому же, образ системы должен быть создан _до_ окончания триала, а не после него.

Тем не менее, теперь и мы точно знаем, что информация о времени хранится в одном из тех мест, что сохраняет MS BackUp, а сохраняет он:

  1. некоторые ветви реестра, сосредоточенные в файлах: system, software, security, sam, default, ComRegDb.bak, образующие ветвь HKEY_LOCAL_MACHINE (остальные ветви реестра _не_ сохраняются);
  2. практически все содержимое папок Sytem32 и System (стратегия отбора файлов не совсем понятна, похоже, берутся все жизненно необходимые компоненты плюс некоторые файлы, относящиеся к установленным приложениям сторонних разработчиков);
  3. некоторые важнейшие файлы и папки из каталога Windows (например, AppPatch, msagent, MICROSOFT.NET, etc);
  4. отдельные файлы и папки из каталога PROGRAM FILES (например, COMMON FILES, Internet Explorer, Outlook Express, etc);
  5. содержимое каталога RSA\MachineKeys из папки DOCUMENTS AND SETTINGS\ALL USERS\APPLICATION DATA\ MICROSOFT\CRYPTO, содержащее ключи шифрования (если, конечно, таковые имеются);

Хорошо, предположим, что данные о времени хранятся в реестре (действительно, прятать их в файлах было бы неразумно и слишком заметно). Берем бесплатный «Registry Monitor» от Марка Руссиновича и смотрим: к каким ветвям реестра обращается программа.

Рисунок 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).

Рисунок 10 kerberos – один из лучших API-шпионов, который мы будем использовать

Однако, если просто скормить ему имя исполняемого файла (в данном случае: «showcase.exe») ничего хорошего из этого не получится и программа завершится не успев еще начаться с сообщением о неправильной установке. Создается такое впечатление, что она содержит мощные анти-отдадочные приемы, сопротивляющиеся шпионажу, но на самом деле все гораздо проще!

В командной строке игра ожидает получить определенный параметр, равный (в случае «Age of Japan») числу «97», что легко выяснить, щелкнув правой клавишей мыши по ярлыку с веером и как следует изучив его свойства (см. рис. 11). От глаз опытного хакера ничто не уйдет!!!

Рисунок 11 просмотр свойств ярлыка — программе передается идентификатор «97» в командной строке

Запускаем Kerberos еще раз, явным образом прописав аргумент «97»в параметрах командой строки (разумеется, в вашем случае это значение может быть другим), после чего жмем на [Inject] и даем ему поработать до появления основного игрового поля на экране, после чего выходим из программы и приступаем к анализу отчета, сохраненного в «showcase.rep» файлеи содержащего сотни тысяч строк, преимущество состоящих из повторяющихся функций, так что пара банок пива нам не помешает.

Подавляющее большинство API-функций, совершенно обычны по своей природе и сохранять значение в реестре (или за его пределами) не могут. Однако, наше внимание привлекает серия функций с префиксом LSA(Local Security Authority), использующихся для хранения секретных криптографических ключей (и другой конфиденциальной информации) в «Защищенном Хранилище», доступа к которому не имеет даже Администратор!!!

Так-так-так!!! Уже тепло, если не сказать ‑ жарко!!! Пахнет чем-то паленым! Наверное, защита горит, точнее догорает. Еще немного и мы ее взломаем!!!

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

По замыслу разработчиков 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_ — изменились, в то время как остальные остались без изменений.

Рисунок 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. Если на компьютере установлено несколько игр, то выяснить какому приложению соответствует та или иная пара ветвей можно при помощи «Каина и Авеля».

Рисунок 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, а уж тем более такими варварскими методами без удаления слот при деинсталляции приложения.

  1. закрытие доступа к базам данных и другим секретным параметрам в коде:
    1. статья Алека Дэвиса, рассказывающая о тайниках операционной системы, пригодных для хранения секретных данных (на русском языке): http://www.microsoft.com/rus/msdn/magazine/archive/2003-11/LockingAccessToSecretDataFull.asp;
  2. LsaStorePrivateData:
    1. официальное описание API-функции LsaStorePrivateData, используемой многими защитными механизмами для хранения триальных данных и прочей секретной информации, предназначенной «не для всех» (на английском языке): http://msdn2.microsoft.com/en-us/library/ms721818.aspx;
  3. Age-of-Japan:
    1. по нижеследующим адресам на 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;