Есть один очень приличный темно синий Банк От души любил и пользовался всеми привилегиями! Вот с них и началось наша душераздирающая история Дети летали в Турцию оформили кредитную карту от желтого банка и там у них два раза в месяц можно в VIP зал сходить покушать перед отлетом Мне когда оформляли карту , девушка посетовала нежным голосом оформить пакет "Привилегия", что то про аэропорт рассказывала. Через пару дней вылетать, решил уточнить - звоню, спрашиваю - я могу со свой картой в VIP зону в аэропорту на том конце смешок и спрашивает - а у вас есть на счетах 6 лямов или оборот в месяц по карте 1,5 ляма? - нет - ну, на нет и суда нет. Вам в "Крошку картошку" или в "Му-Му" Это был первый орешек!
Уже знаю , что в Египте косо смотрят на старый баксы и принимают только новые с синей полоской. Захожу в банк рядом с домой и спрашиваю - можно доллары нового образца купить ? На меня посмотрели , как на пришельца - молодой человек, иностранная валюта только под заказ - Спасибо. Выхожу в чате банка пишу "Нужны доллары США нового образца" - сколько ? - 1000$ - не вопрос нужно подождать 2-3 дня - хорошо - выберите отделение - выбор был ... но ближайшее в 5 км. от дома Прошли три дня, смс от банка "заказ готов" Я туда, еле нашел это отделение.... а там НАРОДУ , я сначала подумал, что деньги бесплатно всем раздают, а нет просто рабочие будни. Дождался своей очереди. Захожу Приятная девушка из стола (не сейфа) выкладывает на стол ЧТО=ТО (я в 90 е таких баксов не видел) отдаленно похожее на вырезки из старых советских газет и очень мятые - это что такое ? - доллары США - ???? мне нужны были новые!!! - вот вы привередливый, берите , что дают Я развернулся и ушел. Это был второй орешек!
Пока ехал домой на такси , таксист подсказал , что в ОГРОМНОМ ТЦ есть БАНК и там валюту продают. Я туда - добрый день. Доллары нового образца есть . Да, но только за НАЛИЧНЫЙ расчет Хорошо, пошел искать банкомат. Нашел. Вставил карту, нужно было снять 58000 руб. - не успело прошуршать в банкомате - звонок из банка - Это Вы ? Я ! А можете назвать две крайние транзакции по карте - конечно. Называю. Спасибо , да это Вы, но наша программа безопасности заблокировала Вашу карты на 48 часов. До свидания. К чести сказать парень посоветовал , что даже если карты заблокирована на снятие наличных вы можете перевести на другую карту другого банка и снять. Бинго! Это был третий орешек!
За крайние три недели раз пять слетал ключ в банковском приложении введите телефон, введите пароль, а уже нет - нужно или банкомат или карта, карты приложил зашел. и тут в субботу с друзьями и детьми в центре Москвы (середина дня СУББОТА) мне как отцу семейства нужно за всех заплатить , открываю приложение (сумма 15000) хотел сделать перевод. и ваша карта заблокирована, чтобы разблокировать вам нужно прийти в ОТДЕЛЕНИЕ БАНКА . ПОЛНАЯ БЛОКИРОВКА и карты и приложения! Я без денег - ни уехать не приехать в двумя детьми. И суббота (Не все отделения работают) Это был четвертый орешек!
Поехал в воскресенье, минут 30 девушка потратила на разблокировку. Но даже не извинилась, а наоборот похвалила безопасность банка
с 1 августа мы с ним расстаёмся навсегда. Аллергия на орехи
Дома один, прострелило спину. Очень сильно, лежать больно, ходить больно. Очень. На анальгетики аллергия. Полулежу на кресле, единственная предельно комфортная, поза.
Смотрел кино - закемарил, вспоминаю, что мама приходила, проведать, недалеко живёт, и дверь, скорее всего, не заперла, так захлопнула, надо проверить. Заодно и в туалет.
Подхожу к двери, начинаю проворачивать ключ и вдруг ручка двери поворачивается и начинает дёргаться, но язычок замка уже ушёл в паз и дверь заперлась. Смотрю в глазок, и вижу, сука, глаз. Какой то мужик пытается через глазок рассмотреть что в квартире. Я сперва охренел предельно, спрашиваю - Чо надо...
Незваный гость цыкнул сквозь зубы на дверь, пнул по двери же и свалил. Позвонил ментам, сижу жду. По идее есть видео наблюдение, но не уверен что работает. Дом под кодовым замком.
Дайте хоть какую-то надежду на светлое будущее, на это прекрасное далёко.
Мне, в последнее время, страшно стало жить. Я боюсь. Я не уверена в завтрашнем дне. Я оптимист по жизни в принципе, но мой оптимизм начинает угасать.
К психологу не провожать, так как нет денег на него. Зп на работе не платят второй месяц. Я в акуееее от всего, если честно. Пока это все писала, даже заплакала. От чего, х знает от чего...
Надежда на огород и свое хозяйство. И главое, не болеть.
Есть компьютер с чистой копией Windows, без доступа в интернет и без каких‑либо установленных средств разработки. Только одна чистая пользовательская «венда». Не поверите, но даже в таких спартанских условиях возможно написать и запустить полноценную программу. И сейчас я расскажу как.
Ради этого скриншота я честно развернул пользовательскую версию Windows 11 в виртуальной машине. Чего не сделаешь ради искусства!
Ужасы познания
На самом деле в ОС семейства Windows с самого их начала было внутри столько всякого интересного, что никакой статьи не хватит описать, но почему-то мало кто об этом знает даже из разработчиков, особенно современных.
Спросите ради интереса знакомого программиста, возможно ли программировать на «чистой» пользовательской Windows без установки Visual Studio — удивитесь ответам.
Ну и разумеется насаждаемый «пользовательский» подход самой Microsoft, которая ковыряние во внутренностях своих продуктов мягко говоря никогда не одобряла, создал ореол простоты и надежности, без необходимости разбираться как оно внутри устроено.
Поэтому описанное ниже наверное вызовет определенный ужас как у обычных пользователей так и некоторых программистов — особенно если они обучались по видеокурсам ничего не знают об истории ОС Windows.
Over the past few months, I've received several variations on this question for other operating systems and all of the released versions of the .NET Framework. When the .NET Framework is installed as a part of the OS, it does not appear in the Programs and Features (or Add/Remove Programs) control panel. The following is a complete list of which version of the .NET Framework is included in which version of the OS
И ниже длинный такой список с версиями. А вот еще один если вдруг первого оказалось недостаточно.
Ну казалось бы и.. что? Чего тут такого?
Про .NET SDK все и так знают, временами его необходимо установить «для запуска игор», временами он сам ставится в виде зависимой библиотеки и никому не мешает.
Все так, да.
Только что-то мне подсказывает внутрь вы не заглядывали, правда? Поэтому на что эта штука на самом деле способна не представляете.
А я представляю и сейчас расскажу.
Заходите в папку Windows на вашем компьютере, вот сюда:
Этот снимок из Windows 10, в нем используется системная .NET SDK 3.5, в Windows 11 будет уже 4.0
Файлт csc.exe — самый настоящий компилятор, фактически портал в ад на вашем обычном домашнем компьютере.
Почему все так страшно?
Потому что через какое-то время вы обнаружите себя сильно заросшим, с бородой и красными глазами, проводящим ночи за компьютером и медленно мутирующим в программиста.
Шучу.
А если серьезно:
появляется возможность создания нативных программ сразу на вашем компьютере, минуя стадию проверки электронной подписи, проверки антивирусом, проверки электронного письма и так далее.
В отличие от VB или PowerShell-скриптов, которые анализируются перед запуском любым приличным антивирусом, антивирусы не анализируют исходный код программ на C# и куда лояльнее относятся к программам собранным локально на этой же машине.
Так что веселье начинается.
Простой пример
Для начала будет простой пример, который просто показывает стандартный диалог с сообщением. Именно его в запущенном виде вы можете видеть на заглавной картинке в статье.
Весь процесс от кода до запуска я записал на видео:
Исходный код тут казалось бы максимально простой, но с одним интересным нюансом про который ниже:
using System; using System.Runtime.InteropServices;
namespace yoba { class Program { // импортирование нативной WinAPI функции MessageBox. [DllImport("user32.dll")] publicstaticexternint MessageBox(IntPtr hWnd, string lpText, string lpCaption, uint uType);
staticvoid Main(string[] args) { //вызываем и показываем диалог MessageBox(IntPtr.Zero, "Йоу!", "Добро пожаловать в разработку!", 0); } } }
Сохраняете этот текст обычным «блокнотом» в файл yoba.cs и запускаете сборку:
После сборки рядом с исходным файлом yoba.cs появится бинарник yoba.exe, который вы сможете запустить.
А теперь про нюанс.
Нюанс
Существует определенное предубеждение по отношению к managed‑языкам вроде Java и С# — они не подходят для серьезных дел вроде написания эксплоитов, использования 0day‑уязвимостей и пенетрации ядра.
Что все подобные вещи творят в глубокой тайне на чистом Си, в крайнем случае на C++ а все эти ваши Java/C# не более чем «погремушки для детей», не достойные даже косого взгляда серьезного профессионала.
Вот тут и начинается нюанс, посмотрите на эту радость:
Это мои дорогие читатели, ни что иное как вызов нативного WinAPI, с помощью которого творили всякое нехорошее в далекие 90е.
C# и .NET имеет оооочень глубокую интеграцию с Windows, несмотря на всю свою «безопасность» и управляемость, поэтому легко и просто может заменить собой и Си и С++ в качестве инструмента для нехороших дел.
И оно живет на вашем компьютере, дома и в офисе, с постоянной пропиской и регистрацией.
Но разумеется столь простого примера несколько мало для осознания глубины проблемы, поэтому я подготовил кое-что более серьезное.
Сложный пример: выключаем Windows
Итак, это будет относительно небольшое приложение на C#, выключающее компьютер без предупреждения и подтверждения пользователя. И само собой без прав администратора.
Просто так, внезапно.
Последствия думаю каждый из читателей сможет оценить для себя сам.
Весь процесс на видео (разумеется это виртуальная машина):
А теперь код:
using System; using System.Collections.Generic; using System.Linq; using System.Text; usingSystem.Security; using System.Diagnostics; usingSystem.Management; usingSystem.Security.Permissions; using System.Runtime.InteropServices;
namespace yoba { // See http://www.developmentnow.com/g/33_2004_12_0_0_33290/Access-... // Calling this code on backup/restore seems to enable BCD publicclass TokenHelper { // PInvoke stuff required to set/enable security privileges [DllImport("advapi32", SetLastError=true), SuppressUnmanagedCodeSecurityAttribute] staticexternint OpenProcessToken( System.IntPtr ProcessHandle, // handle to process int DesiredAccess, // desired access to process ref IntPtr TokenHandle // handle to open access token );
Обращаю внимание что это не эксплоит, не дыра, не баг и не уявимость а вполне себе стандартный функционал. Просто так получилось что о нем мало кто знает.
После запуска компьютер практически немедленно выключится:
проверено и в виртуальной машине и на железе, на 10й и 11й Windows.
Рассказываю как это работает.
Ключевая функция — ExitWindowsEx, которая и отвечает за завершение работы ОС. Эта функция очень старая и известная, существует еще со времен Windows 95.
Но для ее вызова нужны «привилегии», которые и выставляет программно класс TokenHelper.
[DllImport("advapi32", SetLastError=true), SuppressUnmanagedCodeSecurityAttribute] staticexternint OpenProcessToken( System.IntPtr ProcessHandle, // handle to process int DesiredAccess, // desired access to process ref IntPtr TokenHandle // handle to open access token );
Функция отвечает за получение данных о наборе «привилегий», связанных с конкретным процессом. Собственно набор таких привилегий и называется «токеном».
Вот как эта функция вызывается:
if (OpenProcessToken(proc.Handle, TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY, ref hToken) != 0) { ..
Тут надо отметить передачу по ссылке в стиле Си (ref hToken), когда в функцию передается ссылка на объект C#, дальше функция этот объект заполняет данными. А возвращает она просто true или false — статус выполнения, отработала функция или нет.
Дальше импортируется простая и банальная функция освобождения ресурсов:
Как видите вызов достаточно сложный, используется Сишный процедурный подход к заполнению полей структуры и передачи его по ссылке в вызываемую функцию.
После вызова проверяется наличие ошибки, также в стиле Си:
Переменная bEnablePrivilege булевая, это и есть то самое true передаваемое в качестве второго аргумента, а блок:
if (bEnablePrivilege) tkp.Privileges[2] = SE_PRIVILEGE_ENABLED; else tkp.Privileges[2] = 0;
Отвечает за формирование правильного вызова с использованием системных констант (SE_PRIVILEGE_ENABLED).
При вызове также передается ссылка (ref tLUID) на объект LUID, который будет содержать после вызова указание на найденную привилегию.
Вот такие интересные дела.
Итого
Все описанное не призыв к немедленным действиям, а лишь повод к размышлению о смысле бытия. Ну там насчет надежности, безопасности и всего такого — что вам продает большая иностранная корпорация.
Задумайтесь, если увидите любимую "венду" на атомной станции или военном объекте — без всяких ЦРУ и хакеров в ОС Windows адова гора функционала, который легко и просто можно использовать во вред.
Еще одна поучительная история из жизни с Linux, специально чтобы вы потеряли сон и покой, узнав что такое вообще возможно.
Тот самый баг, смотрит на вас с экрана.
Вводная
Эмм с чего бы такого начать, чтобы не испугать раньше времени и не заставить устанавливать *BSD.
Есть на свете одна компания, которой мы помогаем с ИТ и есть у нее несколько виртуальных серверов на Ubuntu Linux, используемых для половых утех разработки и тестирования.
Ubuntu там использовалась нормальной (для сервера) LTS‑версии, но в какой‑то момент — в погоне за патчами безопасности ее обновили до текущей.
Не совсем «текущей-текущей», которую используют разработчики Ubuntu для обкатки новых версий дистрибутива, а просто без долгой поддержки — примерно то, что ставят себе обычные пользователи Ubuntu Linux на домашние компьютеры.
Все происходило летом 2025 года, поэтому речь про версию 25.04 Ubuntu Linux, которая использует ядро 6.14 (запомните этот важный момент):
Баг
Однажды сисадмин компании-заказчика заметил слишком частую и сильную нагрузку на CPU, создаваемую процессом snapd, который является частью пакетного менеджера Snap.
Скриншот был взят из сети, поэтому «шакальего» качества;)
Эта проблема с перегрузкой CPU для snapd мягко говоря не нова — «проклятый snapd» гадил линуксоидам с момента своего появления на свет и вообще видимо был не придуман а ниспослан свыше, в качестве кары за грехи.
Нет, это не осеннее обострение, дело происходило летом.
Разумеется первым делом были опробованы стандартные методы решения, вроде снижения частоты проверок обновлений или полного отключения проклятого сервиса:
Отдельно порадовал ответ ИИ:
Дословно «снести и использовать что-то другое» — первый разумный совет от машины за всю историю развития искусственного интеллекта.
Дальнейшие изыскания привели в багтрекер snapd к упомянутому багу, где уже третий комментарий от разработчика snapd, с приложенной трассировкой вызовов показал что проблема именно в ядре:
Тут стоит добавить, что почти сразу встал вопрос проверки бага на локальной машине, поскольку на момент изучения ситуации локально все успело неоднократно обновиться, а отлаживать ядро Linux на сервере заказчика все же не очень хорошая затея.
Чуть ниже по переписке видно, что баг особо ярко проявляется на ноутбуке, работающем от батареи:
Так что решено было пробовать отловить именно в таких условиях.
На счастье, на машине осталась сборка 6.14 версии ядра с патчами от Xanmod, которая использовалась для статьи про l9ec.
В последние годы в проекте ядра Linux выпускается сильно много промежуточных релизов, поэтому на какой именно версии внутри 6.14 ветки что-то пошло не так еще пришлось выяснять:
Обратите внимание на загрузку CPU и блокировку выхода из приложения
Как видите, в очередной раз проблема прикладного сервиса уперлась в ядро операционной системы.
Патч целиком находится тут, место исправления выглядит как-то так:
Да, как видите ситуацию радикально исправляет буквально пара символов логической конструкции, главное знать где исправлять.
Текущее состояние
Формально проблема была решена еще летом этого года, патч попал в mainline и пакет с обновлением ядра от команды Ubuntu:
На осень 2025 года даже стабильная версия ядра Linux уже имеет версию 6.16 — т. е. паровоз разработки уехал очень далеко вперед от описываемых проблем:
Так что на момент написания данной статьи вы (по идее) не должны столкнуться с данной проблемой, а если и столкнетесь — все легко решается банальным обновлением версии ядра из пакетов дистрибутива.
При подозрении на описанный баг — попробуйте собрать тестовое приложение (см. выше) и запустить в своем окружении.
Если начнется 100% загрузка CPU запущенным процессом — проблема точно есть, поскольку в ядрах с патчем поведение тестового приложения отличается:
В исправленном ядре тестовое приложение немедленно завершится.
Что касается заказчика, поскольку решение а затем и патч были опубликованы довольно оперативно — раньше чем нам сообщили о проблеме, на время разборок с согласованиями и попаданием в mainline ядра, мы банальным образом перенесли патч вручную в ту версию ядра, которая использовалась на сервере.
Позже обновили уже штатными средствами дистрибутива до текущей актуальной версии.
Эпилог
Если вы не являетесь разработчиком ядра и не пишете патчи каждый день, засыпая в обнимку с отладчиком — т. е. далеки от реалий системного программирования, то из этой статьи сможете вынести несколько интересных выводов и внезапных открытий:
1. Linux — могила, *BSD - сила
Шучу, разумеется неподготовленным пользователям в BSD-системы лучше не лезть совсем, но задуматься (или хотя-бы просто знать) о реалиях функционирования Linux все же стоит. Чтобы факт выноса мозга ядру из прикладного ПО не стал для вас неприятным сюрпризом.
2. Граница между прикладкой и системной разработкой весьма абстрактна
Проще говоря — ее нетсовсем и в любой произвольный момент времени у вас есть неиллюзорный шанс наткнуться на баг ядра, даже программируя на JavaScript в браузере.
3. Любой уважающий себя сисадмин и DevOps должны знать С
Пусть на самом примитивном уровне, но хотя-бы собрать и запустить тестовое приложение, демонстрирующее проблему надо уметь. К сожалению все глубокие изыскания по теме «где оно тормозит» или «почему оно упало» рано или поздно приводят к коду на С и отладчику ядра.
И поверьте моему печальному опыту:
изучать эти штуки лучше днем и в спокойной обстановке, а не в режиме аврала и поздно ночью на работе в выходной день.
4. Считайте деньги, хотя-бы иногда
Описанная в статье проблема случилась в локализованном окружении (на собственных физических серверах компании), но точно такая же Ubuntu используется и облачными провайдерами вроде Amazon, где есть тарификация за использование ресурсов, в первую очередь CPU.
Как нетрудно догадаться, 100% загрузка процессора с интервалом в пять минут в облаке, если ее вовремя не заметить и не исправить — больно отразится на счете, который вам потом выставят.
Так что проверяйте загруженность, пиковых 100% в современных системах быть не должно, если только вы целенаправленно не занимаетесь вычислительными задачами.
Финляндия (5,6М) — 8 смертей за 5 лет. График приведен с учетом численности населения стран, поэтому например Финляндия со "всего" 8 смертями оказалась на третьем месте. По меркам России и США это может быть немного, но для небольшой Финляндии это тревожно большое число — представьте если бы в одном Санкт-Петербурге за 5 лет собаки загрызли насмерть 8 человек
Источник данных, если отдельно не указан, — база данных ВОЗ по смертности (код смерти от нападения собак в ICD-10 — W54). Для стран с населением более 50 миллионов взяты последние 3 года, за которые доступны данные, для стран поменьше — последние 5 лет.
Число смертей и нападений собак растет по всему миру:
в США число смертей выросло втрое — с 43 в 2010-х до рекордных 127 за один год
в Великобритании число нападений собак со времен ковида выросло почти вдвое
в Австралии число госпитализаций, связанных с нападениями собак, более чем удвоилось за восемь лет
в Бразилии за десяток лет число смертей выросло вдвое
Россия — одна из немногих стран, где тенденция обратная. За последние 3 года достоверно подтверждено 36 смертей от нападений собак. В 2000-х собаки загрызали столько же людей ежегодно — с 2000 по 2010 гг. включительно число умерших составило 391 человек.
За последние полгода в России зафиксировано две смерти от нападений собак.