Обновить
128K+

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

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

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

От хаоса к ясности: дедукция против мистики

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

Привет, Хабр!

Сегодня расскажем не столько о решении — оно оказалось простым – сколько   о самом процессе его поиска. Он был настолько увлекательным, что в какой-то момент мы почти уверовали в существование магии. Но мы — инженеры, а поэтому как никто знаем, что чудес не бывает. Поэтому, откинув домыслы и иррациональность, мы шаг за шагом распутывали этот технический узел, докапываясь до первопричины проблемы. Приступим же к нашему расследованию. Приятного чтения!

Читать далее

Фишинг живее всех живых, кейс из личной почты

Время на прочтение2 мин
Охват и читатели17K

Привет, Хабр!

Фишинг, тема стара как мир, но это по-прежнему один из самых популярных и рабочих инструментов хакеров. Эксперты уже отмечают рост фишинговых атак в 2025 году и то, что они становятся всё более изощрёнными.

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

Читать далее

Технический разбор Max: что внутри APK

Уровень сложностиПростой
Время на прочтение2 мин
Охват и читатели428K

Сейчас мессенджер Max «очень классно ловит даже на парковке» 🙃
Стало интересно: а что же за технологии стоят за этим чудом? Скачал APK (весит ~114 MB) и полез внутрь.

Читать далее

Компьютерная томография и секреты процессора 386

Уровень сложностиСредний
Время на прочтение13 мин
Охват и читатели25K

Intel выпустила процессор 386 в 1985 году, он стал первым 32-битным чипом линейки x86. Этот чип упаковывался в керамический квадрат с торчащими снизу 132 позолоченными ножками, которые вставляются в разъём на материнской плате. Хоть эта конструкция может показаться скучной, внутри неё происходит гораздо больше, чем можно было бы ожидать. По моей просьбе компания Lumafield выполнила компьютерную 3D-томографию чипа, обнажившую шесть слоёв сложных соединений, сокрытых внутри керамического корпуса. Более того, оказалось, что в чипе есть почти невидимые металлические проводники, соединённые с боковыми сторонами корпуса (см. показанные выше полосы). Снимок также показал, что у 386 есть две отдельных сети питания и заземления: один для ввода-вывода, второй — для логики процессора.

Читать далее

Как работает схема «1 ₽ за пробный период»

Время на прочтение7 мин
Охват и читатели23K

Привет, Хабр!

А теперь представьте, что с вашей карты пытаются списать деньги 💸, даже если сайт уже не существует…

В этой статье хочу рассказать как я оформил “пробный доступ” за 1 ₽ - а спустя время начались попытки списать по 999 ₽. Рассказываю, как это устроено и что показала проверка открытых источников.

Читать далее

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

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

Вы когда‑нибудь смотрели на.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 мин
Охват и читатели8.6K

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

Погружаемся

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

Уровень сложностиСредний
Время на прочтение4 мин
Охват и читатели6.3K

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

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

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

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

Читать далее

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Исследовать

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Читать далее

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

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

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

CALL more_text

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

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

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

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

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

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

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

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

Читать далее

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

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

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

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

Читать далее

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

Время на прочтение9 мин
Охват и читатели31K

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

Читать далее