Кодинг

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

Криптуем по-крупному. Разбираемся с режимом гаммирования из ГОСТ 34.13—2015

Режим гаммирования, в отличие от режима простой замены, позволяет шифровать сообщения произвольной длины без применения операции дополнения (паддинга). Сегодня мы…

Фаззинг глазами программиста. Как в Google автоматизируют поиск багов

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

Внутри x86-64 SystemV ABI. Как говорить с ядром Linux на его языке

Абстракция — основа программирования. Многие вещи мы используем, не задумываясь об их внутреннем устройстве, и они отлично работают. Всем известно,…

Это читерство! Изучаем принципы борьбы с читами и пишем простую защиту

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

Погружение в Dokan. Как сделать свою файловую систему для Windows без FUSE

В Linux, как известно, многие вещи реализованы как файлы в файловой системе. А если и не реализованы, то их можно…

Секретные запросы. Как спрятать данные веб-приложения от троянов

Самая привлекательная цель для злоумышленника — онлайновый банкинг, и решающую роль в успехе вирусных атак на него играют ботнеты. Но…

Это читерство! Учимся взламывать игры и писать читы на простом примере

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

Кейлоггер по-домашнему. Пишем на C# кейлоггер, который не палится антивирусами

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

Магия C++. Как выжить без динамической идентификации типов и не сойти с ума

В C++ существует такое понятие, как динамическая идентификация типа данных (RTTI). Это механизм, который позволяет определить тип переменной или объекта…

Сила OCaml. Разбираемся с типизацией и пишем скрипты

Статически типизированные языки обычно вынуждают писать типы переменных по любому поводу. Но уже далеко не всегда: теория и практика языков…

Виртуалка своими руками. Как обфусцировать код при помощи виртуализации и что делать с такой защитой

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

На что способна ада. Делаем утилиту для детекта гипервизора на полузабытом языке

Лучше всего познавать язык на реальном проекте, поэтому, когда я решил поэкспериментировать с адой, я поставил себе реальную и интересную…

Протокол своими руками. Создаем с нуля TCP-протокол и пишем сервер на C#

Ты в жизни не раз сталкивался с разными протоколами — одни использовал, другие, возможно, реверсил. Одни были легко читаемы, в…

Python по всем правилам. Делаем свою структуру данных совместимой с фичами Python

Если ты пишешь на Python, то наверняка видел в стандартных библиотеках определения методов, обернутых в двойные подчеркивания. Эти «магические» методы…

Убить Билла. Изучаем способы принудительного завершения процессов в Windows

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

Мифы об аде. Как и зачем программировать на аде в современном мире

Язык, разработанный по заказу Министерства обороны США и названный в честь первой в мире программистки Ады Лавлейс, активно используется для…

Пишем эмулятор игровой консоли. Как устроена легендарная приставка Nintendo и как ее воссоздать самому

Ты наверняка сталкивался с эмуляторами игровых приставок и, возможно, даже просиживал за ними не один час. Но задавался ли ты…

Пишем стилер. Как вытащить пароли Chrome и Firefox своими руками

Ты наверняка слышал о таком классе зловредных приложений, как стилеры. Их задача — вытащить из системы жертвы ценные данные, в…

Задачи на собеседованиях. Задачи от компании Abbyy

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

Тайный WinAPI. Как обфусцировать вызовы WinAPI в своем приложении

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

Кодим в консоли. Как отказаться от IDE и стать более продуктивным и уверенным в себе

Зачем в XXI веке разработчику нужны навыки программирования в «голой» консоли? Да затем же, зачем солдату навыки рукопашного и штыкового…

Стоп-спам для «Телеграма». Как написать и задеплоить бота на TypeScript за полчаса

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

Идеальная форма. Обрабатываем сложные формы на Python с помощью WTForms

Обработка HTML-форм в веб-приложениях — несложная задача. Проблемы начинаются, когда форма разрастается: нужно следить за полями, их ID, атрибутами name,…

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

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

[Без]опасный JavaScript. Изучаем проблемы кода на JS и выбираем средства борьбы с ними

Разработка безопасных приложений на JavaScript — весьма непростое занятие. Но выполнимое. В этой статье рассмотрим особенности JavaScript, из-за которых возникает…

Советы Android-разработчику. Что я узнал за год поддержки приложения в Google Play

Вот уже год я занимаюсь поддержкой приложения в Google Play. За это время приложение установили сотни тысяч раз, а пользовательская…

Пишем майнер на Java. Кодим добытчик криптовалюты Electroneum

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

Задачи на собеседованиях. Задания для хардкорщиков от компании Acronis

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

Давай напишем ядро! Создаем простейшее рабочее ядро операционной системы

Разработка ядра по праву считается задачей не из легких, но написать простейшее ядро может каждый. Чтобы прикоснуться к магии кернел-хакинга,…

Дао хеша. Познаем дзен методически правильного хеширования паролей

Наверняка тебе известно, что хорошая система контроля доступа, основанная на вводе и проверке правильности пароля, никогда и нигде не сохраняет…

Многофакторная аутентификация по-взрослому. Куем серьезный софт с помощью бесплатного инструментария

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

Русский народный блокчейн. Пишем простой локальный блокчейн с использованием «Стрибога»

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

Криптуем по-крупному. Разбираемся с режимами работы российских блочных шифров

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

Творческая Iskra. Делаем аппаратный менеджер паролей своими руками

Давай рассмотрим настоящий тру-хакерский, тру-гиковский, удобный и безопасный способ хранить пароли, создав свой аппаратный менеджер паролей! Он будет способен хранить…

Крафтовая ФС. Как быстро сделать свою файловую систему на FUSE и Swift

Мысль о том, чтобы написать свою файловую систему, кажется многим слишком амбициозной. Однако проект FUSE for macOS, развиваемый сообществом энтузиастов,…

Русская «Магма». Как работает отечественный алгоритм блочного шифрования

В прошлой части наших «извращений с импортозамещением» мы подробно познакомились с алгоритмом шифрования «Кузнечик», который определен в ГОСТ 34.12—2015. Помимо…

Минутка ненависти Android-разработчика. Разбираем 10 самых частых проблем кодинга

Двадцать лет назад использовать Android было невозможно. Десять лет назад было еще рано. Сегодня — уже поздно. Android дорос уже…

JavaScript для умного дома. Arduino устарел, да здравствует ESP32!

Интерес к интернету вещей растет с каждым днем, свои курсы по технологии IoT запустили и Cisco, и Samsung. Но большинство…

Инструментарий Android-разработчика. Подбираем программы, которые помогут в работе

Android Studio — весьма продвинутая среда разработки, из коробки предоставляющая почти все, что нужно разработчику. Но с ее помощью можно…

Задачи на собеседованиях. Полный разбор задач и награждение победителей от HackerU

Настало время подвести итоги мартовских задач на собеседованиях и прославить тех парней, которые их с блеском решили. Спасибо победителю —…