Вы когда‑нибудь смотрели на.EXE‑файл своей любимой DOS‑игры и думали: «Что там внутри? Можно ли это понять без докторской по ассемблеру?» Эта не просто очередной обзор регистров. Это второй шаг в глубокое погружение туда, где байты начинают «говорить». Мы начинаем с тех, кто дал нам язык: с Рэя Доббса, чьи книги «Programming in the MS‑DOS Environment» и «Advanced MS‑DOS Programming» были библией поколения, с Рэндэлла Хайды, чья «The Art of Assembly Language» научила мыслить на языке машины, и с Ральфа Броуна, чей «Interrupt List» стал первым справочником, в котором каждое int 21h перестаёт быть чёрным ящиком и приобретает конкретный смысл. Вы узнаете, что AX, CX, DS:DX и EFLAGS — это не раздельные элементы. Вы поймёте, как они связаны, как передаются данные, как принимаются решения, как программа взаимодействует с системой. Как прерывания становятся точками соприкосновения с системой и как по ним можно восстановить логику программы. Мы начинаем движение от байтов к смыслообразующему коду. Готовы сделать следующий шаг?

Реверс-инжиниринг *
Расковырять и понять как работает
Новости
Oberon 69 — интро, погружение

Данная статья, является логичным продолжением предыдущей, в которой я описал свою идею, мотивацию и начало процесса вхождения в увлекательный мир 8bit. Эта статья будет короткой, кратко опишу процесс разгребания вступительного мультика с целью идентификации необходимых для перевода ресурсов. Ресурсов раз два и три, но тем не менее, начало есть начало.
Утечка хендлов в IP Helper API: как мы нашли и обошли ещё один баг Windows

После статьи о баге в CancelIoEx решил рассказать ещё об одном дефекте в системных компонентах Windows — на этот раз в IP Helper (часть Windows API, отвечающая за работу с сетевой статистикой и таблицами соединений).
Этот API, среди прочего, даёт возможность сопоставлять перехваченные на уровне сети пакеты с локальными процессами. Казалось бы, проверенный механизм, который работает «под капотом» множества утилит и сетевых фильтров. Но в ходе тестирования WireSock Secure Connect в режиме split tunneling по процессам мы наткнулись на утечку, способную за считанные минуты выбить лимит хендлов в системе.
Поводом для расследования стало сообщение в нашей группе поддержки WireSock в Telegram: один из пользователей заметил аномально быстрый рост числа открытых дескрипторов процессов. Проблема стабильно воспроизводилась под нагрузкой и исчезала, если использовать фильтрацию по IP-адресам. Это стало первой зацепкой, которая в итоге вывела нас на баг в реализации IP Helper.
Отдельное спасибо пользователю @dno5iq, который обнаружил проблему, выполнил реверсинг GetOwnerModuleFromPidAndInfo
и помог подтвердить наличие дефекта в её реализации.
Впадаю в детство с ZX Spectrum

Обычный, пятничный, вечер... Сижу, ни кого не трогаю (с) смотрю ютюбчик, отдыхаю... Попадаю на просмотр прохождения игры Oberon 69, в процессе рассказа об игре, выясняется, что на Spectrum она была только на Испанском и только на кассете, была дискетная версия от Max Iwamoto, полу англифицированная... И такА вдруг тоска ностальгия меня взяла и переживание за несправедливость... Решаю, что раз никто, тогда Я! Будем а) дискетизировать, б) англифицировать, в) русифицировать.
(Не)случайные числа в VBA Excel Ч. 2

Вторая часть из моего цикла исследований, посвященного генерации псевдослучайных чисел в скриптовом языке VBA, используемого в офисных приложениях от Microsoft.
Как воссоздать код DOS-игры: пошаговое дизассемблирование ретро-игр
Устаревшие технологии не исчезают. Они просто уходят в подполье: в архивы, на дискеты, в память тех, кто помнит, как это было. DOS-игры не просто программы. Это произведения инженерного искусства, созданные в эпоху, когда каждый байт имел значение, а каждый такт процессора, вес. Они работали на железе, которое сегодня кажется примитивным, но при этом умели то, что многим современным системам не под силу: дышать.
Моя первая игра была на дискете. Она называлась Syndicate (1993, Bullfrog Productions), и я не понимал, как она работает. Я видел, как агенты стреляют, как взрываются здания, как звучит саундтрек, но не имел ни малейшего представления, что за этим стоит.
Я знал C. Я знал, что такое переменные, циклы, указатели. Но я не мог объяснить, как в игре реализован путь юнита, как обрабатывается урон, как генерируется уровень. Тогда я не понимал кода, но код уже управлял мной.
Спустя годы я вернулся к этим играм не как игрок, а как исследователь. И понял: они — лучшая школа программирования, которую только можно себе представить.
Современные игры скрывают свою архитектуру за слоями абстракций: виртуальные машины, движки, фреймворки. Чтобы понять, как они работают, нужно разобраться в десятках технологий.
DOS-игры - другое дело: нет виртуальных машин; нет сборщиков мусора; нет драйверов. Есть только процессор, память и код, написанный на C/C++ или ассемблере. Это делает их идеальной школой для изучения реального программирования.
Дизассемблирование таких игр — это не про взлом. Это археология программирования: вы не ломаете систему, а восстанавливаете её логику по обломкам машинного кода, как археолог, собирающий мозаику из черепков.
Домофон Лидер-М. Как скрестить трубку с ключом и всем проиграть

Приветствую всех!
Когда-то я уже рассказывал про цифровые домофоны и про то, как они работают. Но, как оказалось, их система с перемычками была далеко не единственной.
В конце девяностых появилась ещё одна схема, использовавшаяся в малораспространённых питерских домофонах. Чем она была примечательна и почему она так и не получила распространения? Сейчас и узнаем.
(Не)случайные числа в VBA Excel Ч. 1

Первая часть из моего цикла исследований, посвященного генерации псевдослучайных чисел в скриптовом языке VBA, используемого в офисных приложениях от Microsoft.
Занимательная некромантия 01H: ломаем программу под MS-DOS

Давным-давно, когда F11
и F12
еще не придумали, F1
-F10
располагались слева, Ctrl
жил на месте CapsLock
, а IBM продавала компьютеры с гарантией на 90 дней, владельцы компьютеров работали в MS-DOS. Процессор еще не знал, что такое защищенный режим, память не делилась на области пользователя и ядра, виртуальной памяти не было, как не было и многозадачности. MS-DOS программа на счет "раз" нарушала работу ядра и компьютер приходилось перезагружать. Программы скромно умещались в 64 Кб, а, если превышали это ограничение, жизнь их становилась труднее.
Дизассемблируем 16-битную программу: InDuLgEo V3-B горит пламенем на экране, печатает текст и трезвонит, как старый телефон.
Как Go зависает на Windows в CancelIoEx: история одного бага

Я не считаю себя специалистом по Go и лишь изредка обращался к этому языку, но хочу поделиться историей об одном баге на стыке Go и ядра Windows, с которым мне «посчастливилось» столкнуться.
Баг до сих пор остаётся актуальным (issue на GitHub), хотя есть основания надеяться, что он будет исправлен в следующем релизе Go.
Тем не менее, если звёзды сойдутся неудачно и ваша программа на Go внезапно зависнет у клиента в вызове CancelIoEx
, а воспроизвести и проанализировать проблему не удастся, то, надеюсь, приведённый ниже материал поможет понять её причины и попробовать обойти проблему.
Как мыслит дизассемблер: внутренняя логика decompiler-инструментов на примере Ghidra и RetDec

Декомпиляция — это не магия, а очень упрямый, скрупулёзный и грязноватый процесс, где каждый байт может оказаться фатальным. В этой статье я разложу по винтикам, как мыслят современные декомпиляторы: как они восстанавливают структуру кода, зачем строят SSA, почему не верят ни одному call’у на слово, и как Ghidra и RetDec реализуют свои механизмы под капотом. Это не глянцевый обзор, а техразбор, вплоть до IR, реконструкции управляющего графа и попытки угадать типы переменных там, где они уже испарились. Будет сложно, но весело.
Оживляем дисплей из кабины лифта

Приветствую всех! Уверен, каждый, кто катался на новом лифте, видел подобные штуки. Всё чаще такие экраны ставят взамен привычных светодиодных или сегментных ЖК-индикаторов.
И вот однажды мне стало интересно: а как вообще они работают и можно ли запустить их самому? Как оказалось, то, что я представлял себе небольшим опытом буквально на пару часов, на деле оказалось целым приключением...
Прыгаем на «батуте в космос», а приземляемся в XVIII веке. История одной пружины

Всем привет! В прошлый раз рассказывал про нашу разработку средств выведения без участия Роскосомоса и упоминал об ответвлении исследований в бытовой сегмент. Сегодня речь пойдет об одном из отпочковавшихся изделий - простейшем редукторе. Его история могла бы быть довольно простой, если бы не обещанная в заголовке пружина, имеющая интересную знакопеременную кривизну, и уходящая корнями в XVIII век.
Ближайшие события
Geely и ECARX, что с вами не так?

Периодически читая Хабр, я еще не находил статей, описывающих внутренний мир штатных головных устройств (далее — ГУ) на базе Android, хотя я уверен, что не только мне было бы интересно, как там всё устроено и работает. Речь пойдет про одни из самых популярных авто на нашем рынке: Geely Coolray и частично Geely Tugella.
Эта статья обещает быть длинной с вырезками кода из JADX и не только, добро пожаловать под кат.
Получаем root через iptables

Полагаю, что большинство читателей знают, о том, что команда sudo может быть использована для выполнения других команд с правами другого пользователя, которым обычно является root.
Novomatic Coolfire. Самый навороченный игровой автомат двухтысячных

Приветствую всех!
Пару лет назад я уже рассказывал про игровые автоматы. И вот сейчас ко мне в руки попало довольно интересное железо — Novomatic Coolair, игровая платформа от одного из самых продвинутых производителей такого оборудования. Сегодня мы узнаем, как были устроены «топовые» игровые автоматы и как заставить работать начинку от них. Заодно соберём своего «механического гангстера», выиграем первый миллион и тут же его проиграем. Как водится, будет много интересного.
Моддим Wwise-озвучку God of War. Часть I — чебурашимся в файлах

Знаете, случаются в жизни иногда такие ситуации, когда человеку внезапно как вдарит что-нибудь в голову, увесистое такое, и ему захочется сотворить какую-нибудь такую несусветную чушь, какой заниматься никому в здравом уме и в голову не придет. Вот так и я решил раскопать звуковую подсистему God of war 2018 — с удивлением обнаружив, что стоящей информации по этой теме не так уж и много.
Обзор патентов Tesla Motors, Inc. Часть 4

В заключительной статье будут рассмотрены следующие патенты компании Tesla Motors:
1. Быстрый заряд при низкой температуре (20150077057);
2. Технология сборки аккумуляторной батареи (20150111082);
3. Ячейка с высокоэффективной вентиляцией (20160104875).
Мета-ориентирование, баланс между классическим документированием и автодокументированием

Добрый день! Меня зовут Воронин Николай, я занимаюсь автоматизацией систем отчётности и анализа в ПГК Диджитал.
Моя статья является структурированием личного опыта, полученного в конкретных условиях, он не претендует на статус best‑practice, допускает ситуации, в которых могут существовать более эффективные решения или проблема не стоит в целом.
Мета‑ориентирование — это общее название, в рамках статьи, для совокупности навыков и подходов, облегчающих понимание частных алгоритмов и потоков данных в большой системе со сложными связями между множеством объектов.
В моём случае речь пойдёт о комплексе нескольких BI систем, существующих параллельно, но сложности вполне могут возникать и в рамках одной, достаточно массивной системы отчётности.
Яндекс.Полуразврат или при чём тут Crypt?

Яндекс выпустил новую модель для Шедеврума, которая попыталась прикрыть уязвимости, которые эксплуатировались для создания «небезопасного контента» категории 18+. Тем не менее, не всё так радужно и с «детским» режимом они очень торопятся. Некоторые уязвимости в промпте остались, а некоторые добавились. Но самое интересное – попытка спастись от «небезопасного контента» путём целенаправленной порчи датасета. Обо всём этом подробно в тексте.