Как стать автором
Обновить
0
0

Инженер

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

Учимся читать QR-коды без компьютера

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

Задавались ли вы когда-нибудь вопросом, как работают QR-коды? Если да, то эта статья для вас. Здесь вас ждёт интерактивное объяснение*, которое мы составили для семинара, проводившегося в рамках Всемирного конгресса хакеров 37C3, но вы также можете использовать его самостоятельно.

Прочитав статью, вы узнаете:

  • Из чего состоят QR-коды.
  • Как декодировать QR-коды вручную (используя нашу шпаргалку).
Читать дальше →
Всего голосов 101: ↑98 и ↓3+124
Комментарии33

Самые быстрые мьютексы

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

Cosmopolitan Libc хорошо известна своим «полиглотным жирным бинарным» хаком, который позволяем исполняемым файлам запускаться на шести операционных системах для AMD64/ARM64. Вас может удивить, что при этом она может быть лучше С‑библиотекой для вашего продакшена. Чтобы продемонстрировать это, давайте сравним библиотеку мьютексов Cosmo с другими платформами.

Мы напишем простой тест, который создает 30 потоков, увеличивающих одно и то же число 100 000 раз. Это поможет проверить, насколько хорошо реализация мьютексов справляется с задачей при интенсивном использовании.

Читать далее
Всего голосов 25: ↑23 и ↓2+27
Комментарии7

Создание Git-коммита: The Hard Way

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

Мы постоянно используем высокоуровневые команды git, такие как git add и git commit. Однако также существует другая группа команд git, которые обрабатывают низкоуровневые операции.

В этой статье мы создадим git‑коммит, используя низкоуровневые операции, а не команду git commit.

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

P2P общего назначения

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

IT-индустрия совершила интересный виток развития в последние десятилетия. На заре IT-революции, когда компьютеры были дорогими, их ресурсы, хоть и скромные по нынешним временам, нужно было использовать эффективно. Это привело к появлению многопользовательских OS, например, семейства UNIX, созданию компьютерных сетей и появлению протоколов удаленного доступа. 

Стремительное развитие производительности чипов и удешевление железа привело к революции персональных компьютеров. Однако опережающий рост вычислительных потребностей запустил развитие на новый круг. Сейчас найдется немного компаний и организаций, которые обходятся исключительно персональными компьютерами и сервисами в локальной сети. Когда-то диковинные IaaS, PaaS, SaaS, распределенные вычислительные технологии плотно вошли в жизнь. Доступ к удаленным системам — обыденная потребность не только для администраторов и программистов. Все знают о протоколах ssh, rdp, vnc, многие пользуются TeamViewer, AnyDesk, Remmina, X2Go и т. п. Ввиду того, что IPv4 сети и порожденный ими NAT пока еще более чем актуальны, не каждое из перечисленных средств позволяет подключиться к машине, находящейся за NAT, если у вас нет возможности пробросить порты.

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

Большие простые числа: преобразование Фурье

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

В одной из предыдущих статей я рассказал о математических алгоритмах, позволяющих проверить простоту очень большого числа. Но в основе всех тех алгоритмов лежит одна базовая операция — перемножение двух больших чисел. Именно операции длинного умножения занимают 99,9% времени выполнения любого теста простоты. Как же умножение реализуется на практике? Говорят, что при помощи быстрого преобразования Фурье. Но беглое прочтение Википедии вызывает недоумение. Какое отношение преобразование Фурье имеет к умножению целых чисел? Давайте разбираться.

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

Основы работы с фьютексами

Время на прочтение10 мин
Количество просмотров35K
Фьютекс (futex — сокращение от «Fast userspace mutex») — это механизм, предложенный разработчиками Linux из IBM в 2002 году и вошедший в ядро в конце 2003 года. Основной идеей было предоставить более эффективный способ синхронизации пользовательских потоков с минимальным количеством обращений к ядру ОС.

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

Важный момент: фьютексы — это достаточно низкоуровневый инструмент, напрямую его использовать стоит лишь при разработке фундаментальных библиотек, вроде стандартной библиотеки C/C++. Очень маловероятно, что вам понадобится использовать фьютексы в обычном прикладном приложении.
Читать дальше →
Всего голосов 30: ↑30 и ↓0+30
Комментарии4

Как оптимизировать код на С для x86-процессоров: подсистема кэша и памяти, инструкции AVX-512

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

Меня зовут Андрей Бакшаев, я ведущий инженер-программист в YADRO. Моя команда занимается разработкой и оптимизацией математических библиотек под архитектуру x86. До этого я 15 лет работал в Intel. Значительная часть моих задач заключалась в том, чтобы реализовывать некоторые алгоритмы обработки изображений и сигналов в довольно известной математической библиотеке IPP, максимально эффективно используя возможности процессоров. Я также исследовал производительность этих алгоритмов в процессорах на ранней стадии проектирования. 

В статье я поделюсь своим опытом оптимизации низкоуровневого кода на языке C. Рассмотрим подсистему кэша и памяти процессоров и новые инструкции AVX-512. Разберем пример ускорения копирования байтового массива данных и посмотрим, как векторизованный код позволяет сократить время работы широко используемого алгоритма замены байтов по таблице с 619 до 34 мс, то есть примерно в 18 раз. 

Читать далее
Всего голосов 42: ↑39 и ↓3+48
Комментарии23

Ленивая реализация обхода дерева дочерних элементов класса QObject

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

Введение


В статье описана ленивая реализация обхода дерева на языке C++ с использованием сопрограмм и диапазонов на примере улучшения интерфейса работы с дочерними элементами класса QObject из фреймворка Qt. Подробно рассмотрено создание пользовательского представления для работы с дочерними элементами и приведены ленивая и классическая его реализации. В конце статьи есть ссылка на репозиторий с полным исходным кодом.

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

Внутренности Linux: как /proc/self/mem пишет в недоступную для записи память

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

Странная причудливость псевдофайла /proc/*/mem заключается в его «пробивной» семантике. Операции записи через этот файл будут успешными даже если целевая виртуальная память помечена как недоступная для записи. Это сделано намеренно, и такое поведение активно используется проектами вроде компилятора Julia JIT или отладчика rr.

Но возникают вопросы: подчиняется ли привилегированный код разрешениям виртуальной памяти? До какой степени оборудование может влиять на доступ к памяти ядра?

Мы постараемся ответить на эти вопросы и рассмотрим нюансы взаимодействия между операционной системой и оборудованием, на котором она исполняется. Изучим ограничения процессора, которые могут влиять на ядро, и узнаем, как ядро может их обходить.
Всего голосов 20: ↑18 и ↓2+29
Комментарии1

Куда деваются программисты после 40

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


— Вам уже 45? Но у нас коллектив очень молодой. Вы уверены, что хотели бы у нас работать?
— Да, конечно! Я много наслышан о вашей компании. Это мечта всей моей жизни!
— Ну ладно. Вот вам простой вопросик. Что означает буква L в аббревиатуре SOLID?
— Liskov Substitution Principle.
Читать дальше →
Всего голосов 136: ↑105 и ↓31+74
Комментарии1044

Элементы языка С, которые являются неподдерживаемыми в языке С++

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

Нижеприведенный список является моей небольшой коллекцией примеров кода на языке С, которые не являются корректными с точки зрения языка С++ или имеют какое-то специфичное именно для языка С поведение. (Именно в эту сторону: С код, являющийся некорректным с точки зрения С++.)

Этот материал я уже публиковал на другом ресурсе в менее причесанном виде, Я бы, наверное, поддался прокрастинации и никогда не собрался опубликовать эту коллекцию здесь, но из-за горизонта уже доносится стук копыт неумолимо приближающегося С23, который безжалостно принесет некоторые жемчужины моей коллекции в жертву богам С-С++ совместимости. Поэтому мне и пришлось встать с печи, пока они еще актуальны...

Разумеется, язык С имеет много существенных отличий от языка С++, т.е. не составит никакого труда привести примеры несовместимостей, основанные, скажем, на ключевых словах или других очевидных эксклюзивных свойствах С99. Таких примеров вы не найдете в списке ниже. Мой основной критерий для включения примеров в этот список заключался именно в том, что пример кода должен выглядеть на первый взгляд достаточно "невинно" для С++-наблюдателя, т.е. не содержать бросающихся в глаза С-эксклюзивов, но тем не менее являться специфичным именно для языка С.

Читать далее
Всего голосов 104: ↑103 и ↓1+138
Комментарии80

Межмодульный анализ C и C++ проектов в деталях. Часть 1

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

Начиная с PVS-Studio 7.14, для C и C++ анализатора появилась поддержка межмодульного анализа. В этой статье, которая будет состоять из двух частей, мы расскажем, как устроены похожие механизмы в компиляторах и раскроем некоторые технические подробности реализации в нашем статическом анализаторе.

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

150+ хакерских поисковых систем и инструментов

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

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

Пост состоит из 8 объемных разделов:

1. метапоисковики и поисковые комбайны;

2. инструменты для работы с дорками;

3. поиск по электронной почте и логинам;

4. поиск по номерам телефонов;

5. поиск в сети TOR;

6. поиск по интернету вещей, IP, доменам и поддоменам;

7. поиск данных об уязвимостях и индикаторов компрометации;

8. поиск по исходному коду.

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

Читать далее
Всего голосов 54: ↑51 и ↓3+58
Комментарии6

Режимы работы выходных каскадов ламповых усилителей

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

Схемотехника ламповых усилителей обманчиво проста. Каждый каскад состоит всего из нескольких компонентов: собственно лампы, двух-трёх-четырёх резисторов и пары-тройки конденсаторов. Выходной каскад лампового усилителя может быть однотактным (SE) и двухтактным (PP) и обычно содержит трансформатор.

В этой публикации мы рассмотрим особенности работы однотактных и двухтактных выходных каскадов, узнаем о режимах работы ламп и обсудим применение мощных триодов в однотактных выходных каскадах ламповых усилителей.
Читать дальше →
Всего голосов 43: ↑42 и ↓1+61
Комментарии38

Программирование для админа: какой язык выбрать?

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

Эксперты Слёрма — Антон Черноусов, Павел Селиванов, Денис Наумов и Владислав Килин — собрались, чтобы обсудить, какой язык больше подходит для админов, инженеров и devops.

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

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

Пишем Python-расширение на Ассемблере (зачем?)

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

Прим. Wunder Fund: в жизни каждого человека случается момент, когда ему приходиться позаниматься реверс-инжинирингом. В статье вы найдёте базовые особенности работы с ассемблером, а также прочитаете увлекательную историю господина, который решил написать Питон-библиотеку на ассемблере и многому научился на своём пути.

Иногда, чтобы полностью разобраться с тем, как что-то устроено, нужно это сначала разобрать, а потом собрать. Уверен, многие из тех, кто это читают, в детстве часто поступали именно так. Это были дети, которые хватались за отвёртку для того, чтобы узнать, что находится внутри у чего-то такого, что им интересно. Разбирать что-то — это невероятно увлекательно, но чтобы снова собрать то, что было разобрано, нужны совсем другие навыки.

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

Эксперимент, о котором я хочу рассказать, пронизан тем же духом. Мне хотелось узнать о том, смогу ли я написать расширение для CPython на чистом ассемблере.

Зачем мне это? Дело в том, что после того, как я дописал книгу CPython Internals, разработка на ассемблере всё ещё была для меня чем-то весьма таинственным. Я начал изучать ассемблер для x86-64 по этой книге, понял какие-то базовые вещи, но не мог связать их со знакомыми мне высокоуровневыми языками.

Вот некоторые вопросы, ответы на которые мне хотелось найти:

— Почему расширения для CPython надо писать на Python или на C?
— Если C-расширения компилируются в общие библиотеки, то что такого особенного в этих библиотеках? Что позволяет загружать их из Python?
— Как воспользоваться ABI между CPython и C, чтобы суметь расширять возможности CPython, пользуясь другими языками?

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

Сейчас плохо, но все может быть еще хуже

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

Разбираю ключевые идеи неизданной на русском книги «Внутри коллапса Венесуэлы» Уильяма Ноймана.

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

Читать далее
Всего голосов 176: ↑164 и ↓12+201
Комментарии175

С++ без классов?

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

(на картинке изображён С++ среди других функциональных языков)

Классы - это скорее всего первое, что добавил Страуструп в далёких 1980х, ознаменовав рождение С++. Если представить, что мы археологи древних плюсов, то косвенным подтверждением этого факта для нас будет this, который по прежнему в С++ является указателем, а значит, скорее всего, он был добавлен до "изобретения" ссылок!

Но речь не про это, пора окинуть взглядом пройденный с тех пор путь, изменение и языка и парадигм, естественный отбор лучших практик, внезапные "великие открытия" и понять к чему это всё привело язык, который когда то вполне официально назывался С с классами (ныне мем).

В конце(СПОЙЛЕР) мы попытаемся превратить С++ в функциональный язык за несколько простых действий.

Для начала рассмотрим базовое применение классов:

Начать погружение
Всего голосов 12: ↑11 и ↓1+14
Комментарии47

Holy C++

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

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

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

1 - union - сумм тип из 70х, в С идея хранения одного типа из нескольких в одном участке памяти выглядит неплохо и сейчас, ведь там все типы это набор байт с заданным размером.

В С++ же использование union это автоматическое undefined behavior, например:

Читать далее!
Всего голосов 75: ↑48 и ↓27+36
Комментарии362

Crypt, XOR, взлом нешифрованного ZIP и ГПСЧ. Решение задач с r0от-мi Crypto. Часть 2

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

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

Часть 1 — Кодировки, шифр сдвига, брут хешей и создание картинки с помощью PIL python.

Организационная информация
Специально для тех, кто хочет узнавать что-то новое и развиваться в любой из сфер информационной и компьютерной безопасности, я буду писать и рассказывать о следующих категориях:

  • PWN;
  • криптография (Crypto);
  • cетевые технологии (Network);
  • реверс (Reverse Engineering);
  • стеганография (Stegano);
  • поиск и эксплуатация WEB-уязвимостей.

Вдобавок к этому я поделюсь своим опытом в компьютерной криминалистике, анализе малвари и прошивок, атаках на беспроводные сети и локальные вычислительные сети, проведении пентестов и написании эксплоитов.
Читать дальше →
Всего голосов 9: ↑9 и ↓0+9
Комментарии0
1
23 ...

Информация

В рейтинге
Не участвует
Откуда
Москва и Московская обл., Россия
Зарегистрирован
Активность

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

Software Developer