Сейчас на форуме: -Sanchez- (+8 невидимых)

 eXeL@B —› Основной форум —› Flash (swf). Декомпиляция, взлом
<< . 1 . 2 . 3 . 4 . 5 . 6 . 7 . 8 . 9 . 10 . >>
Посл.ответ Сообщение


Ранг: 748.2 (! !), 390thx
Активность: 0.370
Статус: Участник
bytecode!

Создано: 11 апреля 2011 15:04 · Поправил: 4kusNick
· Личное сообщение · #1

Дружественные темы: Взлом .net, Java. Взлом и реверсинг, Взлом Android приложений, Unity3D.

Анализаторы:
SWF iD - первый и единственный анализатор для SWF, позволяет выяснить чем накрыта флэшка, имеет встроенный дампер флэшек с отсевом фэйков.

Декомпиляторы\редакторы:
Action Script Viewer (ASV) - лучшее, что есть для работы с обфусцированными swf (ru-board).
AS3 Sorcerer - только код, только as3 (от автора ASV) (ru-board).
JPEXS Free Flash Decompiler (FFDec) - декомпилятор и редактор байткода; есть автоматическая деобфускация (слабенькая), редактирование кода (именно кода!), сохранение в fla, пакетное переименование.
SWiX - редактор swf в виде xml.
Sothink SWF Decompiler (ru-board).
Eltima Flash Decompiler Trillix (ru-board).
SWFWire Inspector - отличная утилитка на AIR, которая позволяет ползать по структуре swf, декомпилировать код и т.д.
Adobe SWF Investigator - аналог SWFWire от Adobe, по некоторому функционалу интереснее.

Работа с байткодом\тэгами:
RABCDAsm - асм/дизасм байткода, опенсорс (as3).
Редактор на базе RABCDAsm - удобный редактор с подсветкой и сворачиванием блоков.
WinRABCDAsm - ещё один GUI для RABCDAsm, на этот раз более практичный - можно использовать с любой версией RABCDAsm.
RABCDAsm mod - удобная редакция RABCDasm от местного обывателя JohnyDoe, позволяет разбирать\собирать swf простым перетаскиванием на основной exe, с автоматической деобфускацией имён и некоторой чисткой от мусора.
SWF Reader - позволяет править все тэги и данные в swf, содержит декрипторы\депротекторы, разработка прекращена.
FlashHacker - инструмент на основе RABCDAsm для работы с байткодом, сделан для исследователей малвари.

Автоматизированное снятие защит
SWF Decrypt - снимает старые версии Amayeta SWF Encrypt и DComSoft SWF Protector (офсайт сдох).
+ уже упомянутые: ASV, FFDec, RABCDAsm mod и SWF Reader.

Дапмеры\Распаковщики (для тех, кому лень руками)
SWF Revealer Ultimate - самый продвинутый из автоматических инструментов данного типа, вытащит все, что проиграется в локальном проигрывателе. Платный, количество лицензий ограничено.
Есть ещё обычный SWF Revealer, который входит в комплект ASV. Тоже весьма прокачанный распаковщик, работает по другому принципу.
SWF Memory Dumper - бесплатный и простой дампер.
Sothink SWF Catcher - умеет вытаскивать swfки из кэшей браузеров и искать их в памяти процессов (ru-board).
+ уже упомянутые: SWF Reader, SWF iD.

Разное
Sulo - дополнение к Intel Pin kit. Может трейсить инструкции (пример), дампить всё что загружается с помощью loader.loadBytes() и расшифровывать SecureSWF строки.
За скомпилированный бинарь 1 спасибо JohnyDoe, еще компилил OKOB, но ссылка сдохла.

Другие местные обсуждения в области исследования Flash:
Decrypt SWF, подверженный обфускации Amayeta SWF Encrypt
Вытащить swf из exe (Camtasia Studio)
Реверсинг Adobe Flash Player
Формат данных флэш-вьювера "Электронной библиотеки" РНБ
DoSWF - professional flash encrypter
Реверсинг Флэша, поменять размер массива
Новый метод защиты swf
Реверсинг flash(action script)
www.teachshop.ru - Обновленная защита
Разбор флешки - о том, как находить и вытаскивать включённые в swf файлы с двоичными данными

Чтиво на тему
Способы "защиты" flash-приложений
Упакованный SWF. Как распаковать?
Продвинутое шифрование в DoSWF? Вызов принят!

Доки \ маны
AVM2 Overview - описание вирт. машины для as3 с опкодами и проч.
SWF File Format Specification - спецификация формата swf (строение, расположение тэгов и проч.).

Debug-версии Flash Player - тут.
Они позволяют трейсить и отлаживать код (см. описание AS3Trace и AS3Verbose тут).

-----
Флэш, ява, дотнет - на завтрак, обед и ужин. Unity3D на закуску.


| Сообщение посчитали полезным: uncleua, OKOB, SReg, res, ClockMan, Gideon Vi, sendersu, Oott, _ruzmaz_, FrenFolio, d0wn, SGA, Flint, Coderess, daFix, Runner, tracename, pollllll_n, Hexxx, DenCoder, Lumen, NikolayD, AKAB, ==DJ==[ZLO], Rustem, BAHEK, SyntaX, nick8606, UniSoft, Soso, sivorog, MarcElBichon, soho

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

Создано: 27 марта 2014 01:42
· Личное сообщение · #2

есть флэшка, вот анализ Swf id.

ffdec декомпилит все нормально. Но проблема, зашифрована бин дата и не могу понять чем и как рассшифровать. Нужно изменять просто адрес скрытого фрэйма внутри.

в hex редакторе он виден, но заменой побайтово подскажите как или как можно рассшифровать полностью биндату.

Maina_storyclass там вставка идет js кода

5711_27.03.2014_EXELAB.rU.tgz - flashanalyze.jpg




Ранг: 748.2 (! !), 390thx
Активность: 0.370
Статус: Участник
bytecode!

Создано: 27 марта 2014 02:29
· Личное сообщение · #3

1.Уверены, что тэг зашифрован? Пробовали сохранять и смотерть что в нем?
2. Файл в студию, по скрину трудновато понять что и чем у вас там пошифровано.

-----
Флэш, ява, дотнет - на завтрак, обед и ужин. Unity3D на закуску.





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

Создано: 27 марта 2014 17:58
· Личное сообщение · #4

--> AS3 Sorcerer 2.72 REPT <--

| Сообщение посчитали полезным: sivorog, v00doo, axoen, Isaev

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

Создано: 28 марта 2014 00:51
· Личное сообщение · #5

_label_16:
flag = 1;
//unresolved jump

что значит unresolved jump, значит что as3 sorcerer урезал?




Ранг: 748.2 (! !), 390thx
Активность: 0.370
Статус: Участник
bytecode!

Создано: 28 марта 2014 04:14
· Личное сообщение · #6

Значит, что он не может его деобфусцировать.
В binaryData у вас там самый обычный не зашифрованный, но обфусцированный JS. Ищите деобфускаторы для JS и разбирайтесь.

-----
Флэш, ява, дотнет - на завтрак, обед и ужин. Unity3D на закуску.


| Сообщение посчитали полезным: forbik

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

Создано: 21 мая 2014 13:49 · Поправил: forbik
· Личное сообщение · #7

Разобрался спасиб




Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 27 июля 2014 20:00
· Личное сообщение · #8

Ребят, а AS скрипты во flash хранятся уже в виде plaintext или декомпиляторы их действительно составляют сами на основе каких-то бинарных данных, проделывая великую работу?

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh




Ранг: 105.6 (ветеран), 69thx
Активность: 0.060
Статус: Участник

Создано: 27 июля 2014 21:53
· Личное сообщение · #9

Isaev

Также как и в .NET приложениях весь код скомпилирован в бинарник + строки с именами переменных и строчными константами.

| Сообщение посчитали полезным: Isaev


Ранг: 748.2 (! !), 390thx
Активность: 0.370
Статус: Участник
bytecode!

Создано: 28 июля 2014 11:32 · Поправил: 4kusNick
· Личное сообщение · #10

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

-----
Флэш, ява, дотнет - на завтрак, обед и ужин. Unity3D на закуску.


| Сообщение посчитали полезным: sivorog, Isaev


Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 07 августа 2014 14:25
· Личное сообщение · #11

Dynamic instrumentation tool for Adobe Flash Player built on Intel Pin
--> Link <--

| Сообщение посчитали полезным: 4kusNick

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

Создано: 04 октября 2014 14:04
· Личное сообщение · #12

http://armorgames.com/play/16035/the-weapon-masters такое как то можно взломать? или даже пытаться не стоит?



Ранг: 48.2 (посетитель), 49thx
Активность: 0.040
Статус: Участник

Создано: 12 октября 2014 16:33
· Личное сообщение · #13

DumaZik
А что там не так? Лучше на файлообменник залить файл.


4kusNick пишет:
SWF iD

Адрес поменялся, теперь swfid.net, исправь пожалуйста.

| Сообщение посчитали полезным: 4kusNick


Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 03 ноября 2014 23:48 · Поправил: Isaev
· Личное сообщение · #14

4kusNick пишет:
Но истинно круты те декомпили

а это которые?
4kusNick пишет:
вычищая весь мусор и сворачивая запутанный поток кода.

именно вот этот момент интересен
есть пример, Trillix и SWFDecompiler всмтавляют нелепые Goto вникуда константы представляют в виде -((-82 + 1) + 1 + 15 + 1) + 1 (значения выходят везде разные)
ASV и AS3 на местах Goto пишут //unresolved if, а вместо странных констант просто нули везде!
JPEXS в этих местах вообще забивает, вписывает вместо всего метода
Code:
  1. /*
  2.   * Decompilation error
  3.   * Code may be obfuscated
  4.   * Error type: EmptyStackException
  5. */
  6.          throw new flash.errors.IllegalOperationError("Not decompiled due to error");

Кто прав и мусор ли это или там что-то запрятано важное?

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh





Ранг: 748.2 (! !), 390thx
Активность: 0.370
Статус: Участник
bytecode!

Создано: 04 ноября 2014 02:02
· Личное сообщение · #15

Isaev пишет:
а это которые?

В шапке первые три в разделе декомпилей. Правда последний слился и в итоге заявил что деобфускация более не в приоритете - устал бороться с обфускаторами за бесплатно. Но кое-что он разбирать всё равно умеет.

Isaev пишет:
ASV и AS3 на местах Goto пишут //unresolved if, а вместо странных констант просто нули везде!

Делюсь секретом =)
В ASV есть настройки импорта для as3: http://i.imgur.com/c7xdRbY.png и для as2: http://i.imgur.com/uOMDlQ5.png
Подобрав их в правильной комбинации можно большинство современных обфускаторов обойти, оставив позади всё кроме изменённых имён.

Isaev пишет:
JPEXS в этих местах вообще забивает, вписывает вместо всего метода

Глянь не отключена ли там автоматическая деобфускация (--> скрин <--). Если да, то в таком случае либо вручную прогонять (Tools > P-Code deobfuscation), либо включить её и заново открыть класс. Если не поможет, значит автор не добавлял поддержку используемого в твоём случае обфускатора.

-----
Флэш, ява, дотнет - на завтрак, обед и ужин. Unity3D на закуску.





Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 04 ноября 2014 02:25
· Личное сообщение · #16

4kusNick пишет:
В ASV есть настройки импорта

а что за версия? у меня там совсем другие настройки) v6 pre-release5 у меня последняя что находил
4kusNick пишет:
Глянь не отключена ли там автоматическая деобфускация

нет с этими опциями разобрался... и вручную сначала и потом авто нашёл. оно немного чистит, где декомпиль вообще срабатывает, а где нет, вырезает довольно большие куски и пишет коммент, что выше приводил

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh





Ранг: 748.2 (! !), 390thx
Активность: 0.370
Статус: Участник
bytecode!

Создано: 04 ноября 2014 04:38 · Поправил: 4kusNick
· Личное сообщение · #17

Isaev пишет:
а что за версия?

2014/11
Я помогаю автору багрепортами и новыми сэмплами, потому на руках обычно самая свежая версия.
В сети последнее что находил - 2010/06 pre-release, там уже очень мощные возможности по деобфускации as2 были, но as3 деобфускация там устаревшая.

У местного обитателя JohnyDoe были наработки для RABCDAsm с деобфускацией (--> Link <--, это только для as3 применимо), возможно стоит его потыкать.

Либо, если у тебя случай единичный - закинь куда-нибудь файлик, я попробую его свежим asv обработать.

-----
Флэш, ява, дотнет - на завтрак, обед и ужин. Unity3D на закуску.




Ранг: 105.6 (ветеран), 69thx
Активность: 0.060
Статус: Участник

Создано: 16 декабря 2014 16:46 · Поправил: JohnyDoe
· Личное сообщение · #18

Выпилил тут одну "удобняшечку". Может кому-то тоже пригодится.

Удаляет объект(shape, sprite и т.д.) со сцены. Т.е. не нравится вам какое-то лого, узнаете его id, отдаете утилите и она выпиливает все вхождения.

Работает так:

Code:
  1. removeit file.swf id


Сразу предупреждаю. Удаляет все вхождения во всех кадрах и спрайтах.

Лучше не использовать для удаления объектов, которые перемещаются по спрайту/кадру. Объект будет удален, но останется мусор.

http://www14.zippyshare.com/v/33880790/file.html

Можно конечно использовать swix или swfmill. Но это не быстро и часто приводит к порче файла. А моя утиль пилит аккуратно и быстро. В общем иногда очень даже полезна.

Сравнение до и после.



P.S. В stdout выводит информацию о том откуда был удален объект. Также выводится имя, если присвоено. В этом случае вам придется еще и скрипты править. Надо будет тереть в скриптах все, что связано с этим именем. Иначе будут возникать ошибки. Все расчитано на тех кто знает, что он делает.

P.P.S. Допилил чуток. Так лучше будет).

**********************************************

Случайно набрел на какой-то "аппарат". Вроде нигде не упоминался. Заюзать пока не удалось. Там с запуском непонятки. Для чего конкретно можно использовать не знаю, но штуковина по теме flash'а.

http://code.google.com/p/apparat/

| Сообщение посчитали полезным: vovanre, 4kusNick


Ранг: 748.2 (! !), 390thx
Активность: 0.370
Статус: Участник
bytecode!

Создано: 16 декабря 2014 17:48 · Поправил: 4kusNick
· Личное сообщение · #19

JohnyDoe
Спасибо за еще один полезный инструмент.
Кстати, ты не обновлял свой RABCDAsm комбайн? Там 1.17 выходила с полезными фиксами недавно.

На счёт apparat - это устаревший тулкит в первую очередь по оптимизации флэшек.
Когда ещё не было ASC 2, можно было использовать аппарат для инжекта опкодов прямого доступа к памяти, теперь это можно сделать без каких-либо сторонних утилит.
Кроме того, в аппарате есть всякие склеиватели DoABC, и другие штуки для оптимизации байткода.
Ещё там есть а-ля ассемблер для создания байткода налету: https://github.com/joa/apparat/blob/master/apparat-asm/src/tests/as3/Test2.as
В общем, поиграться можно, но практической пользы уже почти никакой, т.к. основная фишка была - инжект memory опкодов, а всё остальное - побочное, возникшее при работе над инжектом.

Этим летом собирал его из сорцов - то ещё "удовольствие" было. Он на скале написан и есть в файлах конфига проекта косяки, как минимум линки на уже несуществующие модули.
С горем пополам собрал тогда из спортивного интереса, попробовал поюзать немного и снёс все к хренам, благо в ASC 2 было всё, что мне требовалось.
Думаю, бинарники будет найти не трудно, я их тогда не пытался искать.

-----
Флэш, ява, дотнет - на завтрак, обед и ужин. Unity3D на закуску.




Ранг: 105.6 (ветеран), 69thx
Активность: 0.060
Статус: Участник

Создано: 16 декабря 2014 18:09 · Поправил: JohnyDoe
· Личное сообщение · #20

4kusNick Комбайн это просто RABCDAsm, который без промежуточных файлов работает? Если так, то там собрать новую версию вообще не проблема.

Я сравнивал исходники. Почему-то мне показалось, что ничего особенно критичного там не появилось.




Ранг: 748.2 (! !), 390thx
Активность: 0.370
Статус: Участник
bytecode!

Создано: 16 декабря 2014 20:37
· Личное сообщение · #21

JohnyDoe пишет:
Комбайн это просто RABCDAsm, который без промежуточных файлов работает?

Да, он самый!

JohnyDoe пишет:
Почему-то мне показалось, что ничего особенно критичного там не появилось.

Да, критичного - не появилось, но появилось такое:
- Do not attempt to disassemble unreachable code
- Improve handling of disassembly errors: methods will be partially disassembled as far as possible.
- Fix LZMA errors with uncompressable data.

Вроде бы должно быть полезно для некоторых обфускаций.

-----
Флэш, ява, дотнет - на завтрак, обед и ужин. Unity3D на закуску.




Ранг: 105.6 (ветеран), 69thx
Активность: 0.060
Статус: Участник

Создано: 16 декабря 2014 21:15
· Личное сообщение · #22

Ссылка в шапке в любом случае уже не фурычит.

Что-то раньше не падала прога по ошибке:"Too many opened files" или как-то так. Пришлось пофиксить немного.

http://www38.zippyshare.com/v/9214047/file.html

Из отличий нашел только это.



Но на обфусцированных файлах я не тестировал.

| Сообщение посчитали полезным: 4kusNick


Ранг: 748.2 (! !), 390thx
Активность: 0.370
Статус: Участник
bytecode!

Создано: 17 декабря 2014 00:06
· Личное сообщение · #23

Спасибо, заодно ссылку в шапке обновил.

-----
Флэш, ява, дотнет - на завтрак, обед и ужин. Unity3D на закуску.




Ранг: 488.1 (мудрец), 272thx
Активность: 0.350
Статус: Участник

Создано: 11 февраля 2015 09:57
· Личное сообщение · #24

Доброго времени суток господа!. А как у нас обстоит дело с дебагом Flash файлов. Кто чем пользовался или кто что насоветует. Немного погуглил, но впечатления остаются двоякие.. без внедрение своего кода или написание загрузчика swf дебажиться флеш? Чтото полазил у нас по форуму тему про дебаг флеша не нашел. Заранее спасибо. (линки с мануалами приветствуются)

-----
Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме....





Ранг: 748.2 (! !), 390thx
Активность: 0.370
Статус: Участник
bytecode!

Создано: 11 февраля 2015 18:39
· Личное сообщение · #25

Тут все действительно печально, я не встречал адекватных инструментов или доков на эту тему, потому уже привык обходиться без дебага (trace'ы наше всё) при работе с голыми swf.
Более того, swf должна быть собрана с отладочной информацией чтобы адекватно её отлаживать.

Если была нужна серьёзная отладка - то я обычно восстанавливал до исходников и отлаживал обычными средствами (через FlashDevelop) так и всякие изменения удобно вносить и проверять было.

-----
Флэш, ява, дотнет - на завтрак, обед и ужин. Unity3D на закуску.




Ранг: 105.6 (ветеран), 69thx
Активность: 0.060
Статус: Участник

Создано: 11 февраля 2015 21:02
· Личное сообщение · #26

Rustem писал про теоретическую возможность превращения его утилиты в отладчик. Но сам он этим, как я понял, заниматься не захотел. Оно в принципе и понятно.

http://blackninja2000.narod.ru/rus/swf_avm_tracer.html

Поэтому только хардкор))




Ранг: 748.2 (! !), 390thx
Активность: 0.370
Статус: Участник
bytecode!

Создано: 12 февраля 2015 02:00
· Личное сообщение · #27

Да, я этот трейсер давно как-то щупал, он тогда работал с перебоями, думаю даже если бы и запилить отладчик на его основе - удовольствия от процесса отладки будет немного =(

-----
Флэш, ява, дотнет - на завтрак, обед и ужин. Unity3D на закуску.





Ранг: 748.2 (! !), 390thx
Активность: 0.370
Статус: Участник
bytecode!

Создано: 28 февраля 2015 18:05 · Поправил: 4kusNick
· Личное сообщение · #28

Как-то я пропустил эту красоту:
https://github.com/F-Secure/Sulo/

Самое интересное в разделе "Plugins":
- Call tracer - logs all ActionScript method calls, including arguments and return values
- Flash dumper - dumps Flash objects loaded with Loader.loadBytes() to disk
- SecureSWF - logs decrypted strings from secureSWF-protected files



У меня руки похоже не из того места, 10й студии нет под рукой - пробую в 13й собирать, но не выходит:
Error 3
error LNK2038: mismatch detected for '_MSC_VER': value '1600' doesn't match value '1800' in ASByteArray.obj

Если кто скомпилит - делитесь

-----
Флэш, ява, дотнет - на завтрак, обед и ужин. Unity3D на закуску.





Ранг: 527.7 (!), 381thx
Активность: 0.160.09
Статус: Участник
Победитель турнира 2010

Создано: 28 февраля 2015 19:37
· Личное сообщение · #29

FlashHacker --- Flash Instrumentation Tool

https://github.com/ohjeongwook/FlashHacker

FlashHacker is an ActionScript Bytecode instrumentation framework. The RABCDasm tool is used for disassembling and assembling of ActionScript Bytecode. The tool uses Bytecode disassembly to inject various instrumentation instructions.

-----
127.0.0.1, sweet 127.0.0.1




Ранг: 105.6 (ветеран), 69thx
Активность: 0.060
Статус: Участник

Создано: 28 февраля 2015 19:58 · Поправил: JohnyDoe
· Личное сообщение · #30

4kusNick

Собрал Debug-версию. Релизная почему-то жалуется на отсутствующий pin.H. Лень разбираться.

*********************************************

Вобщем обе версии собрал.

http://www32.zippyshare.com/v/cSdfYu4v/file.html

| Сообщение посчитали полезным: 4kusNick

Ранг: 488.1 (мудрец), 272thx
Активность: 0.350
Статус: Участник

Создано: 28 февраля 2015 19:59
· Личное сообщение · #31

4kusNick пишет:
Да, я этот трейсер давно как-то щупал, он тогда работал с перебоями, думаю даже если бы и запилить отладчик на его основе - удовольствия от процесса отладки будет немного =(

перетрусил я малеха.. флеш сообщество.. они какието вообще дикие.. ладно то что половина сидят на маках.. но ощущение.. что они сами не понимают как работает ТО что они кодят.. это все к вопросу про дебаг флеша.. вобщем рука на глазах.. сижу шижею с мира

-----
Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме....



<< . 1 . 2 . 3 . 4 . 5 . 6 . 7 . 8 . 9 . 10 . >>
 eXeL@B —› Основной форум —› Flash (swf). Декомпиляция, взлом
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


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