Обновить
128K+

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

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

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

Callfuscated — Виртуализация, MBA, opaque predicates и мусорные инструкции в одном задании

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

Подробное решение задания, в котором есть многие техники обфускации. Каждую технику я снял и рассказал как.

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

Читать далее

Вставай, Василий: как мы отобрали у пульта право поднимать гуманоида

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

Может ли робот встать по голосовой команде, если производитель это запретил?

Гуманоид Walker Tienkung поднимается на ноги только с физического пульта: короткое нажатие кнопки будит моторы и проводит самодиагностику, а длинное — ровно секунда удержания — поднимает из нулевой позы в стойку. Мы решили отдать весь этот путь голосу и быстро упёрлись в проблему: наши программные «нажатия» система молча игнорировала, а переход «встать» оказался заблокирован намеренно — команда принималась без ошибки, но робот не реагировал.

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

Читать далее

Что внутри ANE на самом деле, или почему ЫЫ нельзя поручать reverse engineering

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

Нейронке сказали — «разберись как оно работает». Пошевелив гигабайтами матриц, она полезла ковырять список классов в AppleNeuralEngine.framework— и нашла там то, что искала — «40+ private classes, including _ANEInMemoryModel». Код работал. Делал то что от него требовалось — запускал математику на ANE. Но было в этом что‑то… не то.

Читать далее

Автономное ПО для велокомпьютера

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

Несколько лет назад я стал обладателем отличного велокомпьютера CYCPLUS M1. За свою скромную стоимость он предлагал возможность писать GPS трек и подключить кучу датчиков. Велосипедист я со стажем, и у меня еще не стерлись воспоминания как я прикручивал магнитики к спицам и вымерял расстояние до геркона, для того чтобы заработал велокомпьютер, который умел только измерять скорость расстояние. На фоне этих воспоминаний, то что обещал данный прибор выгладило как волшебство.

Читать далее

11 минут у Backblaze, и неделя бездействия у reg.ru: как компании обрубают инфраструктуру трояна в России и за рубежом

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

Привет, хабр. Если вы состоите в более‑менее крупных ТГ сообществах, то наверняка замечали, как время от времени в чатах мелькают боты с предложением установить сомнительный APK. Обычно их мгновенно банит антиспам или админ, и на этом всё заканчивается. Правда, пока сообщение ещё висит, взгляд успевает за него зацепиться, и в голове проскакивает «это очевидно скам, но как оно работает?». У меня эта мысль проскочила в дождливый вечер прошлой пятницы, и вот, неделю спустя, я всё ещё смотрю на четыре домена, куда уходят перехваченные банковские коды, и ожидаю хоть каких‑до действий от уполномоченных компаний, которые были уведомлены об атаке почти неделю назад.

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

Читать далее

«Великое ограбление»: сейф, палочка для суши и девять вольт

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

Привет, Хабр! На связи Иван Глинкин, руководитель отдела аппаратных исследований из команды Бастиона. 

Иногда для вскрытия сейфа не нужны никакие отмычки, болгарки и заклинания вроде «Алохомора» — достаточно деревянной палочки из набора для суши. И это еще не самая опасная уязвимость, найденная нами при тестировании российского «ящика с электронным замком для хранения ценностей». Мы заказали его на синем маркетплейсе почти за шесть тысяч рублей, а потом вскрыли за пару минут. О том, как нам это удалось, читайте под катом.

Читать далее

Нашёл «VPN», который оказался обычным SOCKS5-прокси

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

Недавно я наткнулся на довольно интересный случай. На первый взгляд — обычное VPN-расширение для браузера: список стран, кнопка подключения, бесплатный сервер, платные серверы и подписка. Но мне стало интересно, что именно происходит после нажатия кнопки Connect. Я решил не ограничиваться интерфейсом и полез непосредственно в код расширения. И вот там уже стало интереснее.

Идём дальше

Таймер на 5 минут вместо 10 секунд: как сверка с руководством по эксплуатации нашла отказавшую защиту в чужом коде

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

Стенд работает, а исходников программы ПЛК нет — ни архива, ни резервной копии, ни у эксплуатанта. Есть 4 900 страниц бумаги: распечатка проекта, экспорт экранов, руководство по эксплуатации, сканы схем. Задача — восстановить поведение один в один. Эталоном я сделал руководство, а не распечатку кода, и на этом нашёлся таймер, который держал максимальный ток 5 минут вместо разрешённых 10 секунд. Ниже — как читаются пять тысяч страниц, как выглядит data-driven программа ПЛК (с кусками настоящих файлов) и все 7 расхождений с честной пометкой, чем каждое найдено.

Читать далее

Как я вскрыл протокол робота Eilik и научил его танцевать под Bad Apple

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

Недавно мне подарили робота Eilik от energize lab и я был весьма разочарован тем что от него не оказалось публичной sdk или хоть какой-нибудь возможности писать под него кастомные скрипты. И от сюда начинается мое приключение с реверс инжинирингом.

Само видео с Bad Apple

Читать далее

Скачать базу GetCourse без API? Пожалуйста

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

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

Читать далее

Что ты такое?! Как мы изучали «Жучок» из 90-х для защиты данных

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

В один прекрасный день в ретро-музей «Луноход» в Москве принесли небольшой пакет с интригующим содержимым: залакированная ISA-плата с микросхемами со стертыми номерами, инструкция и дискета с данными. Всё это носило название «Жучок» — программно-аппаратный комплекс для защиты программ от несанкционированного копирования и использования. Привет из тех времен, когда программа могла потребовать от тебя воткнуть в компьютер отдельную железку, чтобы просто запуститься. 

Подобные системы защиты от пиратства встречались нередко. И мы были уверены, что разгадать историю Жучка будет несложно: документация должна была где-то сохраниться, да и люди, заставшие такие устройства в работе, наверняка еще есть. Но Жучок почему-то не спешил находиться ни в интернете, ни в человеческой памяти.

Это статья не только о Жучке, но и о слаженной работе сообщества ретроэнтузиастов из России и Казахстана. Над Жучком работала скромная группа исследователей: хранители Лунохода Techn0maniac и Limows, уже известный вам аппаратный хакер из Бастиона Иван Глинкин, вирусный аналитик Бастиона Дениев Майер, робототехник Cybermonah, а также коллеги-ретроэнтузиасты Romaleksin и S1nka, с которым мы активно расследовали историческую часть.

В материале — как мы вместе собирали историю Жучка по кусочкам.

Читать далее

Разбор PowerShell-цепочки: как vcapcha.ps1 сообщает о запуске, загружает следующий этап и подготавливает систему

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

При анализе очередной цепочки PowerShell мне попался файл vcapcha.ps1. Само имя ничего особо интересного не говорит, поэтому сначала я посмотрел, что происходит непосредственно при запуске. Внутри оказался не какой-то сложный загрузчик с обфускацией, а достаточно прямолинейная цепочка: скрипт сообщает удалённому серверу о своём запуске, минимизирует окно PowerShell, скачивает следующий .ps1, сохраняет его во временный каталог и запускает. Дальше цепочка становится интереснее.

Читать далее

Microsoft Paint и Photos добавляют невидимые водяные знаки даже на локально сгенерированные изображения

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

TL;DR

• Microsoft Paint поддерживает и локальную, и облачную генерацию изображений

• Paint и Photos также имеют в комплекте локальные модели ИИ

• Эти приложения отправляют промпт удалённому серверу для модерации

• Вместе с отмодерированным промптом сервер возвращает GUID

• GUID встраивается в локально сгенерированное изображение в качестве невидимого водяного знака

• Переключаемая в настройках функция видимого водяного знака не управляет этим невидимым водяным знаком

• На PC с Copilot+ генерация изображений выполняется локально, но модерация промптов остаётся удалённой

• Microsoft раскрывает, что Paint добавляет к сгенерированным ИИ изображениям метаданные C2PA

• Сгенерированные ИИ изображения можно сохранять только в форматы, поддерживающие C2PA: PNG, JPEG, GIF и .paint

Читать далее

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

Внутри PROM‑чипа 1970-х, который хранит данные в микроскопических плавких перемычках

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

Как хранили данные в PROM начала 1970-х, когда один бит буквально зависел от состояния микроскопической плавкой перемычки? Кен Ширрифф разобрал MMI 5300 и показал устройство кристалла изнутри: от массива на 1024 бита и схемы адресации до высоковольтного программирования и хитростей, которые использовали для тестирования таких микросхем.

Разобрать PROM

Вгрызаемся в память World of Warcraft: дрифт ценой в 20 гигабайт

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

Разбор одной инженерной задачи: как приложение рядом с игрой читает чат прямо из памяти процесса, почему первый способ это делать сжигал половину ядра и что пришло ему на смену. Тема — память чужого процесса, строка, которая не стоит на месте, и мёртвая копия, неотличимая от живой.

Читать далее

Пачка PDF положила прод. Расследование багов в Go библиотеках

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

Мой сервис обрабатывает большой поток PDF от самых разных генераторов. В начале июня один‑единственный файл уложил его на 30 минут: HPA раздул поды до потолка, и все они наглухо повисли, 100% CPU, обработка стоит, очередь копится, алерты сыпятся пачками. Расследование в трёх актах: ложный подозреваемый, закомментированный panic и санитайзер, не знавший алфавит до конца.

Читать далее

Как я прошил наушники soundcore, портировал на них кастомную прошивку и DOOM. Часть 2

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

Продолжение первой части, в котором я рассказываю, как прошивать наушники на SoC Bestechnic (soundcore, Nothing, CMF) по воздуху, раскрываю секрет загадочного сервиса BESOTA и показываю процесс портирования DOOM на soundcore Life Q35.

Узнать секреты бесоты и демонов...

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

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

У меня в VW Polo завёлся плавающий контакт в проводке парктроника, и я написал свой диагностический клиент — потому что штатный сканер показывает факт, но не момент: пока листаешь меню, обрыв уже прошёл, а руки заняты сканером, хотя должны быть на жгуте.

Дальше выяснилось, что дело не в моём коде и не в машине. Прошивка ELM327 ведёт многокадровый обмен ISO-TP только с одной парой адресов — 0x7E0 и 0x7E8, это блок двигателя, зашитый намертво. Блокам кузовной электроники, которые отвечают с другим смещением, адаптер просто не посылает кадр разрешения на продолжение: блок отдаёт первый кадр и встаёт в ожидание, а на все следующие запросы отвечает «занят».

В статье: разбор ограничения, таблица из четырёх неработающих обходов на AT-командах, случайно полученное доказательство того, что адаптер подменяет кадр, костыль, который всё-таки позволил вытащить коды, и настоящее решение через USB-CAN. Плюс приём, спасший архитектуру: новый способ связи притворяется старым, и остальной код не меняется вовсе.

Правка от 21.08.2026: статья исправлена по замечаниям в комментариях — команды инициализации, байт-заполнитель, границы OBD-II и главное, формулировка «обойти невозможно», которая была сказана слишком широко. Что именно поправлено и по чьему замечанию — в разделе «Обновления». Там же ссылка на версию для Android.

Читать далее

Как устроен современный антивирус: поведенческий анализ, драйверы, архитектура

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

Время, когда антивирусное ПО основывалось лишь на статическом, или сигнатурном, анализе, уже далеко в прошлом. Хотя в 2026 году оба вида анализа по-прежнему используются, они применяются не так активно, как раньше. В далёком прошлом антивирусное ПО могло делать выводы, основываясь лишь на анализе таблицы импорта, что, соответственно, вызывало множество ложных срабатываний. В результате этого появился термин "поведенческий анализ". Его основная идея заключается в том, что антивирусное ПО оценивает не только содержимое конкретного файла, но и действия, которые выполняет запущенный процесс. Система собирает телеметрию: отслеживает создание дочерних процессов, работу с файлами и реестром, загрузку библиотек, сетевую активность, попытки получить доступ к другим процессам и другие события. Каждому наблюдаемому действию или их комбинации может соответствовать определённое правило. Если процесс выполняет операцию, характерную для вредоносного ПО, ему увеличивается условный уровень подозрительности.

Собственно, рассмотрим примитивный пример в контексте поведенческого анализа. В системе появляется новый процесс с именем winloggon.exe - уже здесь внимательный наблюдатель заметит проблему, легитимный процесс называется winlogon.exe, а одна лишняя буква в имени для вируса вполне может оказаться попыткой замаскироваться под системный процесс под невнимательность пользователя. После инициализации наш герой совершает первую ошибку: обращается к реестру и прописывает себя в Run.

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

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

Ошибка третья. После чего в игру вступает антивирусный WFP драйвер - Windows Filtering Platform. Сетевой стек Windows позволяет системе защиты получать информацию о сетевых операциях и принимать решение, разрешать соединение или нет. В результате winloggon.exe, который только что прописал себя в автозагрузку, создал подозрительный файл и теперь пытается установить соединение наружу, оставляет ещё один вполне заметный след.

В результате чего основываясь на сборе телеметрии, начислении баллов, мы получаем не одно определенное событие, а полноценную законченную картину:

Читать далее

Разбор svchost.pyc: что скрывается за обычным Python-файлом

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

Недавно мне попался файл svchost.pyc. Сначала название не вызвало особого интереса — мало ли файлов с похожими именами встречается в системе. Но при ближайшем рассмотрении стало понятно, что к обычному svchost.exe этот файл отношения не имеет.

Передо мной оказался скомпилированный Python-код, внутри которого было довольно много интересного: работа с реестром, COM Hijacking, изменение настроек Windows Defender, отключение AMSI и ETW, внедрение кода в другие процессы и даже попытка сделать собственный процесс критическим для системы. В общем, обычным Python-скриптом это уже не выглядело.

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

Давайте разберёмся