Как стать автором
Обновить
11
0
Игорь @igorzakhar

Пользователь

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

Особенности Ext4

Время на прочтение9 мин
Количество просмотров162K
Данная статья является переводом той части статьи на KernelNewbies, которая описывает особенности файловой системы Ext4. Последний раздел статьи, об использовании Ext4, уже на Хабре публиковался.

Ext4 — это результат эволюции Ext3, наиболее популярной файловой системы в Linux. Во многих аспектах Ext4 представляет собой больший шаг вперёд по сравнению с Ext3, чем Ext3 была по отношению к Ext2. Наиболее значительным усовершенствованием Ext3 по сравнению с Ext2 было журналирование, в то время как Ext4 предполагает изменения в важных структурах данных, таких как, например, предназначенных для хранения данных файлов.

Это позволило создать файловую систему с более продвинутым дизайном, более производительную и стабильную и с обширным набором функций.
Что ж за функции-то такие?
Всего голосов 108: ↑105 и ↓3+102
Комментарии39

Модификация системного вызова. Часть 2

Время на прочтение6 мин
Количество просмотров16K
В предыдущей части мы договорились до того, что не экспортируемые имена ядра Linux могут использоваться в коде собственных модулей ядра с тем же успехом, что и экспортируемые. Одним из таких имён в ядре является селекторная таблица всех системных вызовов Linux. Собственно, это и есть основной интерфейс любых приложений к сервисам ядра. Теперь мы рассмотрим как можно модифицировать оригинальный обработчик любого системного вызова, подменить его, или внести разнообразие в его выполнение в соответствии с собственным видением.
Читать дальше →
Всего голосов 23: ↑21 и ↓2+19
Комментарии32

Сетевые системные вызовы. Часть 3

Время на прочтение11 мин
Количество просмотров21K
Предыдущую часть обсуждения мы завершили на такой вот оптимистической ноте: «Подобным образом мы можем изменить поведение любого системного вызова Linux». И тут я слукавил — любого… да не любого. Исключение составляют (могут составлять) группа сетевых системных вызовов, работающих с BSD сокетами. Когда сталкиваешься с этим артефактом в первый раз — это изрядно озадачивает.
Читать дальше →
Всего голосов 22: ↑22 и ↓0+22
Комментарии2

Добавить системный вызов. Часть 4 и последняя

Время на прочтение10 мин
Количество просмотров9K
                                                                                    - Что-то беспокоит меня Гондурас...
                                                                                    - Беспокоит? А ты его не чеши.


В предыдущих частях обсуждения (1-я, 2-я и 3-я) мы рассматривали как, используя возможность поменять содержимое sys_call_table, изменить поведение того или иного системного вызова Linux. Сейчас мы продолжим эксперименты в сторону того, можно ли (и как) динамически добавить новый системный вызов в целях вашего программного проекта.
Читать дальше →
Всего голосов 27: ↑25 и ↓2+23
Комментарии24

4 способа писать в защищённую страницу

Время на прочтение9 мин
Количество просмотров20K
Имеется в виду выполнение записи по аппаратно защищённому от записи адресу памяти в архитектуре x86. И то, как это делается в операционной системе Linux. И, естественно, в режиме ядра Linux, потому как в пользовательском пространстве, такие трюки запрещены. Бывает, знаете ли, непреодолимое желание записать в защищённую область … когда садишься писать вирус или троян…

Описание проблемы


… а если серьёзно, то проблема записи в защищённые от записи страницы оперативной памяти возникает время от времени при программировании модулей ядра под Linux. Например, при модификации селекторной таблицы системных вызовов sys_call_table для модификации, встраивания, имплементации, подмены, перехвата системного вызова — в разных публикациях это действие называют по разному. Но не только для этих целей… В очень кратком изложении ситуация выглядит так:

  • В архитектуре x86 существует защитный механизм, который при попытке записи в защищённые от записи страницы памяти приводит к возбуждению исключения.
  • Права доступа к странице (разрешение или запрет записи) описываются битом _PAGE_BIT_RW (1-й) в соответствующей этой странице структуре типа pte_t. Сброс этого бита запрещает запись в страницу.
  • Со стороны процессора контролем защитой записи управляет бит X86_CR0_WP (16-й) системного управляющего регистра CR0 — при установленном этом бите попытка записи в защищённую от записи страницу возбуждает исключение этого процессора.

Читать дальше →
Всего голосов 34: ↑31 и ↓3+28
Комментарии9

Планировщик Go

Время на прочтение6 мин
Количество просмотров22K
Преамбула от переводчика: Это достаточно вольный перевод пусть и не самой свежей (июнь 2013 года), но доходчивой публикации о новом планировщике параллельных ветвей исполнения в Go. Достоинством этой заметки есть то, что в ней совершенно просто, «на пальцах» описывается новый механизм планирования для ознакомления. Тем же, кого не устраивает объяснение «на пальцах» и кто хотел бы обстоятельного изложения, рекомендую Scheduling Multithreaded Computations by Work Stealing — 29 страниц изложения со строгим и сложным математическим аппаратом для анализа производительности, 48 позиций библиографии.

Введение


Одной из наибольших новинок в Go 1.1 стал новый диспетчер, спроектированный Дмитрием Вьюковым (Dmitry Vyukov). Новый планировщик дал настолько разительное увеличение производительности для параллельных программ без изменений кода, что я решил написать что-нибудь об этом.
Читать дальше →
Всего голосов 26: ↑20 и ↓6+14
Комментарии11

Делаем доступным все символы ядра Linux. Часть 1

Время на прочтение11 мин
Количество просмотров30K

Состояние дел


Это обсуждение относится к ядру операционной системы Linux, и представляет интерес для разработчиков модулей ядра, драйверов под эту операционную систему. Для всех прочих эти заметки вряд ли представляют интерес.
Читать дальше →
Всего голосов 31: ↑22 и ↓9+13
Комментарии28

Виртуальный сетевой интерфейс

Время на прочтение13 мин
Количество просмотров43K
Общеизвестно, что драйверы Linux — это модули ядра. Все драйверы являются модулями, но не все модули — драйверы. Примером одной из таких групп модулей, не являющихся драйверами, и гораздо реже появляющиеся в обсуждениях, являются сетевые фильтры на различных уровнях сетевого стека Linux.

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

Идея крайне проста: канализировать трафик уже существующего сетевого интерфейса во вновь создаваемый интерфейс с совершенно другими характеристиками (имя, IP, маска, подсеть, …). Один из способов выполнения таких действий в форме модуля ядра Linux мы и обсудим (он не единственный, но другие способы мы обсудим отдельно в другой раз).
Читать дальше →
Всего голосов 24: ↑22 и ↓2+20
Комментарии11

10 интересных научно-фантастических книг 2023 года

Время на прочтение9 мин
Количество просмотров95K

К 1 сентября мы подготовили подборку из 10 НФ произведений, вышедших или планирующихся к выходу в этом году в России и которые, как нам кажется, будут интересны любителям жанра. Ведь не только же перечитывать старых добрых Брэдбери, Херберта, Стругацких или Лукьяненко? (спойлер — он тоже есть в подборке).

Сразу оговоримся — никакие рейтинги присваиваться не будут.  
1. В подборке представлены не только зарубежные, но и отечественные авторы, некоторые из них пока мало кому известны.
2. Некоторые книги могли быть написаны раньше, но в список они попали, потому что были изданы в 2023 году на русском языке (!) — это очень важный критерий. 
3. В подборку вошли только научно-фантастические книги — про классное фэнтези сделаем отдельную статью, если вам понравится формат.
4. Мы не одобряем пиратства, за исключением самиздата, если автор сам распространяет книгу бесплатно. Поэтому приводим ссылки на фрагменты книг для ознакомления, чтобы вы могли решить, нравится ли стиль автора и завязка сюжета.

Читать далее
Всего голосов 27: ↑24 и ↓3+27
Комментарии17

Реверс бинарных файлов Golang с использование GHIDRA. Часть 1

Уровень сложностиСредний
Время на прочтение11 мин
Количество просмотров5.1K

Язык программирования Go (так же известный как Golang) с каждым днем все больше и больше программистов хотят на нем писать программы. Для хакеров этот язык программирования становится еще более привлекательным за счет кросс-компиляции для различных платформ - Windows, Linux, MacOS. Например, хакеры могут написать загрузчик на Go, внутри может быть ВПО, созданное с использованием более распространенного языка.

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

Некоторые особенности языка программирования Go усложняют задачу реверс-инженерам при исследовании бинарных файлов Go. Инструменты обратного проектирования (например, дизассемблеры) могут отлично справляться с анализом двоичных файлов, написанных на более популярных языках (например, C, C++, .NET), но Go создает новые проблемы, которые делают анализ более громоздким.

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

Читать далее
Всего голосов 9: ↑8 и ↓1+12
Комментарии0

Как начать заниматься багхантингом веб-приложений. Часть 3

Уровень сложностиПростой
Время на прочтение14 мин
Количество просмотров4.3K

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

В заключительной части цикла мы традиционно рассмотрим еще несколько классов уязвимостей на реальных примерах, а то, чего мы не успеем коснуться, оставим для самостоятельного изучения. Ведь о каком опыте и знаниях можно говорить, если не стремиться к самообразованию и саморазвитию? 😊 Еще приведем пять интересных хакерских трюков, они же hack tricks , которые неплохо известны атакующим, поэтому и нам, исследователям безопасности, необходимо знать существующие, изучать новые, а также придумывать собственные. В конце дадим напутствие новичкам-багхантерам для успешного путешествия в мир багбаунти, в котором нужно стремиться делать мир безопаснее, стать одним из лучших белых хакеров, завоевывать признание среди сообщества и, конечно же, получать хорошие вознаграждения за найденные уязвимости.

Читать далее
Всего голосов 4: ↑4 и ↓0+4
Комментарии0

Определение токсичности комментариев с помощью глубокого обучения

Время на прочтение5 мин
Количество просмотров3.4K

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

Читать далее
Всего голосов 5: ↑3 и ↓2+5
Комментарии2

Профилирование Python — почему и где тормозит ваш код

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

Представьте ситуацию: вы написали скрипт для обработки каких-то данных на ноутбуке, ушли попить кофе, а когда пятнадцать минут спустя вернулись, завершилось едва ли 10%.

Почему скрипт работает так медленно? Какая его часть тормозит? Дело в чтении данных, их обработке или сохранении? Как ускорить исполнение? Действительно ли скрипт вообще медленный?

Ответить на все эти вопросы поможет инструмент под названием «профилировщик» (profiler).
Читать дальше →
Всего голосов 48: ↑47 и ↓1+66
Комментарии10

Сетевая подсистема в ОС

Время на прочтение7 мин
Количество просмотров15K

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

Disclamer: Статья описывает данные, которые с точки зрения автора помогут понять, как работают операционные системы с моделью TCP/IP, и не претендует на полноту.

Читать далее
Всего голосов 16: ↑9 и ↓7+5
Комментарии3

Вторая часть перевода книги Дэвида Кушнера «Masters of Doom». Главы 6-12

Время на прочтение2 мин
Количество просмотров5.1K
image

Закончен и выложен на Ваш суд перевод книги Дэвида Кушнера «Masters of DOOM».

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

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

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

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

Очень много выдержек из американских масс-медиа, которые как в зеркале отражают отношение общества к компьютерным играм.
Ну и разумеется рассказана вся история основных главных героев — Джона Кармака, Джона Ромеро, Кевина Клауда, Адриана Кармака. А так же истории многих других разработчиков игр того времени.

Повествование проведёт через каждый шаг роста компании «id software». От первой совместной игры, до игр, которые навсегда вошли в историю компьютерной индустрии.

В заключение хочется процитировать высказывание Кармака, которое является советом всем начинающим программистам, и молодым людям, которые находятся только в начале этого пути — (цитата из книги)

«Кармак с презрением относился к разным напыщенным фразам и речам, но одно высказывание, его собственное, ему нравилось. Оно звучало так – “В наш информационный век барьеров больше не существует.”- повторил он её сам себе. “Барьеры появляются если только мы их придумываем себе сами. Если вы горите желанием создать что-то новое и грандиозное, вам не нужны миллионы долларов вложений. Вам надо только пиццу и диет-колу, чтобы забить холодильник, дешевый персональный компьютер для работы, и преданность своей идее. Мы спали на полу. Мы перебирались когда-то для этого через реки.
Читать дальше →
Всего голосов 8: ↑7 и ↓1+10
Комментарии6

Си должен умереть

Время на прочтение21 мин
Количество просмотров110K

Язык Си - один из наиболее влиятельных языков программирования за всю историю. Он стал незаменимым инструментом разработки операционных систем, сместив с этого пьедестала языки ассемблера. Изучение Си обязательно для любого уважающего себя программиста. Этот язык любим за свою внешнюю простоту и ненавидим за беспощадность к ошибкам. Благодаря нему у нас есть ядро Linux и тысячи уязвимостей в нём же в придачу.

Попробуем понять, что же такое этот противоречивый язык Си - благословение или проклятие?

Читать далее
Всего голосов 185: ↑147 и ↓38+156
Комментарии643

Плохой код убивает

Время на прочтение10 мин
Количество просмотров74K
Плохой программист Джон сделал ошибку в коде, из-за которой каждый пользователь программы был вынужден потратить в среднем 15 минут времени на поиск обхода возникшей проблемы. Пользователей было 10 миллионов. Всего впустую потрачено 150 миллионов минут = 2.5 миллиона часов. Если человек спит 8 часов в сутки, то на сознательную деятельность у него остается 16 часов. То есть Джон уничтожил 156250 человеко-дней ≈ 427.8 человеко-лет. Средний мужчина живет 64 года, значит Джон убил примерно 6 целых 68 сотых человека.

Как тебе спится, Джон — серийный программист?

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

Правила хорошего кода


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

Если вы пишете что-то сложнее «hello world”, оно будет размещаться не в одном, а в нескольких файлах. Как правило, файлов бывает больше десятка. Всем им даются непонятные короткие имена (программисты любят сокращения) Человек, который попытается разобраться в вашем коде, будет плеваться, шипеть и проклинать вас. Ваша карма будет испорчена и следующие несколько жизней вы будете собакой в Корее.
Читать дальше →
Всего голосов 129: ↑73 и ↓56+17
Комментарии183

Да, я всё ещё хочу заниматься этим, когда мне исполнится 56 лет

Время на прочтение3 мин
Количество просмотров52K
Ты правда хочешь продолжать заниматься этим, когда тебе исполнится 50 лет?
Больше ли стресса в больших масштабах разработки? Должен признать, что да. Все-таки, это удел молодых.
Нет, это удел глупых. Мне 55 и я занимаюсь профессиональным программированием с 1981, а начал ещё когда был в школе, в 1973 или около того. И что я выяснил за это время, так это то, что сам по себе кодинг до полусмерти не имеет смысла.

Мой недавний пост «Почему я не занимаюсь сверхурочной работой бесплатно и вам не советую» остаётся самым популярным из моих постов каждую неделю с момента его написания. Так что, похоже, не я один считаю, что кодинг до полусмерти — это пустая трата времени. Но не буду повторяться.
Читать дальше →
Всего голосов 157: ↑147 и ↓10+137
Комментарии85

Привет из свободного от libc мира! (Часть 1)

Время на прочтение5 мин
Количество просмотров29K
В качестве упражнения я хочу написать программу на С. Достаточно простую для того, чтобы дизассемблировать ее и объяснить весь код самой себе.

Звучит несложно, правильно?

У читателя предполагается наличие опыта компиляции программ и работы в Линуксе. Небольшое умение читать ассемблерный код тоже пригодится.
Читать дальше →
Всего голосов 138: ↑126 и ↓12+114
Комментарии61

Мультиплеер PyGame. Пишем сервер и клиент. Часть 1

Уровень сложностиСредний
Время на прочтение5 мин
Количество просмотров13K

Это моя первая статья и серия из статьей о написании мультиплеерной игры на Python с использованием библиотеки Pygame.

Читать далее
Всего голосов 13: ↑12 и ↓1+15
Комментарии9

Информация

В рейтинге
5 222-й
Работает в
Зарегистрирован
Активность