Pull to refresh

Пишем интерпретатор BASIC в стиле 80-х

Reading time22 min
Views9.3K


В течение нескольких лет я работала над личным проектом создания (а на самом деле исследования) «фальшивого эмулятора», то есть написанного на JavaScript эмулятора никогда не существовавшего компьютера. Эта машина должна была стать данью памяти восьми- и шестнадцатибитным компьютерам 1980-х и 90-х.

Однако мне нравятся сложности: в этой машине ещё и использовался новый набор инструкций. Он похож на наборы, применявшиеся в ту эпоху, но немного проще в работе. Так родился Retroputer. В течение нескольких лет эмулятор расширял свои возможности и совершенствовался, но, скорее всего, он никогда не будет «закончен» (в конце концов, это ведь личный проект-исследование).

Когда появился @bbcmicrobot, я захотела создать нечто подобное для Retroputer. Мои навыки разработки на JS в основном ограничивались фронтендом, поэтому это будет отличным поводом получить опыт бэкенда. Только есть одна проблема: Retroputer может понимать только собственный язык ассемблера. Пока у него нет поддержки BASIC.

Так я и пришла к созданию интерпретатора BASIC в стиле 80-х, то есть полностью на языке ассемблера, как его тогда и писали. Я решила, что стоит поделиться своей работой, потому что нам не часто приходится погружаться в области, столь далёкие от привычных абстракций. Мой повседневный инструмент (JavaScript) делает многие аспекты тривиальными, и иногда это даже кажется магией. Понимание самого нижнего уровня процессов часто помогает в понимании этих абстракций.

Итак, давайте приступим.
Читать дальше →
Total votes 34: ↑34 and ↓0+34
Comments5

Как создать простой LoRa мессенджер: обмен зашифрованными текстовыми сообщениями между устройствами без интернета

Level of difficultyMedium
Reading time30 min
Views12K

В современном мире IoT, когда связь в отдаленных районах становится все более актуальной, технология LoRa (Long Range) предоставляет нам возможность создать дальнобойный, надежный, энергоэффективный и зашифрованный канал связи без необходимости иметь какую-либо сетевую инфраструктуру. 

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

Для упрощения и автоматизации процесса обмена сообщениями мы воспользуемся Node-RED. Этот инструмент, помимо реализации основной логики обмена сообщениями, также предоставит графический интерфейс для мессенджера, что сделает процесс более доступным и интуитивно понятным. 

Выглядеть будет просто, потому что воспользуемся всем готовым :)

Свистать всех наверх!
Total votes 31: ↑29 and ↓2+27
Comments36

На что способен мозг студента, познающего компьютерный мир

Reading time7 min
Views24K
Доброго времени суток.

Закончив писать очередной скрипт на Bash, понял, что всё должно быть совершенно иначе, однако всё работало. Хочу вам показать, какие непотребства и костыли написал я, дабы решить задачу, но пока не имея вагона знаний. Иначе говоря, карикатура на программирование.
Читать дальше →
Total votes 37: ↑35 and ↓2+33
Comments30

OpenSSL и Network Security Services (NSS) — две стороны одной медали

Reading time31 min
Views8K
imageО какой медали идет речь в заголовке? Речь идет об инфраструктуре открытых ключей (Public Key Infrastructure — PKI/ИОК) на базе стандартов криптографии с открытым ключом (Public Key Cryptography Standards — PKCS). Инфраструктура открытых ключей включает в себя множество различных объектов и механизмов работы с ними, а также протоколы взаимодействия объектов друг с другом (например, протоколы TLS, OCSP). В число объектов ИОК/PKI входят сертификаты x509 и ключевые пары (приватные и публичные ключи), подписанные и зашифрованные документы (pkcs#7, CMS), защищенные контейнеры для хранения приватных ключей (pkcs#8) и личных сертификатов с ключами (pkcs#12) и т.д. В число механизмов входят не только криптографические функции, которые позволяют шифровать и подписывать документы по различным алгоритмам, но и функции, формирующие конечные объекты ИОК в соответствии со стандартами (сертификаты, запросы, подписанные/зашифрованные документы, пакеты протоколов и т.д. и т.п.). Да, и как не вспомнить центральный объект ИОК/PKI — Удостоверяющий Центр (УЦ).
Читать дальше →
Total votes 8: ↑6 and ↓2+4
Comments12

Криптография с открытым ключом: ключи RSA

Level of difficultyMedium
Reading time23 min
Views11K

Уверен, что вы хотя бы раз создавали пару ключей RSA, напримет, потому, что вам нужно было подключиться к GitHub, и вы хотели избежать необходимости вводить свой пароль каждый раз. Вы добросовестно следовали инструкциям по созданию SSH-ключей, и через пару минут всё было готово.

Но знаете ли вы, что именно вы делали? Углублялись ли вы в детали процесса?

Знаете ли вы, что содержится в файле ~/.ssh/id_rsa? Почему ssh создает два файла с разным форматом? Замечали ли вы, что один файл начинается со слов ssh-rsa, а другой — с -----BEGIN RSA PRIVATE KEY----- ? Вы замечали, что иногда в заголовке второго файла отсутствует часть RSA и просто написано BEGIN PRIVATE KEY?

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

Читать далее
Total votes 24: ↑21 and ↓3+18
Comments1

CTFzone write-ups – First comes Forensics

Reading time16 min
Views10K


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

Начнем мы с направления Forensics, и в этой статье представляем вам решения на все таски – от задания на 50 до 1000. Мы знаем, что hackzard опередил нас и уже выложил райтапы к заданиям на 50 и 100, но с более крутыми тасками будет сложнее ;)
Читать дальше →
Total votes 14: ↑12 and ↓2+10
Comments2

Скучно о работе дешифрации NGFW

Reading time11 min
Views11K

Если вы хотите окончательно испортить первое свидание – поговорите с девушкой о дешифрации. Да и в случае последующих – тоже не стОит.

Наша встреча с вами не первая, поэтому в этом тексте речь снова пойдет о дешифрации.
Да, я вновь расскажу об SSL. Могу обрадовать себя и вас тем, что это второй и последний материал на эту тему. Возможно.
Читать дальше →
Total votes 14: ↑13 and ↓1+12
Comments22

Хакерский квест RUVDS подходит к концу, но сразиться за главный приз 142 857 рублей еще не поздно

Reading time18 min
Views4.3K

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

Напомним, с чего всё началось: участники уже раскрыли секрет «Загадочной визитки», которую разобрали до последнего волокна и в результате залетели в блокчейн, а далее и в межпланетную файловую систему с новой порцией загадок.
Читать дальше →
Total votes 26: ↑26 and ↓0+26
Comments0

Структура PKCS7-файла

Reading time11 min
Views85K
Привет!

Довелось мне на днях столкнуться с такой напастью как p7s файл и, как вследствие этого, с Cryptographic Message Syntax (CMS). На хабре нашлась интересная статья описывающая структуру CMS данных, но в ней к сожалению нет примера, позволяющего наглядно продемонстрировать CMS на практике. Я хочу немного дополнить ту статью и разобрать внутренности файла цифровой подписи p7s.
Читать дальше →
Total votes 18: ↑17 and ↓1+16
Comments5

Зачем на камере и видеорегистраторе нужен криптоблок и как его восстановить

Level of difficultyMedium
Reading time11 min
Views8.1K


Представьте себе ситуацию, когда на камере наблюдения испортилась флэшка с прошивкой, и камера нуждается в ремонте. Берём копеечную флэшку и меняем, а прошивку скопируем с точно такой же камеры. Пять минут рекламы, и теперь камера работает и показывает видеопоток вновь. Но есть нюанс. Дело в том, что она теперь является полной копией камеры-донора прошивки. Это и ежу понятно, они же и были одинаковыми — возразите вы. Были одинаковыми всем, кроме таких настроек, как MAC-адрес и идентификатор в облаке, куда камера сливает свой видеопоток. А теперь они совсем близнецы.

Когда распространились камеры с облачным доступом, массово решились такие проблемы, как доступ к камере без внешнего IP-адреса или с динамическим адресом. Теперь стало ненужным использовать проброс портов на роутере, VPN, динамический DNS, требующие целой инфраструктуры для доступа к камере. Запускай себе приложение, и оно получит доступ к видеопотоку или к архиву через облако. Производители камер в то время пробовали различные варианты, которые часто заканчивались печальными результатами, как с камерами Foscam, связанные с тем, что производитель выбрал путь простоты и дешевизны, а пользователи за него проголосовали рублём. Камеры становились легкодоступными, дешёвыми и, в конце концов, собой просто заполонили весь мир, проникнув в магазины, детские сады, зоопарки, аэропорты, бары, подъезды, офисы, входы, выходы, проходы, пароходы и даже в спальни с туалетами. В крупнейшем каталоге камер insecam.org тогда были сотни тысяч камер со всего мира.
Что такое криптоблок в прошивке, зачем он нужен и как его заменить
Total votes 53: ↑53 and ↓0+53
Comments29

MagiKey. Магнитный ключ «на максималках»

Level of difficultyEasy
Reading time9 min
Views14K
Приветствую всех!

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

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



Итак, сегодня поговорим о самой продвинутой реализации устройств данного типа. Узнаем, как оно устроено и как работает, а также сделаем из подручных средств ключи для данного считывателя. Традиционно будет много интересного.
Читать дальше →
Total votes 51: ↑51 and ↓0+51
Comments19

Ломаем модифицированный AES-256

Reading time9 min
Views58K
Недавно в институте я столкнулся с любопытной криптографической задачей, которой хотел бы поделиться с Сообществом. Одним предложением задачу могу обозначить, как "Атака на LSX-шифр, не содержащий нелинейной компоненты, на основе открытых текстов". Так как русскоязычных примеров решения таких учебных «головоломок» встречается немного, а сама задача рекомендована для начинающих свой путь специалистов, я считаю, что такая статья может быть интересна юному криптоаналитику. Пожалуйте под кат.
image

Читать дальше →
Total votes 43: ↑42 and ↓1+41
Comments4

Как устроен AES

Reading time7 min
Views291K

О чём эта статья



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

В этой статье я напишу как устроен алгоритм шифрования AES (которого иногда называют Rijndael) и напишу его на JavaScript. Почему на JavaScript? Чтобы запустить программу на этом языке, нужен только браузер в котором вы читаете эту статью. Чтобы запустить программу, скажем, на C, нужен компилятор и найдётся совсем мало желающих, готовых потратить время на компиляцию кода из какой то статьи. В конце есть ссылка по которой можно скачать архив с html страницей и несколькими js файлами — это пример реализации AES на JavaScript.

Читать дальше →
Total votes 120: ↑115 and ↓5+110
Comments45

Кратко с реализацией о AES 128 ECB

Reading time5 min
Views10K

Если вбить в яндекс 'aes 128 ecb mode', найдутся хорошие статьи ребят на "хабре": раз и два — толковые и одновременно слишком подробные.


Рассказ об алгоритме в картинках находится здесь (который также можно найти по ссылкам в одной из статей ребят выше).


Кратко об алгоритме: 1) создаем объект с 16-байтным state и массивом 16-байтных ключей; 2) пишем примитивы для объекта (они же трансформации); 3) запускаем n раз (где n — кол-во раундов). Все трансформации делаем симметричными — для зашифровки и расшифровки одновременно. Расшифровка в терминах алгоритма — это зашифровка наоборот.


Структура:


using byte_t = unsigned char;
struct aes128 {
  aes128(const std::string& text, const std::string& cipher, bool decrypt = false)
    : state({begin(text), end(text)}), keys({{begin(cipher), end(cipher)}}), decrypt(decrypt) {}
  aes128() = default;
  aes128(const aes128&) = default;

  std::vector<byte_t> state;
  std::vector<std::vector<byte_t>> keys;
  bool decrypt;
}
Читать дальше →
Total votes 24: ↑19 and ↓5+14
Comments8

Компания D-Link по ошибке опубликовала секретные ключи для подписи прошивок

Reading time4 min
Views28K


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

Пользователь под ником bartvbl приобрел камеру видеонаблюдения D-Link DCS-5020L и скачал обновление прошивки. Данный софт выпускается под свободной лицензией GPL, что дает возможность изучения исходного кода. Пользователь изучил код прошивки для своего устройства и обнаружил в нем четыре «зашитых» ключа шифрования для создания подписи. Некоторые файлы прошивки содержали сами ключи для подписи кода, а в некоторых даже были скрипты с необходимыми командами и паролями.
Читать дальше →
Total votes 33: ↑30 and ↓3+27
Comments8

Отголоски волшебства на страже точных наук

Reading time5 min
Views5.9K
image

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

Этим текстом предлагаю разбавить высокий градус серьезности большинства хабропубликаций и, откинувшись в кресле / по пути с работы / учебы, проследить за логикой одной бредовой интересной аналогии, раскрывающей все тайны мироздания (серьезно).
Читать дальше →
Total votes 14: ↑12 and ↓2+10
Comments6

Разбираем x.509 сертификат

Reading time11 min
Views217K

Привет, %username%!

Так уж вышло, что несмотря на относительно неплохое понимание инфраструктуры открытых ключей, содержимое *.crt файлов всегда оставалось для меня полнейшей загадкой.
Нет, не поймите неправильно. Я знаю, что x.509 сертификат содержит информацию о владельце, открытый ключ, сведения об удостоверяющем центре и электронную цифровую подпись. Но при установке очередного сертификата меня всегда мучило любопытство.
Чем отличается идентификатор ключа от отпечатка? Какие данные сертификата подписываются, а какие нет? И что за структура данных позволяет хранить всю эту информацию, сводя избыточность к минимуму.
Но вот наконец-то любопытство перебороло лень и в данном посте я постараюсь описать структуру x.509 сертификатов и ответить на эти и другие вопросы.
Читать дальше →
Total votes 79: ↑75 and ↓4+71
Comments31

Парсинг сайта с помощью Chat GPT: упрощаем создание парсера

Level of difficultyMedium
Reading time127 min
Views7.8K

Тут будет код и непонятные слова (неподготовленным лучше не лезть)

Приветствую всех!

Сегодня мы разберём, как можно использовать Chat GPT для создания парсера сайта.

Будем использовать Python и библиотеку Selenium.

🛑 Отмечу, что данная статья не предназначена для создания универсального инструмента парсинга любого сайта.

Я расскажу, как ускорить процесс создания парсера с помощью Chat GPT.

Углубимся в тему
Total votes 9: ↑2 and ↓7-5
Comments8

Реверс-инжиниринг первых умных часов Seiko UC-2000

Reading time32 min
Views31K


Где-то в конце 1983 — начале 84 года, японская компания Seiko начала продавать первые в истории компьютеризированные часы — Seiko Data-2000 и Seiko UC-2000. Data-2000 имели возможность хранить 2КБ заметок, их нужно было вводить с помощью специальной компактной клавиатуры, которая шла в комплекте. UC-2000, по сути, те же Data-2000 с корпусом другого цвета, но они уже позиционировались как часть Наручной Информационной Системы, которая, среди прочего, включала терминал UC-2200, представляющий из себя компьютер с Z80-совместимым процессором, интерпретатором Бэйсика и термопринтером, но без экрана, в качестве которого использовались часы (как это не странно). Среди прочего, терминал давал возможность загружать на часы приложения со специальных картриджей. Подробнее о линейке ранних умных часов Seiko можно почитать, например, в этой статье. В этом же посте я расскажу, как написал (возможно) первую, за более чем 33 года, программу для этих часов.
Total votes 139: ↑139 and ↓0+139
Comments35
1
23 ...