Как стать автором
Поиск
Написать публикацию
Обновить
92.56

Реверс-инжиниринг *

Расковырять и понять как работает

Сначала показывать
Порог рейтинга
Уровень сложности

Как воссоздать код DOS-игры: пошаговое дизассемблирование ретро-игр (часть 2)

Уровень сложностиСложный
Время на прочтение15 мин
Количество просмотров1K

Вы когда‑нибудь смотрели на.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 — интро, погружение

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

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

Погружаемся

Утечка хендлов в IP Helper API: как мы нашли и обошли ещё один баг Windows

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

После статьи о баге в CancelIoEx решил рассказать ещё об одном дефекте в системных компонентах Windows — на этот раз в IP Helper (часть Windows API, отвечающая за работу с сетевой статистикой и таблицами соединений).

Этот API, среди прочего, даёт возможность сопоставлять перехваченные на уровне сети пакеты с локальными процессами. Казалось бы, проверенный механизм, который работает «под капотом» множества утилит и сетевых фильтров. Но в ходе тестирования WireSock Secure Connect в режиме split tunneling по процессам мы наткнулись на утечку, способную за считанные минуты выбить лимит хендлов в системе.

Поводом для расследования стало сообщение в нашей группе поддержки WireSock в Telegram: один из пользователей заметил аномально быстрый рост числа открытых дескрипторов процессов. Проблема стабильно воспроизводилась под нагрузкой и исчезала, если использовать фильтрацию по IP-адресам. Это стало первой зацепкой, которая в итоге вывела нас на баг в реализации IP Helper.

Отдельное спасибо пользователю @dno5iq, который обнаружил проблему, выполнил реверсинг GetOwnerModuleFromPidAndInfo и помог подтвердить наличие дефекта в её реализации.

Читать далее

Впадаю в детство с ZX Spectrum

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

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

Наливаем горячего и погружаемся

(Не)случайные числа в VBA Excel Ч. 2

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

Вторая часть из моего цикла исследований, посвященного генерации псевдослучайных чисел в скриптовом языке VBA, используемого в офисных приложениях от Microsoft.

Читать далее!

Как воссоздать код DOS-игры: пошаговое дизассемблирование ретро-игр

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

Устаревшие технологии не исчезают. Они просто уходят в подполье: в архивы, на дискеты, в память тех, кто помнит, как это было. DOS-игры не просто программы. Это произведения инженерного искусства, созданные в эпоху, когда каждый байт имел значение, а каждый такт процессора, вес. Они работали на железе, которое сегодня кажется примитивным, но при этом умели то, что многим современным системам не под силу: дышать.

Моя первая игра была на дискете. Она называлась Syndicate (1993, Bullfrog Productions), и я не понимал, как она работает. Я видел, как агенты стреляют, как взрываются здания, как звучит саундтрек, но не имел ни малейшего представления, что за этим стоит.

Я знал C. Я знал, что такое переменные, циклы, указатели. Но я не мог объяснить, как в игре реализован путь юнита, как обрабатывается урон, как генерируется уровень. Тогда я не понимал кода, но код уже управлял мной.

Спустя годы я вернулся к этим играм не как игрок, а как исследователь. И понял: они — лучшая школа программирования, которую только можно себе представить.

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

DOS-игры - другое дело: нет виртуальных машин; нет сборщиков мусора; нет драйверов. Есть только процессор, память и код, написанный на C/C++ или ассемблере. Это делает их идеальной школой для изучения реального программирования.

Дизассемблирование таких игр — это не про взлом. Это археология программирования: вы не ломаете систему, а восстанавливаете её логику по обломкам машинного кода, как археолог, собирающий мозаику из черепков.

Исследовать

Домофон Лидер-М. Как скрестить трубку с ключом и всем проиграть

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

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

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

В конце девяностых появилась ещё одна схема, использовавшаяся в малораспространённых питерских домофонах. Чем она была примечательна и почему она так и не получила распространения? Сейчас и узнаем.

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

(Не)случайные числа в VBA Excel Ч. 1

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

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

Погрузиться в мир псевдослучайных чисел!

Занимательная некромантия 01H: ломаем программу под MS-DOS

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

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

Дизассемблируем 16-битную программу: InDuLgEo V3-B горит пламенем на экране, печатает текст и трезвонит, как старый телефон.

Вперед к 16 битам

Как Go зависает на Windows в CancelIoEx: история одного бага

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

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

Баг до сих пор остаётся актуальным (issue на GitHub), хотя есть основания надеяться, что он будет исправлен в следующем релизе Go.

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

Читать далее

Как мыслит дизассемблер: внутренняя логика decompiler-инструментов на примере Ghidra и RetDec

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

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

CALL more_text

Оживляем дисплей из кабины лифта

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

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

И вот однажды мне стало интересно: а как вообще они работают и можно ли запустить их самому? Как оказалось, то, что я представлял себе небольшим опытом буквально на пару часов, на деле оказалось целым приключением...

Двадцать пятый этаж

Прыгаем на «батуте в космос», а приземляемся в XVIII веке. История одной пружины

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

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

Читать далее

Ближайшие события

Geely и ECARX, что с вами не так?

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

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

Эта статья обещает быть длинной с вырезками кода из JADX и не только, добро пожаловать под кат.

Читать далее

Получаем root через iptables

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

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

Читать далее

Novomatic Coolfire. Самый навороченный игровой автомат двухтысячных

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

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

Пару лет назад я уже рассказывал про игровые автоматы. И вот сейчас ко мне в руки попало довольно интересное железо — Novomatic Coolair, игровая платформа от одного из самых продвинутых производителей такого оборудования. Сегодня мы узнаем, как были устроены «топовые» игровые автоматы и как заставить работать начинку от них. Заодно соберём своего «механического гангстера», выиграем первый миллион и тут же его проиграем. Как водится, будет много интересного.

Congratulations! Jackpot won!

Моддим Wwise-озвучку God of War. Часть I — чебурашимся в файлах

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

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

Читать далее

Обзор патентов Tesla Motors, Inc. Часть 4

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

В заключительной статье будут рассмотрены следующие патенты компании Tesla Motors:

1. Быстрый заряд при низкой температуре (20150077057);

2. Технология сборки аккумуляторной батареи (20150111082);

3. Ячейка с высокоэффективной вентиляцией (20160104875).

Завершить ознакомление

Мета-ориентирование, баланс между классическим документированием и автодокументированием

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

Добрый день! Меня зовут Воронин Николай, я занимаюсь автоматизацией систем отчётности и анализа в ПГК Диджитал.

Моя статья является структурированием личного опыта, полученного в конкретных условиях, он не претендует на статус best‑practice, допускает ситуации, в которых могут существовать более эффективные решения или проблема не стоит в целом.

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

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

Читать далее

Яндекс.Полуразврат или при чём тут Crypt?

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

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

Читать далее
1
23 ...

Вклад авторов