Сейчас на форуме: subword, rtsgreg1989, zds (+9 невидимых)

 eXeL@B —› Основной форум —› Универсальный UnWrapper для игр
. 1 . 2 . >>
Посл.ответ Сообщение

Ранг: 9.5 (гость)
Активность: 0.010
Статус: Участник

Создано: 09 апреля 2008 20:53 · Поправил: geograph
· Личное сообщение · #1

Универсальный UnWrapper для игр.

В последнее время очень популярными стали небольшие логические игры от Reflexive, Alawar, LoloGames, NevoSoft и др. Объясняется это, на мой взгляд, тем, что игрушки эти относительно небольшие, что позволяет скачивать их большому количеству пользователей, порой даже интересные, а так же они являются хорошим способом убить время, сидя дома, а особенно на работе И, конечно, компании не просто так распространяют свои игры, а хотят за это денег (пусть и небольших, но порой быстрее найти кряк для игры, чем возится с ее покупкой). Вам предлагают заплатить за игру и получить серийный номер, иначе вы не сможете играть больше отведенного триального времени. В играх от Reflexive это 60 минут, от Alawar – 30 минут.
Сегодня мы попробуем взломать некоторые из этих игрушек, а также написать для них универсальный кряк. Практически все эти игры используют для защиты, так называемый wrapper. Под эти словом подразумевается программа, которая из себя запускает одну или несколько других программ. В данном случае, имеется файл игры (.rwg – в Reflexive, .wrp или .wrp.exe – в Alawar), который специально поврежден и при обычном запуске выдает ошибку или просто не запускается. Wrapper запускает этот файл и уже в памяти восстанавливает байты необходимые для работоспособности файла. Для того, чтобы убрать этот wrapper совсем, оставив только саму игру, нам нужно узнать куда и какие байты записываются.

Reflexive.

Начнем с игр от Reflexive. В примере будет использована игра Astrobatics, но вы можете взять любую другую (т.к. принцип один и тот же) или вообще ничего не брать, а просто посмотреть, что у меня получилось ;)
И так берем отладчик (я взял OllyDbg) и запускаем из под него Astrobatics.exe. Ставим бряк на CreateProcess, т.к. именно эта функция используется для запуска файла игры:

bp CreateProcessA

Нажимаем F9 (Debug>Run) появляется окно для запуска игры, где показано сколько нам осталось играть. Кстати забыл сказать, что для успешного взлома у Вас должна остаться хотя бы минута времени , если время совсем не осталось до придется пропатчить wrapper, про это я расскажу чуть позже.
И так нажимаем “Play Game” и оказываемся в отладчике. Нажимаем Ctrl-F9 (Debug>Execute till return) пока не окажемся в основном модуле (в строке заголовка должно быть написано “module Astrobat”). Тут видим, что открывается процесс (OpenProcess) и из него читаются данные (ReadProcessMemory). Трейсим программу по F8 до ReadMemory попутно запоминаем/записываем адрес буфера (Buffer), куда читаются данные, и размер буфера (BytesToRead). У меня Buffer = 0A30910, а BytesToRead = 3C. Теперь откроем буфер в дампе:

d 0A30910

Сейчас можно выделить это дело от 0A30910 до 0A30910+3C и куда-нибудь скопировать, чтобы потом по этим данным найти место в файле куда пишутся данные, но это делать не обязательно, т.к. адрес в файле можно было увидеть выше (pBaseAddress) хотя и его запоминать не обязательно, т.к. данные записываются с точки входа (EntryPoint).
Дальше по коду идет расшифровка прочитанных байт. Это все можно пропустить и поставить бряк на функцию записи в процесс (WriteProcessMemory), которая находится чуть ниже. Теперь жмем F9 (Debug>Run), проходим WriteProcessMemory и видим в нашем буфере (0A30910) уже расшифрованные данные, те самые, которые мы должны записать в файл. Выделяем их в дампе от 0A30910 до 0A30910+3C и копируем (Binary>Binary Copy). Теперь можно используя любой HEX-редактор открыть наш .RWG-файл, начиная с точки входа записать эти данные. А можно прямо здесь, используя OllyDbg: после того как скопировали буфер, открываем в отладчике .RWG-файл, после загрузки курсор должен стоять на точке входа, если в настройках не указано иное. У меня он равен 491AB4, переходим по этому адресу в дампе:

d 491AB4

Выделяем байты от 491AB4 до 491AB4+3C (размер данных) и вставляем то, что было скопировано (Binary>Binary Paste). Теперь нужно это дело сохранить – в контекстном меню дампа, выбираем “Copy to executable file” откроется наш файл, там в контекстном меню выбираем “Save File” и сохраняем его под новым именем например Astrobatics_new.exe. Теперь если все сделано верно, игра должна работать и тогда можно удалить старый .EXE и .RWG. Кстати, в отличие от официально зарегистрированной игры в нашей не открывается окошко после выхода ;)
Можно взломать проще пропатчив 2 байта в самом wrapper’е, там где проверка на регистрацию. Открываете оригинальный .EXE в любом HEX-редакторе и ищите последовательность байт:

84 C0 74 0E 8B CE

Что соответствует командам:

test eax,eax
je XXXXXXXX
mov ecx,esi

Заменяем это на

84 C0 90 90 8B CE

Т.е. убираем переход. Должно работать, правда теперь после закрытия игры Вы будете лицезреть окошко с благодарностями за регистрацию
Как реализовать данный unwrapper в программе Вы можете увидеть обратившись к исходникам в конце статьи.

Alawar.

Теперь возьмемся за игры от Alawar. Я буду ковырять игру «Маленькие бомберы возвращаются», принцип тот же самый, правда wrapper защищен ASProtect’ом и не поддается автораспаковщику Stripper. Ну что же, снимем дамп с запущенного игрового файла (.WRP или .WRP.EXE) и будем сравнивать с оригиналом. Начнем сравнение с точки входа, точка входа у дампа переместилась несколько ниже, чем у оригинала и содержит следующие команды:

push XXXXXXXX; у меня push 004C22F0
ret

Программа при запуске сразу же переходит по адресу XXXXXXXX, скорее всего, это оригинальная точка входа. Не будем добавлять переход в .WRP-файл, а просто изменим точку входа на адрес XXXXXXXX отняв ImageBase и посмотрим что получится (в моем случае 4C22F0-400000=C22F0). EntryPoint можно поменять например утилитой PETools. Вуаля, игровой файл запустился!!! (если конечно Вы все правильно сделали и принцип зашиты не поменялся). Вот и вся защита Теперь можно файл .WRP переименовать в .EXE, а старый .EXE удалить. Кстати, alawar’ские игрушки хранят информацию о том, сколько Вам осталось играть в реестре. В ветви [HKCU\Software\Aent Sys\pr\], содержатся разделы с названиями игр (только без гласных букв и на английском языке), например игра «Маленькие бомберы возвращаются» сохраняет время в разделе “lttlbmbrsrtrns”. Дальше идет подраздел из шести цифр (обычно «200711» или «200802», наверное, это год и месяц выпуска/изменения защиты), в котором содержится DWORD-параметр “Program”, он то и содержит оставшееся время в миллисекундах С самого начала он равен 1800000, т.е. 1800000/1000/60 = 30 минут. Допустим мы хотим поиграть месяц 30*24*60 = 43200 минут, 43200*60*1000 = 2592000000 ставим это десятичное значение и играем месяц ;). Максимально можно поставить шестнадцатеричное значение 0xFFFFFFFF, после этого будет написано 0 минут, но кнопка «Играть» будет активна.

NevoSoft.

Ну что же, теперь рассмотрим игры от NevoSoft, я взял “Legends of Pirates”. Здесь все довольно просто. Сама игра находится в папке “game” все остальное, то что снаружи, это файлы наг-скрина и «защиты». Файл игры называется game.dll и находится в папке “game”, если переименовать его в .EXE можно увидеть значок игры, а также увидеть что файл не запускается Теперь переименуем обратно и запустим игру. Посмотрим, что у нас в процессах. Помимо самой игры “legends_of_pirates.exe” в процессах появился файл “game\smssrv~1.dll”. Зайдем в папку “game” и скопируем этот файл с другим именем (если Вы не видите этот файл, скорее всего у Вас отключен просмотр скрытых файлов), например, “game.exe” и уберем из атрибутов файла свойство «Скрытый». Завершим основной процесс игры и попробуем запустить наш новый файл “game.exe” – он должен удачно запуститься. Как видите защита от NevoSoft просто копирует файл “game.dll”, ставит файлу атрибут «Скрытый» (для более лучшей «защищенности» ) и патчит его прямо на диске, а потом запускает.
Теперь можно удалить все файлы и папки, которые находятся рядом с папкой “game”, а содержимое папки “game” вынести наружу.

Вот, пожалуй, и все. К статье прилагаются исходники unwrapper’а на Си. По идеи unwrapper должен ломать все игры трех вышеприведенных компаний. Исходники писались на скорую руку, поэтому наверняка там есть недочеты, не точности, ошибки, баги, переполнения... В общем, если найдете баги в коде буду очень благодарен, если сообщите об этом мне.

Скомпилированный UnWrapper http://coder-club.in/download/unwrapper.rar
Исходники http://coder-club.in/download/unwrapper_src.rar

by Geograph
© 2008



Ранг: 107.5 (ветеран)
Активность: 0.150
Статус: Участник

Создано: 09 апреля 2008 21:06
· Личное сообщение · #2

Гдето я уже это читал на ксакепе чтоли
Ты точно это сам придумал

-----
Md5 fcbb6c9c9a5029b24d70f2d67c7cca74





Ранг: 340.0 (мудрец), 22thx
Активность: 0.120
Статус: Участник
THETA

Создано: 09 апреля 2008 21:23
· Личное сообщение · #3

Есть и от Dr. Carbon'a анвраппер. Тоже с исходниками, только на асме. Если кому интересно, то вот ссыль http://rapidshare.com/files/106174328/Univ_UnWrapper.rar.html
И еще для игр Reflexive Arcade свою тулзу выкладывал Freecod, в соответствущей теме.

-----
Программист SkyNet




Ранг: 39.7 (посетитель)
Активность: 0.020
Статус: Участник

Создано: 09 апреля 2008 23:12
· Личное сообщение · #4

FrenFolio,
У него тулза на русском алав@ре не работала.



Ранг: 9.5 (гость)
Активность: 0.010
Статус: Участник

Создано: 10 апреля 2008 07:05
· Личное сообщение · #5

Stack
Правда сам писал

FrenFolio
Просто я не встречал раньше анврапперов с исходниками, и решил сам написать и выложить



Ранг: 67.4 (постоянный), 6thx
Активность: 0.050
Статус: Участник

Создано: 10 апреля 2008 17:26 · Поправил: Kiev78
· Личное сообщение · #6

Ты забыл упомянуть про Lolo games (_http://lolo.ru).
Я восполню этот пробел (с любезного разрешения).
Итак, берем любую подопытную игруху (например Тайна Фараона - _http://lolo.ru/game/TainaPharaona/ - 11,9 MB)
Здесь тоже есть исполняемый файл игры (это либо gamedat.bin либо itpegf.dat - может есть и другие названия, я не проверял все игры). И есть враппер (showcase.exe) который запускает игру.
Если тупо переименовать файл игры в *.exe и попробовать запустить, то игра запустившись, через секунду закроется. Я заинтересовался защитой на игре и, поизучав ее недельку, я пришел к следующему результату. Сверху файл накрыт пакером (причем в 2 разных слоя!) DiE сообщил - UPX <Modified> , хотя на упх мало похоже (раз есть какая-то защита), антиотладки никакой нет.
Итак взглянем в оле на точку входа:

0055F8D0 > 89C2 MOV EDX, EAX <<<Program entry point
0055F8D2 - E9 881FEAFF JMP ittpegf.0040185F

переходим по адресу 0040185F:

0040185F 55 PUSH EBP
00401860 8BEC MOV EBP, ESP
00401862 83C4 C8 ADD ESP, -38
00401865 60 PUSHAD
00401866 E8 00000000 CALL ittpegf.0040186B
0040186B 8F45 FC POP DWORD PTR SS:[EBP-4]
0040186E E8 00000000 CALL ittpegf.00401873
00401873 58 POP EAX

пролистав один-два экрана вниз видим конец первого распаковщика и переход на второй распаковщик:

0040197E ^\75 E6 JNZ SHORT ittpegf.00401966
00401980 8D45 CC LEA EAX, DWORD PTR SS:[EBP-34] <<< Отсюда
00401983 50 PUSH EAX
00401984 6A 00 PUSH 0
00401986 6A 00 PUSH 0
00401988 8B45 D4 MOV EAX, DWORD PTR SS:[EBP-2C]
0040198B 50 PUSH EAX
0040198C 68 00100000 PUSH 1000
00401991 6A 00 PUSH 0
00401993 E8 5FFAFFFF CALL ittpegf.004013F7 <<< здесь вызывается КреатеТред (тот самый, который спустя одну-две секунды завершает приложение)
00401998 61 POPAD
00401999 89EC MOV ESP, EBP
0040199B 5D POP EBP
0040199C - E9 2FDF1500 JMP ittpegf.<ModuleEntryPoint> - На самом деле прыжок на второй распаковщик
004019A1 8BE5 MOV ESP, EBP
004019A3 5D POP EBP
004019A4 C3 RETN

Я думаю дальнейшие объяснения не нужны:
все команды между метками (<<< Отсюда) и (<<< здесь вызывается КреатеТред) необходимо занопить. Вуаля!!! Игра запускается как родная! Заметьте, нам не пришлось её даже распаковывать (а только пропатчить код распаковщика), а вызов вредного КреатеТред (здесь почему-то
мне вспомнился EXECryptor) - это и есть вся защита игры.
Думаю, добавить в свой анвраппер поддержку этих игр не составит труда (достаточно открыть файл игры и по маске найти и занопить нужные команды)




Ранг: 340.0 (мудрец), 22thx
Активность: 0.120
Статус: Участник
THETA

Создано: 10 апреля 2008 18:10
· Личное сообщение · #7

s2003r пишет:
У него тулза на русском алав@ре не работала.

Не совсем. Если речь идет про версию 1.2 (сырцы именно к ней), то там алгоритм был в банальном поиске EP по сигне компилятора, причем в той версии поддерживался только C. Но потом он переработал алго, и стал ставить бряки на создание процесса и чтение из памяти, и тулза стала вроде ничего работать. Однако для русских игр приходилось выставлять довольно большие тайминги для анврапа...
Kiev78 пишет:
Думаю, добавить в свой анвраппер поддержку этих игр не составит труда (достаточно открыть файл игры и по маске найти и занопить нужные команды)

Интересно, а на многих играх проверял такое? Просто раньше был банальный UPX + еще несколько команд до прохода на OEP, чтобы авто-анпакеры не брали. А так, ты прав, можно было бы анвраппер сделать по такому принципу...

-----
Программист SkyNet




Ранг: 9.5 (гость)
Активность: 0.010
Статус: Участник

Создано: 10 апреля 2008 18:29
· Личное сообщение · #8

Kiev78
Спасибо за предоставленный способ, постараюсь добавить в анвраппер, только сначала потестю на нескольких играх ;)



Ранг: 67.4 (постоянный), 6thx
Активность: 0.050
Статус: Участник

Создано: 10 апреля 2008 18:38 · Поправил: Kiev78
· Личное сообщение · #9

---



Ранг: 9.5 (гость)
Активность: 0.010
Статус: Участник

Создано: 11 апреля 2008 06:59 · Поправил: geograph
· Личное сообщение · #10

[quote]Кстати, только что попробовал скачать анвраппер с исходниками- сайт почему-то в дауне![/quote]
Странно, вроде не замечал, сейчас работает



Ранг: 10.7 (новичок)
Активность: 0.010
Статус: Участник

Создано: 11 апреля 2008 13:05
· Личное сообщение · #11

Alawar

тут все проще. у нас есть файл, запускающий игру и файл .WRP.EXE. написана игра обычно или в дельфи или в ms visual studio.
первый файл можно удалить сразу, а второй открываем в Оле, и ищем точку входа.

у Дельфи она обычно в самом низу, там несколько CALL-ов и потом команд нет. OEP = первый CALL.

у MS С++, она начинается с push <число> (часто push 60h), и дальше идет инициализация среды выполнения. НО! В любом случае там есть CALL к GetVersionExA. Жмем в Оле правой кнопкой, Search For -> All intermodular calls. Жмем в таблице на заголовок "Destination", чем упорядичиваем список функций по алфавиту. Ищем ту GetVersionExA, которая нам нужна, пользуясь поиском push <число>. OEP - адрес push <число>.

Вычисляем EP = OEP - ImageBase (обычно 400000h) и записываем в файл новый EP с помощью LordPE (Entry Point).

ВСЕ! ИГРА ПАШЕТ!!!
временами мне кажется, что или alawar-акбар специально делает такую говенную защиту, чтобы было неинтересно. или же они сами отламывают игры, переводят их и продают нам за символические 5$.



Ранг: 10.7 (новичок)
Активность: 0.010
Статус: Участник

Создано: 11 апреля 2008 13:06 · Поправил: Gigi
· Личное сообщение · #12

да, "ковырял" я "Веселую ферму".
блин, не до конца дочитал про alawar. я так думаю что искать самому точку входа будет интереснее, чем тупо копировать ее
заодно посмотрите что там в игре есть, можно на читы нарваться )



Ранг: 617.3 (!), 677thx
Активность: 0.540
Статус: Участник

Создано: 11 апреля 2008 14:25
· Личное сообщение · #13

Gigi пишет:
я так думаю что искать самому точку входа будет интереснее, чем тупо копировать ее


Для универсального анврапера, это просто необходимо, (есть спицефические игры flash, zink и тд) в которых exe изначально пакован или отличается от стандартных нормативов и наугад искать OEP это бред.
А для твоего метода, посмотри исходники Dr. Carbon'a, в первых версиях так и делалось, еп искался по сигнатурам (для gamehause он до сихпор использует этот метод).



Ранг: 4.1 (гость), 2thx
Активность: 0.010
Статус: Участник

Создано: 11 апреля 2008 19:52
· Личное сообщение · #14

в принцыпе для ковыряния 3 -- 8 игр не стоит писать анврап (руками интересние и правильние!)
лично моё мнение!
а так тему надо в топку так как в инструменты внести сабж или тутор забабаитъ!



Ранг: 158.7 (ветеран)
Активность: 0.110
Статус: Участник

Создано: 11 апреля 2008 20:05
· Личное сообщение · #15

G00ba пишет:
в принцыпе для ковыряния 3 -- 8 игр не стоит писать анврап

любой анврап пишется для людей которые с отладчиком на "ОНИ".
G00ba пишет:
руками интересние и правильние!

Интересно смотреть что то новое, а не тупо повторять одни и те же действия. А правильнее всего купить игру у разработчика, ибо он на неё тратил своё время.
G00ba пишет:
а так тему надо в топку так как в инструменты внести сабж или тутор забабаитъ!

А это строку я вообще не понял... Учи русский язык.
ps. не хотелось писать, да сердце не выдержало...

-----
Я ещё не волшебник, я только учусь...




Ранг: 67.4 (постоянный), 6thx
Активность: 0.050
Статус: Участник

Создано: 11 апреля 2008 20:21 · Поправил: Kiev78
· Личное сообщение · #16

---



Ранг: 67.4 (постоянный), 6thx
Активность: 0.050
Статус: Участник

Создано: 11 апреля 2008 21:12 · Поправил: Kiev78
· Личное сообщение · #17

---



Ранг: 4.1 (гость), 2thx
Активность: 0.010
Статус: Участник

Создано: 11 апреля 2008 21:48 · Поправил: G00ba
· Личное сообщение · #18

ну оберон ты загнул!

assain~ пишет:
А это строку я вообще не понял... Учи русский язык.
ps. не хотелось писать, да сердце не выдержало...

-- пищу через кпк стилусом так что не пинай! plz!

тут кук раз всё понятно раз уж так много самопальных анвраперов есть
надо просто наваять обший тутор и дело с канцом да и ляпнул так просто вообшем Googli.ru!

!!купить игру у разработчика, ибо он на неё тратил своё время. >
ну прямо таки убедил - я (и все) исследуют не для себя а за знания!



Ранг: 9.5 (гость)
Активность: 0.010
Статус: Участник

Создано: 12 апреля 2008 19:04 · Поправил: geograph
· Личное сообщение · #19

Добавил в unwrapper игры от "LoloGames" (lolo.ru, games.mail.ru). Благодарю Kiev78
Теперь при унврапе Reflexiv не надо нажимать "PlayGame"

Скомпилированная программа [15 Кб] http://coder-club.in/download/unwrapper.rar
Исходники [17 Кб] http://coder-club.in/download/unwrapper_src.rar

Кстати при написании поиска и замены нужной сигнатуры для LoloGames, я проверил унврап на 3-х играх и у всех данная сигнатура располагалась по адресу B06 (файл ittpegf.dat). Но все равно оставил поиск сигнатуры, на всякий случай, т.к. мне не попадалась игра с gamedat.bin



Ранг: 67.4 (постоянный), 6thx
Активность: 0.050
Статус: Участник

Создано: 12 апреля 2008 20:04 · Поправил: Kiev78
· Личное сообщение · #20

---



Ранг: 9.5 (гость)
Активность: 0.010
Статус: Участник

Создано: 12 апреля 2008 21:50
· Личное сообщение · #21

Kiev78 пишет:
с gamedat.bin твой unwrapper тоже работает

это хорошо
интересно для Oberon получится написать автораспаковщик




Ранг: 340.0 (мудрец), 22thx
Активность: 0.120
Статус: Участник
THETA

Создано: 12 апреля 2008 21:59
· Личное сообщение · #22

geographgeograph пишет:
интересно для Oberon получится написать автораспаковщик

на всех играх Оберон висит Арма (на враппере + на файле игры). К тому же, файл игры имеет дополнительные опции защиты, как правило Debug blocker. И еще встречаются игры с флешем...

-----
Программист SkyNet




Ранг: 67.4 (постоянный), 6thx
Активность: 0.050
Статус: Участник

Создано: 13 апреля 2008 10:17 · Поправил: Kiev78
· Личное сообщение · #23

---



Ранг: 39.7 (посетитель)
Активность: 0.020
Статус: Участник

Создано: 13 апреля 2008 13:40
· Личное сообщение · #24

Kiev78 пишет:
макромедиа директором
,
Скачай Cave days, от оберона(сигнатура оверлея 10jp)



Ранг: 67.4 (постоянный), 6thx
Активность: 0.050
Статус: Участник

Создано: 13 апреля 2008 14:36 · Поправил: Kiev78
· Личное сообщение · #25

---




Ранг: 340.0 (мудрец), 22thx
Активность: 0.120
Статус: Участник
THETA

Создано: 14 апреля 2008 21:30
· Личное сообщение · #26

Dr. Carbon выложил новую версию своего анврппера, вместе с иходниками, v1.3.4

5c10_14.04.2008_CRACKLAB.rU.tgz - UnWrapper by Dr. Carbon v1.3.4.rar

-----
Программист SkyNet




Ранг: 39.7 (посетитель)
Активность: 0.020
Статус: Участник

Создано: 15 апреля 2008 11:27
· Личное сообщение · #27

Kiev78 пишет:
Дай ссыль на скачку, штоб я долго не искал.


Я смотрю дядя гугл не рулит
www.cavedays.com/files/installcavedays.exe



Ранг: 11.7 (новичок)
Активность: 0=0
Статус: Участник

Создано: 15 апреля 2008 14:57
· Личное сообщение · #28

FrenFolio пишет:
Dr. Carbon выложил новую версию своего анврппера, вместе с иходниками, v1.3.4

похоже архив битый.

geograph пишет:
в процессах появился файл “game\smssrv~1.dll”.

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



Ранг: 69.8 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 15 апреля 2008 18:52 · Поправил: userdom
· Личное сообщение · #29

viiri пишет: похоже архив битый.
похоже криво распаковал. Архив небитый.



Ранг: 11.7 (новичок)
Активность: 0=0
Статус: Участник

Создано: 16 апреля 2008 02:00
· Личное сообщение · #30

userdom пишет:
похоже криво распаковал. Архив небитый.

ага. стянул из дому. видать на работе прокся шалит.


. 1 . 2 . >>
 eXeL@B —› Основной форум —› Универсальный UnWrapper для игр
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати