The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

В репозитории PyPI выявлены вредоносные пакеты, нацеленные на кражу криптовалюты

08.11.2022 11:55

В каталоге PyPI (Python Package Index) выявлено 26 вредоносных пакетов, содержащих в скрипте setup.py обфусцированный код, определяющий наличие идентификаторов криптокошельков в буфере обмена и меняющий их на кошелёк злоумышленника (предполагается, что при совершении оплаты жертва не заметит, что перенесённый через буфер обмена номер кошелька отличается).

Подмену выполняет сценарий JavaScript, который после установки вредоносного пакета встраивается в браузер в форме браузерного дополнения, которое выполняется в контексте каждой просматриваемой web-страницы. Процесс установки дополнения привязан к платформе Windows и реализован для браузеров Chrome, Edge и Brave. Поддерживается подмена кошельков для криптовалют ETH, BTC, BNB, LTC и TRX.

Вредоносные пакеты маскируются в каталоге PyPI под некоторые популярные библиотеки при помощи тайпсквотинга (назначение похожих имён, отличающихся отдельными символами, например, exampl вместо example, djangoo вместо django, pyhton вместо python и т.п.). Так как создаваемые клоны полностью повторяют легитимные библиотеки, отличаясь только вредоносной вставкой, злоумышленники рассчитывают на невнимательных пользователей, совершивших опечатку и не заметивших отличий в названии при поиске. С учётом популярности исходных легитимных библиотек (число загрузок превышает 21 млн копий в день), под которые маскируются вредоносные клоны, вероятность поймать жертву достаточно велика, например, через час после публикации первого вредоносного пакета его успели загрузить более 100 раз.

Примечательно, что неделю назад та же группа исследователей выявила в PyPI 30 других вредоносных пакетов, некоторые из которых также маскировались под популярных библиотеки. За время атаки, которая продолжалась около двух недель, вредоносные пакеты были загружены 5700 раз. Вместо скрипта для замены криптокошельков в указанных пакетах использовался типовой компонент W4SP-Stealer, обеспечивающий поиск на локальной системе сохранённых паролей, ключей доступа, криптокошельков, токенов, сессионных Cookie и другой конфиденциальной информации, и отправку найденных файлов через Discord.

Вызов W4SP-Stealer осуществлялся через подстановку выражения "__import__" в файлы setup.py или __init__.py, которое было отделено большим числом пробелов, чтобы вывести вызов __import__ за пределы видимой области в текстовом редакторе. В блоке "__import__" выполнялось декодирование блока в формате Base64 и его запись во временный файл. Блок содержал скрипт для загрузки и установки в системе W4SP Stealer. Вместо выражения "__import__" подключение вредоносного блока в некоторых пакетах осуществлялось через установку дополнительного пакета при помощи вызова "pip install" из скрипта setup.py.

Выявленные вредоносные пакеты, подменяющие номера криптокошельков:

  • baeutifulsoup4
  • beautifulsup4
  • cloorama
  • cryptograpyh
  • crpytography
  • djangoo
  • hello-world-exampl
  • hello-world-example
  • ipyhton
  • mail-validator
  • mysql-connector-pyhton
  • notebok
  • pyautogiu
  • pygaem
  • pytorhc
  • python-dateuti
  • python-flask
  • python3-flask
  • pyyalm
  • rqeuests
  • slenium
  • sqlachemy
  • sqlalcemy
  • tkniter
  • urlllib

Выявленные вредоносные пакеты, отправляющие конфиденциальные данные из системы:

  • typesutil
  • typestring
  • sutiltype
  • duonet
  • fatnoob
  • strinfer
  • pydprotect
  • incrivelsim
  • twyne
  • pyptext
  • installpy
  • faq
  • colorwin
  • requests-httpx
  • colorsama
  • shaasigma
  • stringe
  • felpesviadinho
  • cypress
  • pystyte
  • pyslyte
  • pystyle
  • pyurllib
  • algorithmic
  • oiu
  • iao
  • curlapi
  • type-color
  • pyhints


  1. Главная ссылка к новости (https://blog.phylum.io/pypi-ma...)
  2. OpenNews: Внедрение двухфакторной аутентификации в PyPI привело к инциденту с удалением популярного пакета
  3. OpenNews: В Chrome внесено изменение, допускающее запись в буфер обмена без действий пользователя
  4. OpenNews: Опубликован анализатор, выявивший 200 вредоносных пакетов в NPM и PyPI
  5. OpenNews: В каталоге PyPI выявлены вредоносные библиотеки, использующие CDN PyPI для скрытия канала связи
  6. OpenNews: 46% Python-пакетов в репозитории PyPI содержат потенциально небезопасный код
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/58067-pypi
Ключевые слова: pypi, mallware
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (75) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, dullish (ok), 14:11, 08/11/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    >кражу криптовалюты

    Ох уж эта легаси...

     
     
  • 2.19, Аноним (19), 16:52, 08/11/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > код, определяющий наличие идентификаторов криптокошельков в буфере обмена и меняющий их на кошелёк злоумышленника

    разве это кража...

     

  • 1.2, InuYasha (??), 14:12, 08/11/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    Превратили реп PYPL в филиал PaYPaL.
     
  • 1.3, Аноним (3), 14:13, 08/11/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    NPM-карго-культ даже до питона добрался. Что же теперь делать местным экспертам? Куда бежать?
     
     
  • 2.5, onanim (?), 14:19, 08/11/2022 [^] [^^] [^^^] [ответить]  
  • +10 +/
    в очевидные rust crates
     
  • 2.6, Аноним (-), 14:21, 08/11/2022 [^] [^^] [^^^] [ответить]  
  • +4 +/
    На лисп.
    А пакеты ставить по-нормальному - через ./configure, make и make install, если и делать качалку пакетов - то над VCS.
     
     
  • 3.8, Аноним (8), 15:04, 08/11/2022 [^] [^^] [^^^] [ответить]  
  • +2 +/
    И как потом выковыривать артефакты всей этой твоей make install из системы при удалении? Почему нельзя придумать метод установки, которые не за..хламляет всю систему вдоль и поперек? Почему нельзя было это придумать сразу, а не выдумывать все эти чекинстал, пакеты, контейнеры и другую дичь?
     
     
  • 4.11, Аноним (11), 15:24, 08/11/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > И как потом выковыривать [...] при удалении?

    1. make uninstall
    2. make DESTDIR=... install и опакечивание

    > Почему нельзя придумать метод установки, [...] не выдумывать все эти [...] пакеты

    Ради интереса: чем не устраивают пакеты и как организовать установку софта лучше, чем через пакеты?

     
     
  • 5.24, Аноним (19), 16:55, 08/11/2022 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > make DESTDIR=... install и опакечивание

    называется checkinstall

     
  • 4.26, Аноним (19), 16:57, 08/11/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > метод установки ... , а не выдумывать все эти чекинстал, пакеты, контейнеры и другую дичь

    предложи свою дичь - оценим, дадим советы...

     
  • 4.33, Аноним (33), 17:14, 08/11/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Почему же нельзя? В NixOS такое давно есть и всё отлично работает, в том числе в проде. Но кто ж осилил?
     
  • 4.73, Аноним (73), 06:48, 09/11/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Уже ведь придумали. Flatpak и Snap и docker
     
  • 3.38, kusb (?), 17:29, 08/11/2022 [^] [^^] [^^^] [ответить]  
  • +3 +/
    ./configure --disable-wallet-collector
     
  • 3.43, Аноним (73), 17:47, 08/11/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Как там пакетная система будет работать после make install? Как быстро сломается? Что думают по этому поводу местные эксперты-линукс-администраторы?
     
     
  • 4.47, Аноним (47), 18:20, 08/11/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Прекрасно кстати, если бинари внезапно пересекутся конечно предупредит, но вообще этого ни разу не случилось и вся установка идёт в /usr/local. Только так и живу на самом деле. Вот тебе оценка опеннет-эксперта. Правда, удалять и обновлять немного неудобно -- без старых исходников только через rm -rf и постоянно новые файлы с каждым обновлением появляются, а старые куда-то перемещают, что создаёт определённые неудобства. Однако, линукс позволяет это делать совершенно без проблем.
     
     
  • 5.72, Аноним (73), 06:44, 09/11/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Очень хорошо, особенно хорошо будет /etc, /lib/, /usr/share и прочим куда make install запишет свои файлы поверх управляемых менеджером пакетов.
     
     
  • 6.76, Аноним (76), 11:56, 09/11/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    make install туда не пишет, он пишет в perfix.
     
  • 4.65, Аноним (19), 22:01, 08/11/2022 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > make install

    man checkinstall

     
     
  • 5.66, Аноним (73), 22:07, 08/11/2022 [^] [^^] [^^^] [ответить]  
  • –3 +/
    Оно сначала меняет системные файлы, а потом пытается сделать из этого пакет.
     
     
  • 6.69, Аноним (19), 22:37, 08/11/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Не пиши чушь

    --install Toggle installation of the created package

     
     
  • 7.71, Аноним (73), 06:38, 09/11/2022 [^] [^^] [^^^] [ответить]  
  • –3 +/
    И чем же ты опроверг мой слова, очередной анонимный эксперт?
    Ключём который заставит установить пакет поверх уже установленных make install файлов?
     
  • 6.77, Аноним (76), 12:07, 09/11/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Он отслеживает все изменения.
     

  • 1.4, Аноним (4), 14:15, 08/11/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +4 +/
    поэтому этот пип нужно запускать исключительно из песочницы. Как и нпм. Как и IDE, потому что IDE обычно запускает все подряд, если нажать на "Доверяю этому проекту". А если не нажать, IDE превращается в нотепад.экзе.
     
     
  • 2.9, Аноним (8), 15:05, 08/11/2022 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Всё нормальные люди уже 33 миллиона лет запускают всё через докер, в том числе в интерактивном режиме. Изоляция может и не полная, но приемлемая.  
     
     
  • 3.12, Аноним (11), 15:28, 08/11/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Всё нормальные люди уже 33 миллиона лет запускают всё через докер [...] Изоляция [...] приемлемая

    Приемлемая изоляция - это, видимо, на выбор либо запуск из-под рута, либо через переусложнённый механизм, в котором с завидным постоянством находят всё новые уязвимости.

    Или докер ещё как-то умеет?

     
     
  • 4.49, Аноним (49), 18:33, 08/11/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Earthly
     
  • 4.78, Аноним (76), 12:09, 09/11/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Нет, приемлемая изоляция — это защищающая от проблем описанных в этой новости.
     
  • 3.15, Zero (??), 16:29, 08/11/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >Всё нормальные люди уже 33 миллиона лет запускают всё через докер

    Это через тот докер, который еще и фаервол самостоятельно настраивать пытается? Нафиг такие изоляции.

     
     
  • 4.34, Аноним (33), 17:16, 08/11/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Жаль, конечно, что ты буквы не проходил ещё в школе, а то мог бы прочитать в документации, какой опцией отключить докеру фаерволл.
     
     
  • 5.40, Zero (??), 17:33, 08/11/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >Жаль, конечно, что ты буквы не проходил ещё в школе, а то мог бы прочитать в документации, какой опцией отключить докеру фаерволл.

    Я и не должен читать эту документацию. Докер вообще доступа к файерволу иметь не должен. Ни под каким предлогом. Это файервол - одна из ключевых систем защиты системы. Если все программы подряд начнут его изменять, то зачем он тогда вообще нужен?

     
  • 4.79, Аноним (76), 12:10, 09/11/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Никто тебе не запрещает запускать docker в отдельной виртуалке.
     

  • 1.7, Шарп (ok), 14:35, 08/11/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    >и реализован для браузеров Chrome, Edge и Brave.

    Пользователей фурифокса записали в нищуки.

     
     
  • 2.13, Аноним (11), 15:29, 08/11/2022 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > Пользователей фурифокса записали в нищуки.

    Да ладно вам. По сути это означает "для запуска, пожалуйста, установите хром последней версии".

     
  • 2.14, Аноним (14), 16:05, 08/11/2022 [^] [^^] [^^^] [ответить]  
  • +/
    В списке форбс есть юзеры фулофокса?
     
     
  • 3.56, Аноним (56), 20:37, 08/11/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Не удивлюсь, если есть. По рекомендациям их же безопасников
     
  • 2.57, Аноним (57), 20:38, 08/11/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    В Firefox просто так дополнение не подставишь после того как они сделали проверку дополнений по цифровой подписи. К слову, из-за того и сделали проверку, что все кому не лень подсовывали свои дополнения. Речь не только про вредоносы, но и про разные антивирусы и прочую шелуху, которая после своей инсталляции ещё и дополнение подсовывала в браузер, после которого он люто крэшиться начинал и пользователи пинали Mozilla, что это браузер глючит, а не кривое дополнение.
     
  • 2.84, Аноним (84), 12:56, 10/11/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Браузер Епифанцева так вообще с одним пользователем где-то в подвале сидит
     

  • 1.10, Аноним из консоли (?), 15:23, 08/11/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    > Выявленные вредоносные пакеты, отправляющие конфиденциальные данные из системы:
    > ...
    > * fatnoob

    А они хороши

     
  • 1.17, Аноним (-), 16:41, 08/11/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Какой антивиру установить, название? О клам я знаю.
     
     
  • 2.20, Аноним (-), 16:53, 08/11/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Не пора ли задуматся о встроеном в Linux аналога Microsoft Defender Antivirus -> Linux Defender Antivirus?

    Microsoft помоги - юмор или не юмор каждый решает сам.

     
     
  • 3.45, Аноним (45), 18:07, 08/11/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Есть уже, selinux называется.
     
     
  • 4.46, Аноним (-), 18:17, 08/11/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Это не то очём я. Как я понял поверхностно глянул что об этом написано как я понял это как = настрой жостке или нужные себе политики безопасности в Windows. Не когда этим не занимался.
     
  • 4.50, Аноним (50), 18:37, 08/11/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Возможно в силинукс больше возможностей чем можно настроить в политиках безопасности в Виндовс для Виндовс не знаю. Надо разбиратся, сравнивать. Но, я не об этом, а а о том, что написал выше.
     
  • 3.83, Варенье (?), 14:01, 09/11/2022 [^] [^^] [^^^] [ответить]  
  • +/
    systemd-antivirusd
     
  • 2.22, Аноним (-), 16:55, 08/11/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Дорога у дома.
     
  • 2.58, Аноним (56), 20:44, 08/11/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Popoff
     

  • 1.23, Аноним (23), 16:55, 08/11/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Пользуйтесь браузерами не поддердивающими дополнений.
     
     
  • 2.27, Аноним (-), 16:59, 08/11/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Это те которые в консольке оображаются с урезаным до неудобства функционалом. Других без дополнений не знаю. Дополнения это только один вид распространения.
     
     
  • 3.28, Аноним (-), 17:05, 08/11/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Я не конкретно к этому случаю о дополнениях. Я вообще о возможностях как завозить в операционные ситемы. Самому в код каждого файла смотреть это не вариант для большенства. Да и меншенству кто понимает что в коде написано тоже не особо вариант в виду обьёма файлов и кода. Мне смотреть в код файлов бесполездно я что там написано непонимаю.
     
     
  • 4.29, Аноним (-), 17:09, 08/11/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Одному человеку смотреть в код всехъ файлов что есть в операционной системе не вариант. А 1000, 10 тыс., миллиону человек и т.д уже вариант получше.
     
     
  • 5.31, Аноним (-), 17:11, 08/11/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Я знаю как обстоят дела в Windows, десетелетиями использую Win.
     
  • 2.30, Аноним (30), 17:10, 08/11/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Тебе curl'a не ватает шоли?
     
     
  • 3.32, Аноним (-), 17:12, 08/11/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Я даже не знаю что это.
     
  • 3.35, Аноним (-), 17:18, 08/11/2022 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Я ту на сайте не как програмист, а как самый простой рядовой ползователь Win и Linux только по тем  темам: какие есть опер системы и программы в Linux, что и как обновилось.
     
     
  • 4.36, Аноним (-), 17:21, 08/11/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Естествено за два десятилетия использования Win и 7 лет Linux я что-то умею чуть выше среднего, но не больше.
     
  • 3.37, Аноним (-), 17:26, 08/11/2022 [^] [^^] [^^^] [ответить]  
  • +/
    И усложнять себе жизнь знанеием, что такое курл, перл и т.д не буду это не мой путь в жизни.
     
  • 3.39, Аноним (-), 17:31, 08/11/2022 [^] [^^] [^^^] [ответить]  
  • +/
    "Пользуйтесь браузерами не поддердивающими дополнений" Это не он тебе ответил это я тебе ответил.
     

  • 1.41, истина в последней инстанции (?), 17:36, 08/11/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Собственно такова судьба всех этих кустарных репозиториев, карги, пипы, нпм и прочая ерунда пришедшая из гнилого вендошного мира
     
     
  • 2.80, Аноним (76), 12:12, 09/11/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Умничка! Только корпорации благодаря цензуре и запретам смогут защитить нас от вирусов!
     

  • 1.42, Аноним (45), 17:40, 08/11/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    >pip
    >Подмену выполняет сценарий JavaScript

    Yo dawg, we heard you like smoothie, to we inserted JS into your pip and your Python into your smoothie, so you can enjoy when you enjoying.

     
  • 1.51, Аноним (51), 18:58, 08/11/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > и реализован для браузеров Chrome, Edge и Brave.

    Не, ну вы только посмотрите! Mozilla ещё венчурный фонд свой не завела в полную силу, а подмётки уже на ходу рвут.

     
  • 1.59, Аноним (59), 20:55, 08/11/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    Статья есть, а что теперь с этим делать - не сказано. Решение-то какое.
    Не скачивать PyPI ?  Скачивать, но не устанавливать? Скачивать и устанавливать, но сначала проверить антивирусом.
    А то статья похожа на ситуацию: "В городе А построили завод Б. А я в окно смотрю."
     
     
  • 2.68, Онаним. (?), 22:24, 08/11/2022 [^] [^^] [^^^] [ответить]  
  • +/
    В смысле, что с этим делать.
    Что с этим делать - уже давным-давно понятно.
    Ну, всем, кто хочет понимать.
     
  • 2.81, Аноним (76), 12:15, 09/11/2022 [^] [^^] [^^^] [ответить]  
  • +/
    > тайпсквотинг

    Решение такое же как и всегда — не использовать не тот код.

     

  • 1.60, Anonymus (?), 21:09, 08/11/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >которое было отделено большим числом пробелов, чтобы вывести вызов
    >__import__ за пределы видимой области в текстовом редакторе.

    А горизонтальная полоса прокрутки не смущает тех, у кого в редакторе не включён автоперенос длинных строк?

     
     
  • 2.62, Онаним. (?), 21:32, 08/11/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Их не смущает даже значимость количества пробелов, а вы им про какие-то полосы прокрутки.
     

  • 1.61, Онаним. (?), 21:31, 08/11/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    Ну и фиг с ним, любители тянуть в рот сразу свеженькое могут наслаждаться.
     
     
  • 2.64, Аноним (19), 21:58, 08/11/2022 [^] [^^] [^^^] [ответить]  
  • +/
    а вот попробуй проверить все зависимости к растокрейтах, которые вытягиваются при компиляции...
     
     
  • 3.67, Онаним. (?), 22:23, 08/11/2022 [^] [^^] [^^^] [ответить]  
  • +1 +/
    В тот же тазик.
     
  • 2.74, Аноним (73), 07:13, 09/11/2022 [^] [^^] [^^^] [ответить]  
  • +/
    Ты же не разработчик на python тебя это не касается
     

  • 1.63, darkshvein (ok), 21:51, 08/11/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    что делает JavaScript в питон-пакетах?
    даёт прикурить питона всем горе-кодерам?
     
  • 1.75, Аноним (75), 07:13, 09/11/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Почему про cpan такого не слышно? Или норот научился делать нехорошее после того как Perl стал терять популярность?
     
  • 1.82, Аноним (-), 13:34, 09/11/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Я думал пито"няши", а они нацелились на мою крипту... Фу такими быть.
     
     
  • 2.85, Аноним (19), 03:21, 11/11/2022 [^] [^^] [^^^] [ответить]  
  • +/
    ты сам всё отдашь
     

  • 1.86, Аноним (86), 04:16, 11/11/2022 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > перенесённый через буфер обмена
    > номер кошелька отличается).

    Все правильно сделали, настоящие пито няши данные не проверяют. Что в коде что по жизни.

     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру