Почему частично? Разберемся в вопросе по порядку. Предположим, у фирмы
есть некоторая информация, вызывающая "живой" интерес у конкурентов.
Первостепенная задача - не допустить попадание этих данных в руки
интересующихся. Не секрет, что в массе своей такими вопросами
занимается бдительная служба безопасности. Более того, поскольку
значительная часть секретной информации хранится на электронных
носителях, а доступ к ней осуществляется посредством компьютеров, СБ в
своей работе зачастую плотно взаимодействует с отделом информационных
технологий. Однако, как бы четко ни был выстроен комплекс мероприятий
по защите от утечек данных, практика показывает, что почти любая
система имеет уязвимые места. Попросту говоря, рано или поздно
информация может попасть в руки злоумышленников, и, если она хранилась
в открытом виде, они без труда смогут ею воспользоваться. Предположение
бредовое с той точки зрения, что вероятность возникновения такой
ситуации минимальна. Так или иначе оно объясняет причину использования
систем шифрования данных уровня предприятия.
Мы немного сузим область рассмотрения, а именно до единичного
пользователя компьютера, который также вполне может располагать
некоторой конфиденциальной информацией. Тем более что неосторожно
забытая или выпавшая из кармана флешка может стать добычей, например,
недоброжелателей или вымогателей. Продолжать список примеров можно
долго, поэтому предположим, что существуют некоторые данные, которые
нужно защитить так, чтобы воспользоваться ими мог только владелец либо
доверенное лицо.
Для решения такой задачи существует множество программ шифрования
данных. Мы рассмотрим одну из них, которая стоит в первых строках
списка лидеров. К тому же подкупает тот факт, что она бесплатна, имеет
открытый исходный код и может использоваться на платформах MS Windows,
Linux и MacOS (не везде полноценно). В статье речь пойдет о
Windows-версии. Даже несмотря на то что речь идет о шифровании,
воспользоваться возможностями этого продукта сможет даже мало что
смыслящий в криптографии человек. Стоит заметить, однако, что
приобретение начальных знаний по предмету лишним не будет.
Речь пойдет о программе TrueCrypt. Актуальная версия на момент
написания статьи была обозначена номером 6.2. Среди "одноклассников"
она позиционируется как инструмент для шифрования данных "на лету".
Это означает, что с ее помощью пользователь может зашифровать раздел
диска, весь диск, USB-накопитель либо создать отдельный файл-контейнер
и, единожды введя пароль, работать с файлами без дополнительных
манипуляций. Все операции шифрования будут происходить незаметно для
него. Хорошим примером для этого может служить воспроизведение файлов
музыкального или видеоформата, которые находятся на зашифрованном
диске. Файлы перетаскиваются в плейлист и воспроизводятся так, как
будто они находятся на незашифрованном разделе. Понятно, что ничего не
мешает помещать в такие разделы любые файлы и работать с ними в режиме
on-line, не задумываясь о шифровании.
Процесс обзора TrueCrypt построен следующим образом. Для начала
пройдемся по общему функционалу и посмотрим, что ставит данный продукт
на ступень выше своих соратников. Затем разберем основные операции
по созданию шифрованных контейнеров, разделов и USB-накопителей и
работе с ними.
Основные достоинства
Не секрет, что для русского ИТ-сообщества свободное распространение
программы будет если не главным, то едва ли не определяющим фактором в
выборе "шифровальщика". Однако если эта свобода не будет
подтверждаться высокой функциональностью продукта, выбор пользователей
вряд ли падет на нее. К TrueCrypt это не относится.
Начнем с того, что она имеет достаточно высокую скорость шифрования
данных. Технология параллелизации (parallelization), которая появилась
в версии 6.0, дает прирост в скорости при работе TrueCrypt на
многопроцессорных системах или многоядерных процессорах. Возрастание
скорости шифрования прямо пропорционально количеству процессоров или
ядер процессора, а также его тактовой частоте. То есть при
использовании двухядерного процессора скорость приблизительно
увеличится вдвое по сравнению с аналогичным одноядерным. Такая же
ситуация и с двумя процессорами. Помимо этого, технология
конвейеризации (pipelining), которая появилась в версии 5.0,
увеличивает быстродействие при работе приложений с файлами,
находящимися в зашифрованных разделах (работает только
на Windows-системах).
Очень грубо, но для наглядности можно заметить, что по тестам скорости
алгоритмов шифрования данных (тест встроен в интерфейс программы) на
системе с двумя процессорами Intel Xeon 3,0 ГГц, 4 Гб оперативной
памяти (DDR2) и RAID-массивом SAS-накопителей было отмечено
десятикратное увеличение показателей по сравнению с машиной, на борту
которой находился один процессор Intel Pentium 1800 ГГц, 1 Гб ОП (DDR)
и жесткий диск с IDE-интерфейсом.
Пользователь TrueCrypt имеет возможность использовать несколько
алгоритмов блочного симметричного шифрования данных на выбор: AES,
Serpent и Twofish (во всех размер ключа шифрования составляет 256 бит,
размер блока - 128 бит); а также каскады алгоритмов, например,
AES-Twofish или даже так - AES-Twofish-Serpent. Однако в случае с
каскадным шифрованием будет заметно снижена скорость выполнения
операций (это можно проверить с помощью все того же теста скорости
алгоритмов шифрования TrueCrypt).
Еще одну интересную черту TrueCrypt разработчики назвали Plausible
deniability. В переводе на русский звучит как "правдоподобное
отрицание". Дело в том, что программа умеет создавать скрытые
контейнеры внутри зашифрованных (и даже скрытую операционную систему).
Таким образом, после монтирования тома скрытый контейнер остается
невидимым. Как это использовать, каждый для себя решит сам. О том же,
как создать такой контейнер, пойдет речь дальше. Помимо всего прочего,
файлы, созданные при помощи TrueCrypt, не связываются с программой, и
определить их происхождение невозможно, так как в заголовке они
содержат набор случайных данных.
TrueCrypt никогда не сохраняет промежуточные данные на диск, все
хранится в оперативной памяти. Это гарантирует отсутствие доступа к
ключам, которые могли храниться во временных файлах. Но, как оказалось,
и эта мера не совсем надежна. Примерно год назад группа ученых
Принстонского университета показала, как можно получить доступ к
данным, хранящимся в оперативной памяти. Желающие могут ознакомиться с
материалами на сайте университета.
Ну и вдобавок ко всему хочется отметить, что TrueCrypt не восприимчива
к атакам "грубой силой", имеется возможность двойной защиты доступа к
данным и использования токенов и смарт-карт для размещения ключа.
Установка программы
Этот процесс вряд ли у кого вызовет затруднения. Правда, есть один
нюанс, о котором нужно сказать отдельно. Дело в том, что программа
может быть установлена в двух разных режимах. В режиме инсталляции
вместе с программой в систему устанавливается драйвер TrueCrypt. Это
нужно для операции шифрования системного раздела, а также
для возможности работы с контейнерами TrueCrypt в контексте
пользователя, не имеющего прав администратора (об этом далее). В
режиме, который называется traveler mode, программа копирует свои файлы
в заданную вами папку. Таким образом, установленный TrueCrypt можно
переносить на съемном носителе и использовать на любой системе. Однако
в этом случае нет возможности шифрования системного диска.
Для того чтобы русифицировать TrueCrypt, стоит всего лишь скачать файл
локализации с сайта разработчика и поместить его в каталог с
программой.
Создание зашифрованного контейнера
Для того чтобы вы могли переносить свои файлы в зашифрованном виде и
использовать их на разных машинах, вам нужно создать файл-контейнер
TrueCrypt. Итак, открываем программу и нажимаем "Создать том". Далее
следуем указаниям "Мастера создания томов". Отмечаем, что мы хотим
создать обычный том TrueCrypt, его название и расположение. Вот здесь
хотелось бы сделать небольшую ремарку. Дело в том, что TrueCrypt все
равно, как вы назовете файл, программа сама определит при попытке
смонтировать раздел, ее это детище или нет. Поэтому для большей
скрытности вы можете назвать ваш контейнер хоть "Любимое кино моей
бабушки.avi". Идем дальше. Выбираем алгоритм шифрования данных и
хеш-алгоритм, который используется генератором случайных чисел (RNG,
Random Number Generator) TrueCrypt для создания ключей, а также
функцией деривации ключа заголовка (header key derivation function).
Далее определяем размер контейнера, вводим пароль и, если необходимо,
указываем путь к ключевому файлу (keyfile, его первые 1,048,576 бит
смешиваются с паролем для повышения криптостойкости). В качестве такого
файла можно использовать любой, имеющийся на вашем жестком диске, либо
создать произвольный при помощи TrueCrypt. Тут стоит оговориться,
потому что вы можете указать даже путь к целой папке, и тогда все файлы
в ней будут ключевыми. Однако при утере хотя бы одного ключевого файла
доступ к зашифрованному контейнеру будет невозможен. Далее нужно
выбрать тип файловой системы для тома TrueCrypt и размер кластера (как
правило, остается по умолчанию). Жмем "Разметить" и по истечении
некоторого времени создание контейнера завершено. Файл-контейнер будет
содержать произвольные данные, которые будут затираться по мере
копирования файлов вовнутрь контейнера и вновь появляться, если будет
освобождаться место внутри него при операции удаления файлов.
Для доступа внутрь контейнера в окне программы выбираем его, нажав
"Файл" и в окне выше из списка доступных букв выбираем необходимую и
жмем "Смонтировать". Вводим пароль и указываем путь к ключевым
файлам, если они используются. Контейнер монтируется как том Windows, и
с данными можно работать, как если бы они находились на обычном
логическом разделе.
Чтобы создать скрытый раздел внутри зашифрованного контейнера, нужно
также запустить мастер и выбрать "Скрытый том TrueCrypt". Сначала
мастер предложит создать обычный том, а затем внутри него скрытый,
проведя два раза один и тот же перечень операций по выбору параметров.
В качестве файловой системы для внешнего контейнера (обычного тома)
будет рекомендовано выбрать FAT из-за особенности размещения служебных
данных на томах NTFS.
Для доступа внутрь скрытого контейнера нужно выбрать основной носитель
- обычный том. И в окне ввода пароля указать пароль, который был введен
при настройке скрытого тома. Тем самым будет смонтирован скрытый том
как том Windows.
При работе с контейнером, имеющим внутри скрытый том, есть вероятность
перезаписи данных при нехватке места на внешнем томе и повреждения
информации внутри скрытого раздела. Чтобы не допустить этого, при
монтировании обычного тома TrueCrypt в окне ввода пароля нужно в
параметрах указать, что скрытый том нужно защитить, затем ввести пароль
доступа к нему и не переживать за сохранность лежащих внутри данных.
Для полной дешифровки файлов, находящихся внутри зашифрованного
раздела, необходимо скопировать их в любое свободное место на жестком
диске, а контейнер просто удалить.
Важной особенностью при работе с контейнерами TrueCrypt является
следующее. Для выполнения операций шифрования/дешифрования нужен
специальный драйвер TrueCrypt, использование которого для обычного
пользователя невозможно, если только система не установлена на
компьютере. Поэтому ни установить, ни использовать TrueCrypt в режиме
traveler mode пользователь без привилегий администратора не сможет.
Шифрование разделов
Для начала рассмотрим шифрование несистемного раздела. Делается это при
помощи того же мастера. Весь процесс похож на создание
файла-контейнера. Только вместо файла указывается раздел, который нужно
зашифровать, и далее параметры шифрования. Отмечу, что шифрование
раздела с данными без их удаления поддерживается только в Windows
Vista. В случае с Windows XP нужно будет предварительно сделать
резервную копию файлов целевого тома. Затем зашифровать раздел и
скопировать на него файлы. По аналогии с контейнерами внутри такого
зашифрованного раздела можно создать скрытый том.
После шифрования раздел по назначенной ему Windows букве диска доступен
не будет, более того, для секретности вы можете ее вовсе удалить. Чтобы
работать с зашифрованным разделом, нужно в главном окне TrueCrypt
выбрать его как устройство, назначить букву и смонтировать.
Что касается шифрования системы, то сделать это можно лишь с ОС
семейства Windows, начиная с Windows XP. Можно зашифровать как весь
системный диск (жесткий диск, на котором находится системный раздел),
так и отдельно раздел, где находится система. Первый вариант возможен
только в Windows Vista, и мы оставим его изучение для ее любителей.
Единственное замечание нужно сделать вот о чем. Extended-разделы после
проведения операции шифрования перестают быть видны в системе, и, чтобы
добраться до данных, лежащих на них, необходимо будет перманентно
расшифровать системный диск. Не очень удобно. Однако разработчики
обещают в скором времени устранить эту неприятную особенность.
Процесс шифрования системного раздела несколько сложнее, чем операции,
описанные в предыдущих параграфах. И выполняться он будет в два этапа.
Первый - этап подготовки. Пользователь должен будет указать обычный или
скрытый раздел, который он хочет создать (именно так TrueCrypt
позволяет создать скрытую операционную систему), параметры шифрования,
а также количество операционных систем, установленных на вашем
компьютере (мы рассмотрим вариант с одной ОС), после чего программа
создаст образ диска восстановления. Его необходимо, не прерывая работы
мастера, записать на диск. После успешной проверки создания такого
диска нужно будет перезагрузить машину и загрузиться с него. Далее
вводим пароль, который указали в параметрах шифрования, и, если все
прошло удачно, TrueCrypt приступит ко второму этапу - непосредственному
шифрованию системы, причем во время этого можно делать что угодно на
компьютере. Более того, процесс можно приостановить и продолжить позже
или даже после перезагрузки компьютера, система будет оставаться
частично зашифрованной. Помимо этого, после загрузки BIOS управление
будет передаваться загрузчику TrueCrypt. Приятной возможностью является
то, что пользователь сам может указать, что будет выводиться на экран
после загрузки BIOS. Можно даже написать что-то вроде "DISK BOOT
FAILURE, INSERT SYSTEM DISK AND PRESS ENTER", тем самым имитируя
отсутствие системы как таковой. Однако после ввода пользователем
валидного пароля система продолжит загрузку.
Вернемся к диску восстановления. Нетрудно догадаться, что он привязан
именно к той сессии шифрования, в которую он был создан, и не является
универсальным. Он поможет в случае, когда поврежден мастер-ключ либо
заголовок тома. С его помощью также можно перманентно расшифровать
системный том, если у вас появились проблемы с загрузкой Windows и вы
хотите провести операцию восстановления. Однако все это возможно, если
вы помните правильный пароль для доступа к зашифрованному системному
разделу.
Процесс создания скрытого системного раздела с установленной в нем
операционной системой в рамках этой статьи мы рассматривать не будем.
Желающие могут ознакомиться с достаточно подробной документацией на
сайте разработчика.
Шифрование USB-накопителя
Честно говоря, эта операция мало чем отличается от создания
зашифрованного несистемного диска. В списке устройств на этапе
настройки нужно найти свою флешку и выполнить ее шифрование. Однако
замечу, что более удобным в этом случае является размещение на
USB-накопителе TrueCrypt в режиме traveler mode и создание на нем
файла-контейнера. Таким образом, мы получим возможность доступа к
зашифрованным данным на любой системе, даже где не установлен
TrueCrypt.
В заключение, рассмотрев основной функционал программы, ответим на
вопрос, поставленный в начале статьи. TrueCrypt шифрует данные,
находящиеся на носителях информации. Однако она не может шифровать
ICQ-трафик или сообщения электронной почты (хотя ничто не мешает при
этом пересылать контейнеры TrueCrypt как вложения), а также не имеет
функций для создания ЭЦП (электронно-цифровой подписи).
Недостатки TrueCrypt
Помимо всего прочего, нужно отметить, что программа имеет некоторые
недостатки. Во-первых, это ориентированность на Windows-системы -
многие функциональные возможности, как было отмечено выше, работают
только в ОС Windows (кстати, из-за своей неоднозначной лицензии
TrueCrypt была выведена из состава многих Linux-дистрибутивов).
Во-вторых, нет возможности изменения размера контейнера, к тому же
операция дешифрования несистемного раздела далеко не тривиальна и
требует некоторых манипуляций с файлами. В-третьих, программа не имеет
встроенного генератора паролей и допускает использование пользователем
простых паролей. В-четвертых, при хранении данных в контейнерах
TrueCrypt существует вероятность полной потери данных вследствие
удаления файла-контейнера. Ну и, в-пятых, отмечу одну особенность,
которая кому-то может послужить на пользу, а кому наоборот. Дело в том,
что в многопользовательской среде (терминальный режим) смонтированный
том TrueCrypt будет виден и доступен для всех пользователей без
исключения, избежать доступа к нему можно использованием разрешений
NTFS. Та же ситуация повторится при смене пользователя на системах
Windows, начиная с версии Windows XP. Кстати говоря, основные проблемы
и ограничения программы указаны на сайте разработчика. Этот список
корректируется, если выявляются новые недочеты либо устраняются уже
известные.
Несмотря на все это, такой инструмент, как TrueCrypt, будет полезен
тем, кто хочет защитить свои данные от взлома и не позволить себя
скомпрометировать.
Разъяснения многих понятий и терминов криптографии, а также некоторая
информация касательно функционала программы (например, использование
токенов и смарт-карт) не вошли в статью. Обо всем этом можно почитать
в специальной литературе, а также на официальном сайте TrueCrypt.
Последний раз редактировалось xalik; 14.08.2010 в 10:32.
ВЗЛОМ
Q: Какие вообще существуют способы взлома программ?
A: Вопрос сам по себе странный, на него нельзя ответить однозначно, и никто не сможет ответить универсально. Но раз такой вопрос возник, я постараюсь ответить. Часто проще всего оказывается пропатчить программу (такой способ взлома называется битхаком), т.е. изменить определенные байты таким образом, чтобы программа думала, что она зарегистрирована либо чтобы просто не выполнялись ненужные нам функции (например появления раздражающих окон с напоминанием о необходимости регистрации). Потом можно найти место сравнения правильного пароля с введенным и подсмотреть этот правильный пароль. Можно найти процедуру генерации/проверки правильного кода и разобраться с алгоритмом, а потом уже и флаг в руки. Можно попытаться найти правильный код в памяти программы рядом с введенным кодом. Если программа запакована можно сделать лоадер. На крайний случай можно сделать bruteforcer, т.е. попытаться подобрать регистрационный код, либо ключ для расшифровки. Еще есть защита электронными ключами, где пишется эмулятор функции проверки либо генератор ключа. Подробнее на этот вопрос ответить нельзя, для этого существуют конкретные статьи.
Q: Я только начал заниматься reversing'ом, и есть вопрос. Программа для регистрации просит ввести код. Как поймать место, когда она его будет считывать, чтобы потом можно было узнать, что она делает с введенным кодом, и где идет проверка.
A: Нужно попробовать поставить breakpoint на функции GetWindowTextA, GetDlgItemTextA. Если они не сработают, то попробуйте поставить брейкпоинт на функцию hmemcpy/memcpy. Хотя часто оказывается проще искать по сообщению об ошибке, т.е. искать в дизассемблере ссылку на строку-сообщение об ошибке. Ведь не обязательно, что программа будет использовать хоть одну из этих API функций: например если программа написана на VB или Clarion.
Q: Не подскажете какой-нибудь легкий способ взлома?
A: Можно попробовать выделить адресное пространство ломаемой программы, после чего сделать поиск введенного пароля в памяти (предварительно ввести пароль и нажать ОК или Регистрация и т.д.) с помощью команды в SoftIce "s 0 l -1 "пароль который вы ввели"". Если пароль найдется в памяти, то посмотрите близлежащие области памяти: возможно рядом будет настоящий пароль. Это можно сделать нажимая мышкой на полосы прокрутки в окне данных, где найдется введенный пароль, либо Alt + вверх или вниз. Однако на практике такое наврятли сработает. Разве что в crackme каком-нибудь.
Q: А почему так надо писать - s 0 l -1 "что_найти" ?
A:
s - означает поиск, от слова search.
0 - c какого адреса в памяти искать
l - сокращение от слова length (длина)
-1 - размер области памяти в которой искать (-1 = FFFFFFFF)
Q: А если существует несколько искомых строк, как продолжить поиск, что-то типа "найти далее"?
A: После того, как нашли первый раз, вводите просто "s" для продолжения поиска.
Q: А еще какой-нить легкий способ взлома?
A: Ну например если программа выводит MessageBoxA, то ставим брейкпоинт на MessageBoxA и вводим код (или делаем что нужно) и жмем ОК (ну или что там в программе надо нажать для регистрации). Должны будем сразу же прерваться в отладчике в начале функции MessageBoxA (она должны будет вывести окно с сообщением о неправильном пароле и т.п.). Для выхода из функции жмем F12 (после чего надо будет нажать ОК в появившемся MessageBox'e) и оказываемся на следующей, после вызова MessageBoxA, команде. Смотрим выше и ищем условный переход типа je, jne, jz, jnz (je - это то же самое, что и jz, а jne - то же самое, что и jnz). Если нашли, то можно попробовать поставить брейкпоинт на адрес этого условного перехода и еще раз попытаться зарегистрироваться. Скорее всего остановимся на этом адресе. Теперь попробуйте изменить соответствующий флаг. Например если там je, jne, jz, jnz то эти команды перехода зависят от флага нуля (zf - флаг нуля). Пишем r fl "флаг", в нашем примере - "r fl z", для смены значения флага на противоположное и нажимаем F5. Возможно программа выведет сообщением о верной регистрации. А почему так? Потому что скорее всего эта команда условного перехода (jz, jnz и т.д.) делает переход на вывод сообщения об успешной регистрации, либо о неуспешной. Если это так, то в нашем случае она должна будет выполнить переход на сообщение о неверном коде, и если мы сменим соответствующий регистр флагов, то изменится и действие этой команды, и мы направимся на вывод сообщения об успешной регистрации.
Q: Ну а еще какой-нибудь легкий способ? =)
A: Можно улучшить предыдущий способ (про установку брейкпоинта на функцию MessageBoxA) использованием программы W32Dasm. Начало такое же. Узнаем адрес например следующей после вызовы MessageBox команды. Открываем исследуюмую программу в W32Dasm'e и ищем этот адрес. Выше (это может быть на 5-10-20 строк выше) скорее всего будет одно из двух:
1) Такая строка:
* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:00XXXXXX(C)
В этом случае перейдите на адрес XXXXXX и там скорее всего будет команда условного перехода (jn, jnz и т.д. - уже устал писать =). Тогда попробуйте изменить этот условный переход на противоположный одним из известных способов (например с помощью отладчика поставить брейкпоинт на адрес этой команды и изменить соответствующий флаг на противоположный, как было описано выше; либо изменить соотвествующую команду на противоположную в файле)
2) Условный переход типа jz, jnz, je, jne. Как и в предыдущем случае, попробуйте изменить этот переход.
Q: Я дизассемблировал исследуемую программу и думаю, что нашел место где происходит проверка введенного кода, но когда я пишу в SoftIce "bpx 12345678" (12345678 - адрес "этого места"), то breakpoint никогда не срабатывает. Что делать?
A: Возможно код по этому адресу просто не выполняется, но скорее всего дело в том, что вы не выделили адресное пространство процесса. Прежде чем ставить breakpoint на какой-то адрес в исследуемой программе необходимо выделить адресное пространство этого процесса. Это делается командой "addr PROCESSNAME" в отладчике. Если имя процесса слишком длинное или сложное, можете написать "addr PID", где PID - Process ID - идентификатор процесса. Его можно узнать просто набрав команду "addr" и в появившемся списке посмотреть значение в колонке PID напротив нужного процесса. Еще можно после того, как команда "addr" выведет информацию о текущих процессах, выделить мышкой имя нужного процесса, нажать правую кнопку и затем "copy", после чего нажатием правой кнопки и выбором "paste" можно будет вставлять имя процесса из буфера.
Вот пример того, что можно увидеть после ввода команды "addr":
CR3 Addr PID NAME
........ ........ .... .........
xxxxxxxx xxxxxxxx 1234 BlueFace
xxxxxxxx xxxxxxxx 0000 Idle
Теперь, чтобы, например, выделить процесс BlueFace, можно написать "addr 1234" или "addr blueface".
Q: Программа работает нормально и без ограничений, но выводит раздражающее сообщение о том, что она не зарегистрирована. Как можно убрать это сообщение?
A: Это сообщение скорее всего выводится какой-либо процедурой или функцией. Надо найти вызов этой процедуры или функции и занопить его. Вся проблема сводится к тому, как найти этот вызов. Если раздражающее окно - это MessageBox, то ставьте брейкпоинт на функцию MessageBoxA, и когда он сработает жмите F12, выше увидете вызов функции MessageBoxA. Запомните адрес этого вызова. После чего занопьте его и четыре команды push перед ним. Если вызываемое окно - не messagebox, то будет труднее. Можно попробовать поискать с помощью дизассемблера обращение к выводимой в раздражающем сообщении строке и рядом будет вызов процедуры, которая выведет это сообщение, либо обращение будет происходить уже внутри этой процедуры. В этом случае найдите начало процедуры/функции и поставьте туда команду ret (байт C3h) - возврат из функции. Т.е. как только эта функции будет вызываться для вывода сообщения, будет просто происходить мгновенный возврат и ничего выводиться не будет. Только в этом случае не забудьте восстановить стек! Т.е. если параметры для передачи функции помещались в стек, то перед тем, как писать команду ret, необходимо вынуть эти параметры из стека, точнее освободить стек (можно просто сдвинуть стек на нужное число. Например если функции передавалось два 4-х байтных параметра, то для того что-бы освободить стек от этих параметров, указатель вершины стека надо увеличить на 4x2=8. Т.е. написать add esp,8 , а уже потом ret). Если вам что-то не понятно, то это придет с опытом. Я лишь дал "наводку". Тут нет универсального способа, только практика вам поможет.
Q: Как узнать машинный код определенной инструкции? Я хочу пропатчить программу.
A: Я для этого использую QView: запускаем, жмем Tab, пишем любую инструкцию, жмем Enter и смотрим слева ее машинный код. Только чтобы потом не сохранить изменения в памяти, жмем два раза ESC и выбираем Discard (отменить изменения). Также легко можно это сделать в HieW: открываем любой файл, выбираем режим показа ASM. Затем жмем F3 и F2. Пишем нужную инструкцию и смотрим ее машинный код.
Q: В программе есть какая-либо команда, и мне нужно сделать так, чтобы она не выполнялась. Как это сделать?
A: Самый простой способ это занопить команду. Это значит, что на место этой команды надо вписать необходимое количество команд nop (байт 90h). Команда nop (сокращение от no operand) ничего не далает. Так и написано в официальной документации: "This is a do nothing instruction".
Q: Всмысле необходимое количество команд nop? Почему просто не заменить одну ненужную команду, одной командой nop?
A: Команда, которую вам нужно отключить, в машинных кодах может занимать более одного байта (обычно так и бывает). А команда nop в машинном коде выглядит как один байт - 90h. Если заменить команду, машинный код которой занимает больше чем 1 байт, на 1 команду nop, то после команды nop (байта 90h) считаются следующие байты для обработки и выполнения, но эти байты будут просто остатками от заменяемой команды, поэтому их выполнение приведет к ошибке в программе. Поэтому, если нужно сделать так, чтобы какая-то команда не выполнялась, то ее надо заменить на столько команд nop, сколько байтов занимает эта команда. Например команда call 00450000 занимает 5 байтов, соответсвенно ее надо будет заменить на последовательность из 5 команд nop.
Q: А как это сделать? И вообще как пропатчить исполняемый файл программы?
A: Открываете файл, который собираетесь патчить в любом шестнадцатеричном редакторе (я использую Hex WorkShop), находите нужную команду или нужное место по соответствующему смещению (адресу относительно начала файла) в файле и изменяете ее как хотите.
Q: Я знаю адрес команды, которую мне надо изменить, в памяти. Как мне узнать, по какому смещению (адресу) относительно начала файла находится эта команда в файле?
A: Лично я смотрю смещение нужной команды в файле с помощью IDA Pro или W32Dasm. В обеих этих программах смещение выделенной команды/адреса в файле показывается в строке состояния (такая панелька в самом низу окна программы). Например в W32Dasm'e, если вам надо найти смещение нужной команды в памяти, выделите эту команду и в строке состояния смотрите такую строку: .Offset 00XXXXXX in File . Это значит что по смещению XXXXXX относительно начала файла и находится машинный код вашей команды. Аналогично в IDA Pro смотрите искомое смещение в строке состояния слева от текущего адреса. Также смещение нужной команды в файле, зная ее (даже и виртуальный) адрес, можно найти с помощью своеобразного калькулятора в PE Tools или LordPE (PE Editor -> FLC).
Q: Мне нужно изменить работу программы для своих целей. Я хочу вставить на место инструкций, которые хочу изменить, свои инструкции. Но "не хватает места", т.е. мои инструкции занимают больше места, чем те, которые нужно заменить. Что делать?
A: В этом случае составляем нужный нам код (процедуру). В конце кода добавляем команду ret. Создаем новую секцию (с помощью LordPE или ProcDump'a) и помещаем наш код в эту секцию. В начале инструкций, которые нам надо изменить, ставим вызов добавленной процедуры (call), оставшиеся ненужные инструкции, до начала нужных, забиваем командами "nop". Все. Только нужно будет быть внимательным с адресами, их надо будет смотреть в отладчике. Еще можно не добавлять новую секцию, а написать свой код (процедуру) в конец последней секции файла (там обычно есть много нулей), и дальше делать так, как я написал выше. Если в конце файла нет нулей, можно их дописать и расширить raw и virtual size последней секции, и не забыть исправить Image Size (увеличить все эти параметры на длину дописанного кода).
Q: При запуске программы, которую я хочу отладить, она пишет, что запущен отладчик и отказывается работать дальше. Что делать?
A: Можно конечно попытаться вручную найти где проходит проверка на наличие отладчика, но зачастую это сложно и можно использовать для этого специальные plugin'ы для SoftIce'а. Под Windows 9x это FrogsIce, под Windows 2K/XP это IceExt. В большинстве случаев они позволяют "скрыть" отладчик, и программа должна будет запуститься без проблем. Замечу, что IceExt на данный момент является одним из самых продвинутых plugin'ов в этой области и помимо скрытия отладчика имеет еще много полезных функций. Хотя я рекомендую все-таки разобраться как происходит отлов отладчика и учиться обходить это самому (вручную).
Q: Мне необходимо взломать программу, написанную на Visual Basic. При вводе неправильного пароля выскакивает табличка с соотвествующим сообщением, но я не могу найти это сообщение в дизассемблере.
A: Строки в программах, написанных на Visual Basic, хранятся в unicod'e т.е. на хранение одного символа уходит 2 байта. Для начала можно использовать патчи для W32Dasm типа Win32Dasm++ или SDR Enabler for VB Apps. Также дизассемблер IDA Pro может распознавать строки в unicode (Options -> ASCII String Style -> Unicode). Еще для исследования VB программ можно использовать NuMega SmartCheck.
Q: Программа написана на Дельфи. Вроде выводит MessageBox, но когда ставлю брейкпоинт на MessageBox, то он не срабатывает. Что делать?
A: Часто в Дельфи для вывода сообщения используют не MessageBox, а "самодельную" функцию ShowMessage. Если это дельфовский ShowMessage, то я думаю проще всего в IDA PRO сделать поиск функции ShowMessage либо прямо поиск строки, скорее всего ее смещение будет загружаться в eax, т.е. будет что-то типа
mov eax, offset _str_STROKA.Text
call XXXXXXXXX , где XXXXXXXX - либо адрес либо название функции. Ну и конечно еще на помощь придет программа DeDe.
Q: Есть программы, в которых серийный номер (рег. код) тщательно зашифрован, т.е. вместо пароля (рег. кода) ты видишь %^.#*& или просто что-то неосмысленное... Как такое дело расшифровать?
A: Если есть уверенность, что это зашифрованный пароль, то просто надо смотреть алгоритм, по которому он получается из введенного. В этом случае, когда вводится пароль, он должен будет шифроваться (преобразовываться) по точно такому же алгоритму, как и настоящий пароль, из которого получилась данная зашифрованная строка (%^.#*&). Ну вот и нужно реверсировать алгоритм, разбираться с ним. Еще необходимо помнить, что если дело слишком запутанно и сложно, то просто иногда легче не находить пароль, а просто пропатчить программу, чтобы она приняла любой пароль и зарегистрировалась.
Q: Что делать, если текст в MessageBox выводится на русском языке: я не могу найти его в дизассемблере, т.к. русский язык не поддерживается?
A: Тут есть два варианта:
1) С помощью Hex-редактора найти смещение (адрес относительно начала файла) этой строки в файле. Загрузить файл в IDA Pro, найти это адрес, выделить его и нажать "N", после чего ввести новое имя для этого адреса (латинскими буквами). Теперь нажимаете Alt+T для поиска и вводите указанное имя. Когда строка найдется, для продолжения поиска жмите Ctrl+T.
2) Если у вас нет IDA Pro или вы не любите пользоваться этим дизассемблером, то найдите аналогично искомую строку на русском языке в файле и замените ее на любую строку на английском языке, хоть на abcdefghijk... (это можно сделать также с помощью любого hex-редактора), после чего загружайте свой файл в дизассемблер (например W32Dasm) и ищите новую строку.
Q: Как взломать программу, в которой кнопка ОК не работает, пока не введешь правильный рег. код? Т.е. кнопка есть, но ее нельзя нажать!
A: Тут надо подумать логически. Ясно, что каждый раз когда просто вводится символ, то запускается процедура, которая это дело проверяет. (Это событие ОnСhange. Кто программирует на чем-нибудь типа Delphi, C++ Builder и т.д., тот знает). Чтобы проверять каждый раз введенный пароль при вводе нового символа, его надо считать из Edit'a, так ? Ну и как он будет считываться ? Как обычно. Ставим брейкпоинт на GetWindowTextA, GetDlgItemTextA и вперед. Тоже самое, как если бы мы нажали ОК. Только тут брейкпоинт должен будет сработать при вводе нового символа. Если программа написана на Delphi, то можно использовать DeDe для облегчения. Надо будет найти в списке форм нужную форму и в списке процедур выбрать OnChange, а дальше уже смотреть что происходит в процедуре.
Q: Программа имеет ограничение в незарегистрированной версии такое, что выходит после 10 минут своей работы. Что посоветуете?
A: Обычно такое ограничение делается одним из двух способов:
1) Запоминается время при запуске, а потом по таймеру или еще по какому-либо событию получается текущее время, и находится разница между текущим временем и временем запуска программы. И если разница больше например 10 минут, то программа прекращает свою работу. В этом случае надо ставить брейкпоинты на функции GetLocalTime или GetSystemTime и смотреть, что происходит после получения времени.
2) Запускается таймер с заданным временем (например 600000 мс = 10 минут) и, когда таймер срабатывает, программа завершает свою работу. В этом случае необходимо ставить брейкпоинт на функцию SetTimer. Установка Timer'а функцией SetTimer на ассемблере будет выглядеть так:
push XXXXXX // XXXXXX - адрес процедуры, которая будет выполнена при срабатывании таймера.
push YYYYYY // YYYYYY - время, через которое будет срабатывать таймер.
push ZZZZ // ZZZZ - идентификатор таймера. Иногда может быть нулем.
push XYXY // XYXY - handle окна, которому будут передаваться сообщения от таймера. Иногда может быть нулем.
call SetTimer
Тут можно поступить двумя способами. Например увеличить время срабатывания таймера, (т.е. второй push заменить на push FFFFFFFh например) либо занопить все это, чтобы таймер не запускался (занопить начиная с первого push'а и по команду call SetTimer, либо вместо первого push'а поставить прыжок на следующую после call SetTimer команду). Ну вот вроде и все, что нужно знать для начала. Пробуйте!
Q: Перебрал все известные мне способы взлома, но программа имеет хорошую защиту и сложный алгоритм генерации кода, и я так и не смог ее взломать. Что попробовать напоследок?
A: Обычно последней стадией, когда все уже перепробовано и ничего не вышло, является написание bruteforcer'а. Если код состоит из относительно небольшого числа символов, или если можно ввести дополнительные условия, сокращающие перебор, то брутфорсер становится довольно реальным и действенным вариантом.
Q: Какие существуют способы взлома защиты CD от копирования на винчестер?
A: Вот несколько полезных советов для начала:
1) Ставим брейкпоинт "bpx GetDriveTypeA" и запускаем игру, перед этим скопировав ее на винчестер. Функция GetDriveTypeA возвращает в eax тип указанного диска. Нас интересуют только 2 возможных возвращаемых значения:
Если указанный диск - диск винчестера, то возвращаемое значение в eax равно 3.
Если указанный диск - CD, то в eax возвратится 5.
Ниже должна будет идти проверка возвращаемого значения (типа если не "5", то значит игру скопировали, и произойдет переход на выход, либо на сообщение о том, что CD не вставлен в CD-ROM), которую надо будет изменить под свои цели.
2) Если предыдущий способ не помог, то используем брейкпоинт "bpx GetVolumeInformation". Функция GetVolumeInformation обычно используется для проверки метки диска: после вызова функции, скорее всего будет идти сравнение метки. Это надо отследить и исправить, т.е. сделать так, чтобы при любой метке игра запускалась.
3) Еще можно попробовать ставить брейкпоинты на функции GetDiskFreeSpace и GetFileAttributesA. Из названия вы можете догадаться для чего нужны эти функции. Используйте это в своих целях.
4) Игра также может делать проверку на запись файла на диск, с которого она запускается. На CD, как вы понимаете, запись не должна получиться. Если же файл запишется, значит игру запускают с винчестера. В этом случае используйте брейкпоинты на функции CreateFileA и WriteFile, чтобы найти проверку на запись.
Q: Как взломать запароленный zip/arj архив?
A: Т.к. при криптовании запароленного zip/arj архива используется необратимый алгоритм, то вскрыть такой архив можно только двумя способами
1) Простой подбор пароля (перебор всех возможных вариантов паролей специальными программами) - рекомендую программу AAPR (Advanced Archive Password Recovery) или AZPR (Advanced Zip Password Recovery).
2) Так называемая plain-text атака. Для этого вам надо найти хотя бы один файл, точь-в-точь такой же, какой есть в запароленном архиве. После этого вы архивируете этот файл, а из запароленного архива удаляете все файлы (естественно из копии =) кроме этого. Далее я вам объяснять не буду. Просто используйте plain-text атаку в программе AAPR или AZPR (поисковик - вперед!)
Q: Как взломать запароленный rar архив?
A: Смотрите предыдущий вопрос и используйте перебор с помощью программы AAPR. plain-text атака в этом случае не прокатывает, т.к. работает только для ZIP/ARJ архивов.
Последний раз редактировалось xalik; 14.08.2010 в 10:43.
Надо иметь выделенку, ставим маршрутизатор (роутер) дома подойдет модель DL-604. В нем есть все нужные нам функции. Необходимо пройти Wizard. Подключаем шнурок от роутера в порт ПК, а шнурок от модема в гнездо 1 роутера.
Во вкладочке advanced включить такие параметры (посмотреть, чтобы были правила):
Action Name Source Destination Protocol
Allow Ping WAN port WAN,* WAN,* ICMP,*
Deny Default *,* LAN,* *,*
Allow Default LAN,* *,* *,*
Затем во вкладочке Tools -> Misc
1. Выключить
Allows VPN connections to work through the DI-604 (если не нужен VPN).
PPTP Disabled
IPSec Disabled
Block WAN Ping
When you "Block WAN Ping", you are causing the public WAN IP address on the DI-604 to not respond to ping commands. Pinging public WAN IP addresses is a common method used by hackers to test whether your WAN IP address is valid.
Discard PING from WAN side Disabled
Эта опция включает PING, без нее у меня провайдер не работает, не дает нормально IP.
Если ваш провайдер работает с включенной опцией ВКЛЮЧИТЕ ее.
XBOX Support
You can setup this item if you want to enable XBOX Support
Disabled
UPnP Setting
You can disable or enable UPnP functions at anytime.
Disabled
2. Включить
DoS protection
You can setup this item if you want to enable DoS protection.
Enabled
SPI mode
You can setup this item if you want to enable SPI mode.
Операционная система Windows XP обладает развитой системой безопасности, которая, тем не менее, нуждается в настройке. Мы надеемся, что вы понимаете, что система Windows XP должна устанавливаться на разделах NTFS, что применение файловой системы FAT32 не рекомендуется, исходя из принципов безопасности (встроенные средства безопасности просто не могут быть реализованы при условии применения FAT32). В случае применения файловой системы FAT 32 почти все утверждения данного раздела теряют для вас всякое значение. Единственный способ включить все разрешения файловой системы – преобразовать диск в формат NTFS. читать дальше
После чистой установки Windows XP предлагаемые по умолчанию параметры безопасности работают как переключатели типа «включить-выключить». Такой интерфейс носит по умолчанию название Простой общий доступ (Simple File Sharing). Такая конфигурация обладает низким уровнем безопасности, практически совпадающей со стандартной конфигурацией Windows 95/98/Me.
Если вас не устраивает такая конфигурация, вы можете воспользоваться всей мощью разрешений для файлов в стиле Windows 2000. Для этого откройте произвольную папку в Проводнике и выберите Сервис -> Свойства папки (Tools -> Folder options). Перейдите на вкладку Вид найдите в списке флажок Использовать простой общий доступ к файлам (рекомендуется) (Use File Sharing (recommended) и снимите его.
Когда вы выключаете простой общий доступ, в диалоговом окне свойств любой папки появляется вкладка Безопасность. Аналогично осуществляется выдача разрешений на файлы. Все разрешения хранятся в списках управления доступом (Access Control List – ACL).
При установке и удалении разрешений руководствуйтесь следующими основными принципами:
1. Работайте по схеме «сверху-вниз».
2. Храните общие файлы данных вместе.
3. Работайте с группами везде, где это только возможно.
4. Не пользуйтесь особыми разрешениями.
5. Не давайте пользователям большего уровня полномочий, чем это абсолютно необходимо (принцип минимизации полномочий).
Установка разрешения из командной строки
Утилита командной строки cacls.exe доступна в Windows XP Professional позволяет просматривать и изменять разрешения файлов и папок. Cacls – сокращение от Control ACLs – управление списками управления доступом.
Ключи командной строки утилиты cacls
• /T - Смена разрешений доступа к указанным файлам в текущей папке и всех подпапках
• /E - Изменение списка управления доступом (а не полная его замена)
• /C - Продолжить при возникновении ошибки «отказано в доступе»
• /G - пользователь:разрешение Выделение пользователю указанного разрешения. Без ключа
• /E - полностью заменяет текущие разрешения
• /R - пользователь Отменяет права доступа для текущего пользователя (используется только с ключом /E)
• /P - пользователь:разрешение Замена указанных разрешений пользователя
• /D - пользователь Запрещает пользователю доступ к объекту
С ключами /G и /P нужно использовать одну их перечисленных ниже букв (вместо слова разрешение):
• F (полный доступ) – эквивалентно установке флажка Разрешить полный доступ (Full Control) на вкладке Безопасность.
• C (изменить) – тождественно установке флажка Разрешить Изменить (Modify)
• R (чтение) – эквивалентно установке флажка Разрешить Чтение и выполнение (Read & Execute)
• W (запись) – равнозначно установке флажка Разрешить запись (Write)
Microsoft Windows XP позволяет предотвратить попадание конфиденциальных данных в чужие руки. Шифрующая файловая система (Encrypting File System - EFS) шифрует файлы на диске. Однако, следует иметь ввиду, что если вы утратите ключ для расшифровки, данные можно считать утерянными. Поэтому если вы решите воспользоваться преимуществанми EFS, необходимо создать учетную запись агента восстановления, резервную копию собственного сертификата и сертификата агента восстановления. Если вы предпочитаете работать с командной строкой, то можете воспользоваться программой cipher.exe.
Команда cipher без параметров выводит информацию о текущей папке и размещенных в ней файлах (зашифрованы они или нет). Ниже приведен список наиболее часто используемых ключей команды cipher
• /E - Шифрование указанных папок
• /D - Расшифровка указанных папок
• /S:папка - Операция применяется к папке и всем вложенным подпапкам (но не файлам)
• /A - Операция применяется к указанным файлам и файлам в указанных папках
• /K - Создание нового ключа шифрования для пользователя, запустившего программу. Если этот ключ задан, все остальные игнорируются
• /R - Создание ключа и сертификата агента восстановления файлов. Ключ и сертификат помещаются в файл .CFX, а копия сертификата в файле .CER
• /U - Обновление ключа шифрования пользователя или агента восстановления для всех файлов на всех локальных дисках
• /U /N - Вывод списка всех зашифрованных файлов на локальных дисках без каких-либо других действий
Устранение проблем с разрешениями
Агент восстановления данных
Агентом восстановления данных (Data Recovery Agent) назназначается обычно администратор. Для создания агента восстановления нужно сначала сохдать сертификат восстановления данных, а затем назначить одного из пользователей таким агентом.
Чтобы создать сертификат нужно сделать следующее:
1. Нужно войти в систему под именем Администратор
2. Ввести в командной строке cipher /R: имя файла
3. Введите пароль для вновь создаваемых файлов
Файлы сертификата имеют расширение .PFX и .CER и указанное вами имя.
ВНИМАНИЕ! Эти файлы позволяют любому пользователю системы стать агентом восстановления. Обязательно скопируйте их на дискету и храните в защищенном месте. После копирования удалите файлы сертификата с жесткого диска.
Для назначения агента восстановления:
1. Войти в систему под учетной записью, которая должна стать агентом восстановления данных
2. В консоли Сертификаты перейдите в раздел Сертификаты – Текущий пользователь -> Личные (Current User -> Personal)
3. Действие -> Все задачи -> Импорт (Actions -> All Tasks -> Import) для запуска мастера импорта сертификатов
4. Проведите импорт сертификата восстановления
При неправильном использования средств шифрования вы можете получить больше вреда, чем пользы.
Краткие рекомендации по шифрованию:
1. Зашифруйте все папки, в которых вы храните документы
2. Зашифруйте папки %Temp% и %Tmp%. Это обеспечит шифрование всех временных файлов
3. Всегда включайте шифрование для папок, а не для файлов. Тогда шифруются и все создаваемые в ней впоследствии файлы, что оказывается важным при работе с программами, создающими свои копии файлов при редактировании, а затем перезаписывающими копии поверх оригинала
4. Экспортируйте и защитите личные ключи учетной записи агента восстановления, после чего удалите их с компьютера
5. Экспортируйте личные сертификаты шифрования всех учетных записей
6. Не удаляйте сертификаты восстановления при смене политик агентов восстановления. Храните их до тех пор, пока не будете уверены, что все файлы, защищенные с учетом этих сертификатов, не будут обновлены.
7. При печати не создавайте временных файлов или зашифруйте папку, в которой они будут создаваться
8. Защитите файл подкачки. Он должен автоматически удаляться при выходе из Windows
Конструктор шаблонов безопасности
Шаблоны безопасности являются обыкновенными ASCII – файлами, поэтому теоретически их можно создавать с помощью обыкновенного текстового редактора. Однако лучше воспользоваться оснасткой Security Templates консоли Microsoft Management Console (MMC). Для этого в командной строке нужно ввести mmc /a в этой консоли выбрать меню File – Add/Remove. В диалоговом окне Add Standalone Snap-in выбрать Security Templates – Add.
Управление оснасткой
Шаблоны безопасности расположены в папке %systemroot%securitytemplates. Количество встроенных шаблонов изменяется в зависимости от версии операционной системы и установленных пакетов обновлений.
Если раскрыть любую папку в Security Templates, то в правой панели будут показаны папки, которые соответствуют контролируемым элементам:
• Account Policies – управление паролями, блокировками и политиками Kerberos
• Local Policies – управление параметрами аудита, пользовательскими правами и настройками безопасности
• Event Log – управление параметрами системного журнала
• Restricted Groups – определение элементов различных локальных групп
• System Services – включение и отключение служб и присвоение права модификации системных служб
• Registry – назначение разрешений на изменение и просмотр разделов реестра
• File System – управление разрешениями NTFS для папок и файлов
Защита подключения к Интернет
Для обеспечения безопасности при подключении к Интернет необходимо:
• Активизировать брандмауэр подключения к Интернет (Internet Connection Fire....) или установить брандмауэр третьих фирм
• Отключить Службу доступа к файлам и принтерам сетей Microsoft
Брандмауэром подключения к Интернет называется программный компонент, блокирующий нежелательный трафик.
• Активация Брандмауэра подключения к Интернет.
• Откройте Панель управления – Сетевые подключения
• Щелкните правой кнопкой мыши на соединении, которое вы хотите защитить и выберите из меню пункт Свойства
• Перейдите на вкладку Дополнительно, поставьте галочку Защитить мое подключение к Интернет
Заключение
Изложенные выше рекомендации не являются исчерпывающим материалом по настройке безопасности операционной системы Windows XP Professional, однако надеюсь, они смогут помочь вам в этом нелегком процессе.
Последний раз редактировалось xalik; 14.08.2010 в 10:47.
–>
Ваша реклама может быть здесь... пишите на телегу @VOPROS24
Часовой пояс GMT +3, время: 16:15.
Весь материал, представленный на сайте взят из доступных источников или прислан посетителями сайта. Любая информация представленная здесь, может использоваться только в ознакомительных целях. Входя на сайт вы автоматически соглашаетесь с данными условиями. Ни администрация сайта, ни хостинг-провайдер, ни любые другие лица не могут нести отвественности за использование материалов. Сайт не предоставляет электронные версии произведений и ПО. Все права на публикуемые аудио, видео, графические и текстовые материалы принадлежат их владельцам. Если Вы являетесь автором материала или обладателем авторских прав на него и против его использования на сайте, пожалуйста свяжитесь с нами.