All streams
Search
Write a publication
Pull to refresh
481
0
Artyom Skrobov @tyomitch

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

Send message

Реверс-инжиниринг микросхем по фото

Reading time3 min
Views13K
Тем, кто любит гикпорн-фотографии от BarsMonster и его товарищей по цеху, наверняка интересно научиться расшифровывать логическую схему по её фотографии. Например, что делает вот этот кусочек Z80?


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

Каждый транзистор образован поликремниевым проводником, пересекающим область легированного кремния:



По традиции, такие транзисторы называют MOSFET («металл-оксид-полупроводник»), даже когда затвор не металлический, а поликремниевый. Автор вполушутку предположил, что ни один производитель поликремниевых транзисторов не хотел называть их POS.

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

Вот та же самая фотография с размеченными транзисторами и проводниками: (я добавил в авторскую иллюстрацию обозначения соединений между слоями)

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

Сколько инструкций в x86?

Reading time1 min
Views24K
vvvphoenix упомянул в своей позавчерашней статье: «Кстати, я пытался найти график роста числа X86 инструкций по годам (или по поколениям). Пока не смог (может, есть у кого?)»

Я решил, что мне это тоже интересно — да настолько, что не жалко потратить выходной день на сведение en.wikipedia.org/wiki/X86_instruction_listings в одну табличку:



Считались различные мнемоники; например, десятки вариантов MOV считались за одну инструкцию.

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

Рисуем речь: Software Automatic Mouth

Reading time9 min
Views14K
Прошлогоднюю статью «Рисуем звук» я завершил признанием: «А можно ли нарисовать звук с чистого листа, не обводя спектрограмму аудиозаписи? Скажу честно, у меня не полу­чилось.» Но недавно я узнал про S.A.M. — выпущенный в 1982 г. компанией Don’t Ask Software, он стал первой коммерчески успешной программой для синтеза речи на ПК. В середине 2000-х немецкие демосценщики Tobias Korbmacher и Sebastian Macke взяли ассемблерный листинг S.A.M. для Commodore 64 и сконвертировали его в нечитаемый, но работоспособный код на Си; затем в 2014 г. британец Vidar Hokstad постарался привести код на Си в читаемый вид — вручную давая переменным осмыс­ленные названия и заменяя goto на циклы и ветвления; и наконец, в 2017 г. ещё один немец Christian Schiffler переписал код с Си на JavaScript. Испробовать его в действии как «чёрный ящик» можно на discordier.github.io/sam.

По-моему, примитивный синтезатор речи на JavaScript — самый удобный подопытный образец для тех, кто хочет разобраться, как в целом работает синтез речи. Мой форк S.A.M. с существенно почищенным кодом и комментариями доступен на github.com/tyomitch/sam. К сожалению, у предыдущих авторов интерес к S.A.M. успел угаснуть, и им сейчас не до разбора пулл-реквестов в хобби-проект многолетней давности.

S.A.M. состоит из четырёх функциональных компонентов:

  1. Reciter переводит текст на английском в фонемную запись: например, «A LITTLE TOO LOW» (пример из приложенной к S.A.M. демо-программы) превращается в «AH LIHTUL TUW5 LOW».
  2. Parser превращает фонемную запись в фонетическую: из «AH LIHTUL TUW5 LOW» получается "AH, ,L,IH,DX,AX,LX, ,T,*,*,UX,WX, ,L,OW,WX". Для каждого выводимого фона Parser задаёт также длительность и тон.
  3. Renderer строит по фонетической записи массив частот, амплитуд и прочих акустических характеристик;
  4. Последний, безымянный компонент (функция ProcessFrames) превращает массив частот и амплитуд в PCM-поток для аудиовывода.

В этой статье я разберу все четыре компонента по очереди.
Читать дальше →

Как же всё-таки получаются 1024 цвета в CGA? И действительно ли их 1024?

Reading time15 min
Views23K
Запощенный в 2015 г. перевод «Новый графический режим: CGA в 1024 цвета» меня сильно впечатлил, но из него я так и не понял до конца, как этот трюк работает, потому что статья написана профессионалом в области ретро-компьютерной графики, и предполагает, что читатель уже имеет некоторые познания в этой области. Хотя у моего первого компьютера («Поиск» — советский клон IBM PC/XT) и был CGA, но мониторы с композитным входом я не застал, так что мне пришлось гуглить и разбираться, как же композитное видео было устроено. Для тех, кому тоже интересно «нутро» технологий 1981 г., в которых в 2015 г. обнаружились неожиданные недокументированные возможности, я собрал воедино найденный мной материал.

1. Штатные возможности CGA


У обывателя CGA обычно ассоциируется с графикой 320x200 и четырёхцветной палитрой с кислотно-жуткими цветами, как например в играх 1983 г. Alley Cat, J-bird, Lode Runner и Tapper:




Но ограничение 320x200x2bpp накладывается лишь объёмом имеющейся на адаптере видеопамяти (16 Кб), фактически же он способен производить изображение 640x200x4bpp — с пикселями, сильно вытянутыми вертикально.
Читать дальше →

Рисуем звук

Reading time3 min
Views23K
Пять лет назад на Хабре была опубликована статья «Печать и воспроизведение звука на бумаге» — о системе создания и проигрывания спектрограмм. Затем, полтора года назад Meklon опубликовал квест, в котором такая чёрно-белая логарифмическая спектрограмма стала одним из этапов. По авторскому замыслу, её надо было распечатать на принтере, отсканировать смартфоном с приложением-проигрывателем, и воспользоваться таким образом «надиктованным» паролем.


У меня в тот момент не было в досягаемости ни принтера, ни смартфона, так что меня заинтересовали два аспекта задачи:

  1. Как проще всего расшифровать спектрограмму без дополнительных устройств и без дополнительного софта — желательно, прямо в браузере?
  2. Можно ли её расшифровать вообще без софта — «на глаз»?

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

Парадоксы о сжатии данных

Reading time3 min
Views16K
Задача сжатия данных в своей простейшей форме может относиться к числам и их обозначениям. Числа можно обозначать числительными («одиннадцать» для числа 11), математическими выражениями («два в двадцатой» для 1048576), строковыми выражениями («пять девяток» для 99999), именами собственными («число зверя» для 666, «год смерти Тьюринга» для 1954), или произвольными их комбинациями. Годится любое обозначение, по которому собеседник сможет однозначно определить, о каком числе речь. Очевидно, что сообщить собеседнику «факториал восьми» эффективнее, чем эквивалентное обозначение «сорок тысяч триста двадцать». Здесь возникает логичный вопрос: какое обозначение для заданного числа самое короткое?

Философ Бертран Рассел в 1908 опубликовал «парадокс Берри», который затрагивает вопрос обозначений чисел с противоположной стороны: какое самое маленькое число, для обозначения которого недостаточно восьмидесяти букв?
Такое число обязано существовать: из восьмидесяти русских букв и пробелов можно составить всего 3480 обозначений, значит, с использованием восьмидесяти букв можно обозначить не более 3480 чисел. Значит, некое число, не большее чем 3480, обозначить таким образом невозможно.

Значит, этому числу будет соответствовать обозначение «самое маленькое число, для обозначения которого недостаточно восьмидесяти букв», в котором всего 78 букв! С одной стороны, это число обязано существовать; с другой, если это число существует, то его обозначение ему не соответствует. Парадокс!
Читать дальше →

Приключения с ptrace(2)

Reading time5 min
Views7.7K
На Хабре уже писали про перехват системных вызовов с помощью ptrace; Алекса написал про это намного более развёрнутый пост, который я решил перевести.


С чего начать


Общение между отлаживаемой программой и отладчиком происходит при помощи сигналов. Это существенно усложняет и без того непростые вещи; ради развлечения можете прочесть раздел BUGS в man ptrace.

Есть как минимум два разных способа начать отладку:

  1. ptrace(PTRACE_TRACEME, 0, NULL, NULL) сделает родителя текущего процесса отладчиком для него. Никакого содействия от родителя при этом не требуется; man ненавязчиво советует: «A process probably shouldn't make this request if its parent isn't expecting to trace it.» (Где-нибудь ещё в манах вы видели фразу «probably shouldn't»?) Если у текущего процесса уже был отладчик, то вызов не удастся.
  2. ptrace(PTRACE_ATTACH, pid, NULL, NULL) сделает текущий процесс отладчиком для pid. Если у pid уже был отладчик, то вызов не удастся. Отлаживаемому процессу шлётся SIGSTOP, и он не продолжит работу, пока отладчик его не «разморозит».

Эти два метода полностью независимы; можно пользоваться либо одним, либо другим, но нет никакого смысла их сочетать.
Читать дальше →

Головоломка «Test My Patience» от Check Point Security Academy

Reading time4 min
Views8.7K
Я несколько раз упоминал на Хабре программу «Check Point Security Academy»: суть её в том, что фирма Check Point летом объявила конкурс в формате «Capture the Flag», где не важен прошлый опыт участника, а важны только его способности к распутыванию кибер-головоломок. По результатам этого конкурса фирма набрала двадцать участников на трёхмесячный профессиональный курс по кибер-безопасности, и все участники с самого начала курса получают полную зарплату специалиста по КБ, под обязательство отработать в фирме два года после окончания курса.


В соревновании CTF флаг может быть даже картинкой, например такой.

Отбор участников завершился в августе, но сайт конкурса продолжит действовать до следующего лета, и я приглашаю желающих зарегистрироваться и попробовать свои силы ради спортивного интереса. Конкурс состоит из 12 головоломок различной сложности, оцененных от 10 до 150 очков.
Здесь я хочу разобрать головоломку «Test My Patience» из категории «Surprise». Она средней сложности (50 очков), и вот её полный текст:
Hi there,
We found This executable on the local watchmaker's computer.
It is rumored that somehow the watchmaker was the only person who succeeded to crack it.
Think you're as good as the watchmaker?
Note: This file is not malicious in any way
По ссылке — 32-битный бинарник для Windows, на который ругаются некоторые антивирусы, но если его всё же запустить, то выглядит он так:



Внутри бинарник зашифрован; запускаться под отладчиком он отказывается; если к нему к запущенному попытаться подключить отладчик — он моментально завершается. Вероятно, специалисты из Check Point обернули свою головоломку в крипто-пакер, позаимствованный у какой-то малвари.

Как же будем угадывать число, загаданное часовщиком?
Читать дальше →

Laurel/Yanny: аудиоверсия сине-золотого платья

Reading time3 min
Views57K
Три года назад здесь уже обсуждали платье, которое разделило интернет. На днях обнаружилась похожая, ещё более интересная и сложнее объяснимая иллюзия. Какое имя вы слышите на этой аудиозаписи: «Йенни» или «Лорел»?


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

Расшифровка сохранённых паролей в MS SQL Server

Reading time3 min
Views40K
Давным-давно, в далёкой галактике, пред-предыдущий администратор вашего SQL Server задал в нём linked server, используя специально для этой цели созданный аккаунт со сгенерированным паролем. Теперь вам с этим линком нужно что-то сделать, например перенести его на другой SQL Server; но просто так это не сделать, потому что никто не знает пароля от того аккаунта. Знакомая ситуация?

Хотя MSSQL не хранит пароли для своих аккаунтов, а хранит только их хэши, — с linked server-ами так не получится, потому что для успешной аутентикации перед внешним сервером нужно обладать паролем в открытом виде. Пароли для linked server-ов хранятся в зашифрованном виде в таблице master.sys.syslnklgns:



Но не всё так просто.
Читать дальше →

Padding Oracle Attack: криптография по-прежнему пугает

Reading time6 min
Views15K

Эту уязвимость чинят уже пятнадцать лет


В хабрапереводе текста четырёхгодовалой давности «Padding Oracle Attack или почему криптография пугает» была подробно описана атака на режим шифрования CBC. В этом режиме каждый очередной блок открытого текста xor-ится с предыдущим блоком шифротекста: в результате каждый блок шифротекста зависит от каждого блока открытого текста, который был обработан к тому моменту.

Чтобы пропустить исходное сообщение (произвольной длины) через CBC-шифр, к нему дописывается MAC (хеш для проверки целостности, обычно 20-байтный SHA-1) и затем padding, чтобы дополнить открытый текст до целого числа блоков (обычно 16-байтных):


Padding («набивка») состоит из одинаковых байтов, на единицу меньших своей длины: (0) или (1,1) или (2,2,2) или т.п.
Таким образом, получатель шифротекста должен
  1. расшифровать все его блоки;
  2. прочитать последний байт последнего блока, чтобы определить длину набивки и, соответственно, позицию MAC в открытом тексте;
  3. проверить корректность набивки и MAC.

В 2002 г. французский криптограф Серж Воденэ обнаружил в CBC уязвимость к атакам типа «padding oracle»:
Читать дальше →

Попиксельная заливка экрана в Wolfenstein 3D

Reading time4 min
Views42K
В коде id Software порой встречаются бесподобные жемчужины. Самая знаменитая — это, конечно, 0x5f3759df, удостоившаяся даже комикса на xkcd. Здесь же речь пойдёт о заливке экрана: пиксели закрашиваются по одному в случайном порядке, без повторов. Как это сделано?

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

Ваш бренд — на EuroPython 2017

Reading time1 min
Views3.8K
Прошлой осенью я опубликовал здесь свой топик Как устроен парсер Python, и как втрое уменьшить потребление им памяти. Весной я предложил эту тему организаторам EuroPython 2017, и неделю назад я узнал, что мой доклад принят на конференцию.



Мой нынешний работодатель равнодушен к Python и к питоноводам, так что на конференцию я поеду либо как частное лицо, либо как представитель вашей компании. В последнем случае ваш бренд будет у меня в слайдах, на футболке, на крышке ноутбука, и т.д. — где скажете, там и будет. Его увидят примерно полторы тысячи самых хардкорных Python-энтузиастов Европы! Взамен я ожидаю (полного или частичного) покрытия затрат на конференцию (входной билет, авиаперелёт, жильё).

Как устроен парсер Python, и как втрое уменьшить потребление им памяти

Reading time12 min
Views50K
Любой, кто изучал устройство языков программирования, примерно представляет, как они работают: парсер в соответствии с формальной грамматикой ЯП превращает входной текст в некоторое древовидное представление, с которой работают последующие этапы (семантический анализ, различные трансформации, и генерация кода).

КДПВ

В Python всё немного сложнее: парсеров два. Первый парсер руководствуется грамматикой, заданной в файле Grammar/Grammar в виде регулярных выражений (с не совсем обычным синтаксисом). По этой грамматике при помощи Parser/pgen во время компиляции python генерируется целый набор конечных автоматов, распознающих заданные регулярные выражения — по одному КА для каждого нетерминала. Формат получающегося набора КА описан в Include/grammar.h, а сами КА задаются в Python/graminit.c, в виде глобальной структуры _PyParser_Grammar. Терминальные символы определены в Include/token.h, и им соответствуют номера 0..56; номера нетерминалов начинаются с 256.

Проиллюстрировать работу первого парсера проще всего на примере. Пусть у нас есть программа if 42: print("Hello world").
Читать дальше →

Программируем «Мегапроцессор»

Reading time8 min
Views17K
На Geektimes летом была статья про Megaprocessor — процессор из дискретных транзисторов и светодиодов, который весит полтонны и занимает всю гостиную в обычном таунхаусе под Кембриджем. Я решил воспользоваться своей географической близостью к этому мегапроекту, и запрограммировать для него что-нибудь презентабельное — например, спортировать для Megaprocessor мою предыдущую хабрапрограммку «Digital Rain».

Система команд Megaprocessor описана на сайте разработчика.

Большинство команд состоят из одного байта, за которым может следовать непосредственный операнд (один или два байта). Регистров общего назначения всего четыре (R0-R3), при этом они не равноправны: например, для команд доступа к памяти адрес должен быть либо в R2, либо в R3; а операнд — в одном из двух оставшихся регистров.

Программистам, привыкшим к системе команд x86 или ARM, набор команд Megaprocessor покажется крайне бедным: нет ни косвенной адресации «база+смещение», ни непосредственных операндов у арифметических команд (за исключением addq ±1, addq ±2). Зато есть пара неожиданных возможностей: отдельная команда sqrt, и режим .wt для команд сдвига, который заменяет результат суммой выдвинутых битов. Таким образом можно, например, парой команд ld.b r1, #15; lsr.wt r0, r1 вычислить количество единичных битов в r0 (вопрос, столь любимый собеседователями на работу!). Мнемоника ld для команды, загружающей в регистр непосредственное значение (вместо привычной по x86 или ARM мнемоники mov) указывает на способ её выполнения: фактически, с точки зрения процессора, выполняется ld.b r1, (pc++).

Итак, приступим.

Знакомство: BBC micro:bit и mbed OS 5

Reading time4 min
Views12K
Как отмечалось на geektimes, микрокомпьютер BBC micro:bit ещё этой весной начали рассылать британским школьникам, а пару месяцев назад он поступил в свободную продажу по цене от £13 за штуку.

Предположим, micro:bit приобретён; что с ним делать дальше? Я решил сделать из него часы, потому что мои наручные как раз сломались.


Инструкция по использованию micro:bit со старой версией mbed OS есть на сайте Ланкастерского университета; но ARM две недели назад выпустила новую версию mbed OS 5, и с этой новой версией библиотека поддержки microbit-dal «из коробки» не работает.

Насколько я понимаю, даже в самом ARM никто ещё не пытался использовать mbed OS 5 на micro:bit; мне хотелось стать первым.
Читать дальше →

«Digital Rain» для Windows в 314 байтах

Reading time3 min
Views27K
В комментариях к недавнему топику возникло обсуждение: до какого размера можно ужать Windows EXE, печатающий в консоли «Hello, World!» Ответ: 268 байт, меньшие файлы Windows просто отказывается загружать.

Раз для «Hello, World!» предел возможного ужатия уже достигнут, то мне стало интересно, до какой степени удастся ужать программу, делающую хоть что-нибудь более интересное.

Сначала похвастаюсь результатом: моя программа всего на 46 байт больше теоретического минимума!



base64
TVprZXJuZWwzMgAAUEUAAEwBAQC4AwABAPdlEIlFEMN4AA8BCwEFDL0UEEAAjXyNAFfraD
gQAAAzyesoDAAAAAAAQAAAEAAAAAIAAAAAAAACAgoCBAAAAAAAAAAAQAAAAAIAALFQ68AD
AAAAEgEAAAAAAABQABkAABAAAFAAGQADAAAAAAAAAAAAAAAoEQAAKAAAAAAAAAAAAAAA/9
Wr4vvrEQAAMAAAABAAADkBAAABAAAAi/df6wMAAAAzybFQV4sHgPwZdygPttyNHJvB4waN
HItQweAYwegei0RFOIhEMwKIpDPC/v///9WIJDNY/sSA/GR8Av/Vq+LFjUVcUFH/dWhWZI
tBMItAEP9wHP9VWOuiV3JpdGVDb25zb2xlT3V0cHV0QQBsEAAAAAAAAAAAAAACAAAAbBA=

(Если найдётся доброволец захостить эти 314 байт, добавлю сюда ссылку.)


Пояснения

4 лучше чем 3, а 5?

Reading time6 min
Views13K
Пару лет назад я уже предлагал вниманию Хабра серию постов, составленных из сканов моих старых журналов; хотелось бы её продолжить подборкой заметок о приближающемся выпуске Pentium — первого в истории процессора, имевшего не номер, а собственное название. Недавний топик об его двадцатилетии начинался с рассказа: «Он базировался на архитектуре P5 (слово «Pentium» образовано от греческого «penta» — пять)...» — но вовсе не касается вопроса: почему нужно было придумывать изощрённое торговое название?

За год до выпуска нового процессора никто ещё не предполагал, что он выбьется из ставшего привычным числового ряда x86:

КомпьютерПресс 3'92 — А.Борзенко
Интегральная схема микропроцессора i80486 была анонсирована фирмой Intel в 1989 году на выставке Comdex в Чикаго. И хотя, очевидно, нам не долго уже осталось ждать появления нового 586-го микропроцессора, на сегодняшний день одним из самых мощных универсальных микропроцессоров является i80486.



Фирма Intel сообщила, что через ныне существующих в СНГ дистрибьюторов продано вчетверо больше микросхем, чем ожидалось ранее. Фирма будет увеличивать число своих агентов в СНГ и вложит в их обучение и воспитание в этом году около 2 миллионов долларов. Сейчас в московском офисе фирмы работают три человека, скоро их станет около 10.
Дистрибьюторами Intel являются: МП Квазар в Киеве, СП Диалог (Москва), Центр Техно (Москва), СП КАТ (Москва), МП Ком-Плюс (Зеленоград) и МП Невис в Санкт-Петербурге. В ближайшее время появятся еще пять дистрибьюторов. Большинство из них торгует микросхемами Intel только за валюту.
Проведя несколько семинаров по маркетингу для своих советских партнеров, фирма обнаружила, что лучше всего обучаются маркетингу отставные офицеры Советской Армии.
В этом году фирма переведет на русский язык и издаст достаточное количество справочных изданий о своей продукции.
Во всем мире в прошлом году фирма получила 7700 миллионов долларов прибыли.
(Newsbytes News Network, January 30, 1992)



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

Кроме Польши, они забыли Сахалин!‌

Reading time2 min
Views19K
В своём посте пятилетней давности «Они забыли Польшу!» я рассказывал, что в Windows 95 поначалу можно было выбрать часовой пояс и региональные настройки кликом по карте мира, причём выбранный часовой пояс и выбранная страна подсвечивались.



Из-за нестабильности географических границ, от этой идеи пришлось отказаться: карты оставили, но подсветку выбранного региона убрали. Наверное, именно в таком виде — с картами, но без подсветки, как в Win95 OSR2 и в Win98 — эти два аплета «панели управления» запомнились большинству пользователей.



К 1997 г. Польша объединилась с одним из соседних часовых поясов, так что «польский часовой пояс» перестал существовать. Из-за небрежности программистов Windows, не предвидевших, что число часовых поясов на планете со временем может меняться, — с исчезновением польского пояса исчезла и вся Польша с карты.
Вы сами без труда можете заметить это различие на приведённом выше скриншоте: на «карте региональных настроек» Польша есть, а на «карте часовых поясов» Балтийское море «разлилось» и её всю «затопило».
В таком виде — с «затопленной» Польшей — карта часовых поясов просуществовала ещё десять лет, но никто не замечал недостачи. Наконец, в Windows Vista карту часовых поясов удалили окончательно, так и не исправив.

Но это не единственное различие между двумя картами!
Читать дальше →

Рациональные приближения к пи

Reading time1 min
Views10K
Недавний рассказ об античной тригонометрии вдохновил меня на простую визуализацию рациональных приближений к числу :



Красная точка — значение Цзу Чунчжи.

По вертикальной оси — «длина дроби», т.е. логарифм знаменателя.

Information

Rating
5,382-nd
Registered
Activity