Обновить
33
0.6
Даниил Солопов@dan_sw

Software Engineer, Bachelor of Computer Science

Отправить сообщение

Что ты такое, dhclient?

Время на прочтение19 мин
Охват и читатели63K

Сетевой стек Linux не прост даже на первый взгляд: приложение — в юзерспейсе, а всё, что после сокета, — в ядре операционки. И там тысяча реализаций TCP. Любое взаимодействие с сетью — системный вызов с переключением контекста в ядре.

Чтобы лишний раз не дёргать ядро прерываниями, придумали DMA — Direct Memory Access. И это дало жизнь классу софта с режимом работы kernel bypass: например при DPDK (Intel Data Plane Development Kit). Потом был BPF. А за ним — eBPF. 

Но даже помимо хаков работы с ядром есть такие штуки, как sk_buff, в которой хранятся метаданные всех миллионов протоколов. Есть NAPI (New API), которая призвана уменьшить число прерываний. Есть 100500 вариантов разных tables.

И копать можно безгранично далеко. Но сегодня мы всё же поговорим о вещах более приземлённых и повседневных, которые лишь приоткрывают вход в эту разветвлённую сеть кроличьих нор. Мы разберём одну любопытную задачку, на примере которой ужаснёмся тому, как сложно может быть реализован такой простой протокол, как DHCP.

Начать погружение

Как настроить библиотеку SFML в Visual Studio динамическая компоновка

Время на прочтение2 мин
Охват и читатели74K

Следующая тема

В этой статье объясняется, как настроить ваши проекты SFML с динамической компоновкой, если Вы используете интегрированную среду разработки программного обеспечения Visual Studio (компилятор Visual Studio С++).

Читать далее

Обратные вызовы и исключения С++

Время на прочтение7 мин
Охват и читатели8.4K

Введение


Как известно, многие С-библиотеки используют обратные вызовы для обеспечения какого-либо функционала. Так поступает, например, библиотека expat для реализации SAX модели. Обратный вызов или callback используется для возможности выполнить пользовательский код на стороне библиотеки. Пока такой код не несет побочных эффектов — все нормально, но как только на арене появляется С++, все, как всегда, становится нетривиальным.

Читать дальше →

Книга: «Создаем игры и изучаем C++»

Время на прочтение9 мин
Охват и читатели12K

Привет, Хаброжители! Мечтаете создавать игры, но не знаете, с чего начать? Книга «Создаем игры и изучаем C++» станет вашим проводником в мире игровой разработки!

Это издание было адаптировано под Visual Studio 2022, C++20 и библиотеку SFML, оно предлагает уникальный подход: вы не только освоите язык C++ с нуля, но и примените знания на практике, создав четыре игры в разных жанрах.

Вы начнете с изучения основ программирования, познакомитесь с ключевыми темами C++: объектно-ориентированное программирование (ООП), указатели и стандартная библиотека шаблонов (STL). Разберетесь с методами обнаружения коллизий и столкновений в игровой физике на примере игры Pong. Создавая игры, вы познакомитесь с массивами вершин, направленным звуком, шейдерами OpenGL, порождением объектов и многим другим. Вы погрузитесь в игровую механику и реализуете обработку ввода, повышение уровня персонажа и даже «вражеский» ИИ. Наконец, вы изучите паттерны проектирования игр, чтобы усовершенствовать навыки программирования на C++.

К концу книги вы сможете разрабатывать собственные игры, публиковать их и удивлять аудиторию.

Читать далее

Топ-5 алгоритмов из курса матана, которые реально пригодятся в работе

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели33K

Всем привет. Сегодня хочу затронуть тему матана, чтобы показать как его можно применять на реальных задачах. Думаю каждый, кто учил матан часто задавался вопросами: «Где это вообще пригодится?», «Зачем это нужно?», «Как это может помочь?» и т. д. Так вот, чтобы эти вопросы отпали раз и навсегда предлагаю свой топ-5 алгоритмов из курса матана с конкретными примерами их применения в работе.

Читать далее

Безопасная очистка приватных данных

Время на прочтение6 мин
Охват и читатели19K

Часто в программе необходимо хранить приватные данные. Например: пароли, ключи и их производные. Очень часто после использования этих данных, необходимо очистить оперативную память от их следов, чтобы злоумышленник не мог получить доступ к ним доступ. В этой заметке пойдет речь о том, почему для этих целей нельзя пользоваться функцией memset().
Читать дальше →

Как порядок свойств убивает JavaScript?

Уровень сложностиСредний
Время на прочтение3 мин
Охват и читатели15K

Привет, Хабаровчане! Во второй статье, хочу поделиться наблюдениями из документации V8 и немного нудной информацией для многих :-)

Читать далее

AI Labyrinth от Cloudflare: как генеративный ИИ стал оружием против ботов-скрейперов

Уровень сложностиПростой
Время на прочтение6 мин
Охват и читатели8.4K

С развитием генеративного ИИ боты-скрейперы стали умнее и настойчивее. Они обходят традиционные методы защиты и массово сканируют сайты, собирая данные для обучения своих моделей. Ежедневно в сети Cloudflare фиксируется более 50 миллиардов запросов от ИИ-краулеров — это почти 1% всего интернет-трафика.

Компания предложила новое решение проблемы — AI Labyrinth. Вместо прямого блокирования инструмент дезориентирует ботов, заставляя их тратить время и ресурсы на обработку бесполезного контента.

Читать далее

Учимся разрабатывать для GPU на примере операции GEMM

Уровень сложностиСредний
Время на прочтение18 мин
Охват и читатели14K

Привет, Хабр! Сегодня я расскажу про реализацию матричного умножения и особенности разработки для GPU. Познакомлю вас с устройством GPU, объясню, чем отличается программирование от привычного для CPU, какие нюансы нужно учитывать для эффективной реализации операций GEMM. А затем сравним производительность разных подходов к реализации.

Читать далее

Чем дешевые роутеры отличаются от дорогих и что нужно знать перед покупкой

Время на прочтение10 мин
Охват и читатели43K

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

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

Читать далее

Головоломка на 1000 BTC

Уровень сложностиСредний
Время на прочтение14 мин
Охват и читатели50K

Мало кто знает, но есть ряд биткойн-кошельков с ослабленной защитой. Их владелец хочет, чтобы вы их взломали и взяли деньги себе. Общая сумма ~1000 BTC. Это удивительная история началась в 2015 году....

Читать далее

Как мы заставили LLM понимать юридические документы лучше юристов: история создания универсального промта

Время на прочтение6 мин
Охват и читатели9.5K

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

Узнать подробности

Finetuning Qwen 3 на RTX4090: полный гайд обучения LLM c помощью Unsloth

Уровень сложностиСредний
Время на прочтение23 мин
Охват и читатели8.5K

💡 О чём эта статья: В этой статье я разбираю, как с помощью библиотеки Unsloth обучить LLM и ускорить её обучение с LoRA/DoRA-адаптерами. Я также провёл серию экспериментов на данных по МКБ-10, сравнил качество моделей и описал тонкости экспорта в GGUF.

Читать далее

Про свёрла

Уровень сложностиПростой
Время на прочтение10 мин
Охват и читатели57K

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

Читать далее

Всё про std::search и где его применять

Уровень сложностиСредний
Время на прочтение6 мин
Охват и читатели8.9K

Привет, Хабр!

Сегодня мы рассмотрим без преувеличений один из самых недооценённых алгоритмов стандартной библиотеки — std::search. Разберёмся, как он устроен, где реально экономит процессорные тики, а где лучше заменить его на что-то иное.

Читать далее

Барьеры памяти «Golang»

Уровень сложностиСредний
Время на прочтение16 мин
Охват и читатели9.3K

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

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

Читать далее

Как я превратил простую HTML-инъекцию в SSRF с помощью рендеринга PDF

Время на прочтение4 мин
Охват и читатели2K

Сегодня я расскажу вам об интересной уязвимости, которую я нашёл в одном закрытом баг-баунти проекте: простая HTML-инъекция превратилась в полноценную SSRF с утечкой учетных данных AWS.

Заварите себе кофе, и давайте начнем! 😉

Читать далее

Защита от тёмных искусств: DLL-Hijacking

Уровень сложностиСредний
Время на прочтение12 мин
Охват и читатели1.8K

Представьте: пользователь открывает совершенно легитимную программу — скажем, видеоплеер, корпоративный мессенджер или даже встроенный в Windows инструмент. Программа запускается, выполняет свои функции. Антивирус молчит. Мониторы пользователя не показывают ничего подозрительного. Но в этот самый момент, под прикрытием доверенного процесса, в памяти компьютера уже тихо работает вредоносный код, крадущий конфиденциальные данные или готовящий почву для атаки на сеть. Как он туда попал и почему не был обнаружен? 

Один из возможных вариантов — использование атакующими техники DLL-Hijacking (Mitre T1574.001). Я встречал мнение, что техника (а если быть точным, то это подтехника для T1574: Hijack Execution Flow) DLL Hijacking — баян десятилетней давности и не может считаться актуальной угрозой для корпоративных Windows-сред. Затрудняюсь определить причину такого мнения, потому что атаки с использованием DLL-библиотек явно не ушли в прошлое — их по-прежнему упоминают в уважаемых отчетах по кибербезу — к примеру, здесь (Mandiant M-Trends 2024, стр.50) и здесь (Лаборатория Касперского, «Азиатские APT-группировки: тактики, техники и процедуры»). 

Причин широкого распространения таких атак несколько. В первую очередь, это скрытность, так как вредоносное ПО выполняется в контексте легитимного процесса, обходя сигнатурные проверки антивирусов, а для обнаружения требуется EDR и навыки работы с ним. 

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

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

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

В этой статье мы: 

За 90 секунд освежим в памяти, что такое DLL, как работает, в чем фундаментальная уязвимость механизма загрузки. 

Осветим примеры атак с подменой DLL согласно их классификации.

Расскажем о защитных мерах для предотвращения атак этого типа.

Приведем рекомендации для SOC по обнаружению атаки (и объясним, почему цифровая подпись — не гарантия легитимности библиотеки). 

Итак, добро пожаловать под кат!

Читать далее

Разбор опций командной строки в UNIX-подобных системах

Время на прочтение7 мин
Охват и читатели49K

Введение


Одной из важных задач любой программы, будь она консольной или графической является интерпретация аргументов командной строки. Формально аргументами называются все слова в командной строке(в том числе и имя самой команды) разбитые разделителем (как правило, это пробел и табуляция), кавычки же позволяют включать разделители в аргументы.
Аргументы можно подразделить на опции и операнды. Опции изменяют поведение программы или предоставляют ей дополнительную информацию. У опции могут быть свои аргументы, которые являются информацией необходимой только для этой опции.
Продолжим здесь

Эволюция системных вызовов архитектуры x86

Время на прочтение13 мин
Охват и читатели49K

Про системные вызовы уже много было сказано, например здесь или здесь. Наверняка вам уже известно, что системный вызов — это способ вызова функции ядра ОС. Мне же захотелось копнуть глубже и узнать, что особенного в этом системном вызове, какие существуют реализации и какова их производительность на примере архитектуры x86-64. Если вам также интересны ответы на данные вопросы, добро пожаловать под кат.

Читать дальше →

Информация

В рейтинге
1 997-й
Откуда
Иркутск, Иркутская обл., Россия
Дата рождения
Зарегистрирован
Активность

Специализация

Software Engineer, ML разработчик
Средний
C++
Python
TensorFlow
PyTorch
Cmake
Linux
Deep Learning
Cuda
Computer Science
Keras