Обновить
112.12

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

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

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

Правим баг без исходных кодов

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

В предыдущей статье мы разобрали, как реверс-инжиниринг может помочь в получении каких-либо преимуществ перед остальными пользователями. Сегодня мы поговорим ещё об одном применении обратной разработки — исправлении багов в отсутствии исходных кодов приложения. Причин заниматься подобными вещами может быть целое море — разработка программы давным-давно заброшена, а её сорцы автор так и не предоставил общественности / разработка ведётся совершенно в другом русле, и авторам нет никакого дела до возникшего у вас бага / etc, но их объединяет общая цель — исправить сломанный функционал, который постоянно вам досаждает.

Что ж, ближе к делу. Есть такая широко известная в узких кругах программа под названием «Govorilka». Как объясняет её автор, это ничто иное, как «программа для чтения текстов голосом». По сути, так оно и есть. При помощи неё было озвучено множество популярных и не очень видео, рапространившихся по всей сети. Программа имеет консольную версию под названием «Govorilka_cp», которую удобно вызывать из своих собственных приложений, что, собственно, я и сделал в одном из своих проектов.

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

Учитывая, что говорилка не обновлялась уже несколько лет, а сам автор оставил вот такое «послание» на своём сайте

image

, я понял, что надеяться мне не на кого, и решать проблему придётся самому.

Как протекал процесс, и что из этого вышло, читайте под катом (осторожно, много скриншотов).
Читать дальше →

Видео от пользователя: MacOS внутри ReactOS

Время на прочтение1 мин
Количество просмотров26K
image

Под катом спрятано видео, на котором один из пользователей нашего проекта демонстрирует работу приложений для MacOS внутри ReactOS при помощи Mini vMac.
Читать дальше →

Интервью о тестировании + скриншоты приложений, работающих в ReactOS, присланные тестерами

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

Рубрика «без комментариев». Ничего лишнего, просто свежие скриншоты.

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

Trojan-Downloader.Win32.Cabby.cemx — Часть первая — Распаковка

Время на прочтение12 мин
Количество просмотров36K
Привет, Хабр!

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

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

Сразу предупрежу, будет много картинок и листингов дизассемблированного кода.

Готов к конструктивной критике и буду рад вашим советам по оптимизации моих мыслей.

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

С целью понимания причин инцидента рассмотрим именно вектор распространения данного зловреда.
Читать дальше →

Реверс-инжиниринг TL431, крайне распространенной микросхемы, о которой вы и не слышали

Время на прочтение14 мин
Количество просмотров111K
Кен, как и планировал, провёл реверс-инжиниринг микросхемы по фотографиям, сделанным BarsMonster. Барс в статье упомянул своё общение с Кеном, но этой переводимой статьи тогда еще не было.

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


Фото кристалла TL431. Оригинал Zeptobars.
Читать дальше →

Как заработать очки, даже не запуская игру

Время на прочтение10 мин
Количество просмотров37K
image

Как-то вечером, сидя за компьютером, я наткнулся на одну инди-игру под названием «Shoot First» (игру можно скачать абсолютно бесплатно с сайта автора, а за донат любого размера вы получите специальную версию с двумя новыми видами оружия и ещё одним видом уровней). Геймплей её довольно незамысловат — игроку необходимо бегать по этажам в поисках прохода на следующий уровень, при необходимости собирая различные предметы (карты, ключи, etc) и попутно убивая встретившихся на его пути врагов. В общем, этакий action roguelike. Несмотря на кажущуюся простоту, игра меня довольно сильно зацепила, и я потратил не один час, пытаясь добраться как можно дальше и заработать как можно больше очков.

Кстати, об очках. После смерти персонажа и ввода имени игра отображает онлайн-таблицу рекордов:

image

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

Как протекал процесс, и что из этого вышло, читайте под катом (осторожно, много скриншотов).
Читать дальше →

Реверс-инжиниринг целочисленного деления на константу

Время на прочтение2 мин
Количество просмотров19K
Так бывает, что иногда реверсишь код, который занимается какой-то рутиной, не предполагающей каких-то серьезных вычислений и тут внезапно умножение на большую константу (поплачем, что на хабре нет хайлайтера для асма):

mov     edx, [ebp+end_of_buffer]
mov     eax, [ebp+src]
mov     ecx, edx
sub     ecx, eax
mov     edx, 80808081h
mov     eax, ecx
imul    edx
lea     eax, [edx+ecx]
mov     edx, eax
sar     edx, 7
mov     eax, ecx
sar     eax, 1Fh
sub     edx, eax
mov     eax, edx

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

Да какого, блин, хрена, D-Link⁈

Время на прочтение2 мин
Количество просмотров80K
Как уже писал в апдейте к посту про баг в HNAP DIR-890L, его нашли в начале года, в DIR-645, и выпустили патч. Сейчас D-Link выпустил патч и для DIR-890L.
Патчи для DIR-645 и DIR-890L одинаковые, поэтому я буду писать только про DIR-890L.

Хоть в предыдущем посте я рассматривал только выполнение команд, патч указывает на несколько дыр в безопасности, которые появились из-за использования strstr для валидации HNAP-заголовка SOAPAction:
  • Использование неаутентифицированных пользовательских данных в вызове system
  • Использование неаутентифицированных пользовательских данных в вызове sprintf
  • Неаутентифицированные пользователи могут выполнять привилегированные HNAP-запросы (такие, как смена пароля администратора)

Видите, D-Link признала все это в информации об уязвимости, и они ясно представляли все векторы атаки.
Итак, убрали ли они переполнение стека sprintf?

image
sprintf(cmd_buf, “sh %s%s.sh > /dev/console”, “/var/run”, SOAPAction);

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

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

Время на прочтение10 мин
Количество просмотров84K
Обожаю заглядывать за кулисы. Мне интересно, как делаются вещи. Мне кажется, что большинству людей это тоже интересно.

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

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

Многие игры после выпуска исходников были улучшены и дополнены сообществом – я намеренно даю ссылки только на оригинальные исходники. Так что, если вас вдруг интересуют апгрейды – они могут существовать.

Многие игры были рассмотрены на сайте Fabien Sanglard. Если вам интересны подробности их работы, то пожалуйте к нему.

Можно заметить, что многие игры принадлежат id Software/Apogee. Совпадение? Не думаю. id славится открытостью и привычкой выпускать исходники. Старые коммерческие игры уже не имеют ценности и были бы потеряны – не лучше ли, чтобы кто-то учился чему-то полезному на их основе?

Итак, приступим (в хронологическом порядке):
Читать дальше →

Взламываем D-Link DIR-890L

Время на прочтение7 мин
Количество просмотров62K
Последние 6 месяцев, я был жутко занят и не следил за новыми хренями от D-Link. Чтобы немного поразвлечься, я зашел на их сайт, и меня поприветствовал этот кошмар:

Insane router
Самый безумный роутер D-Link DIR-890L за $300

Пожалуй, самым «безумным» в роутере является то, что он работает под управлением все той же забагованной прошивки, которую D-Link ставит в свои роутеры вот уже несколько лет…and the hits just keep on coming.
Читать дальше →

Исследуем результат работы php-транслятора

Время на прочтение17 мин
Количество просмотров25K
Здравствуйте. Думаю, что большинство веб-программистов знает, как работает php-интерпретатор.

Для тех, кто не знает:
Вначале, написанный нами код разбирается лексическим анализатором. Далее, полученные лексемы, передаются в синтаксический анализатор. Если синтаксический анализатор дал добро, то лексемы передаются транслятору, а он, в свою очередь, генерирует так называемые opcodes (operation codes). И только после этого, в дело вступает виртуальная машина PHP (та самая Zend Engine) которая и выполняет наш алгоритм из получившихся opcodes. Opcodes так же называют эдаким php-шным ассемблером.
Данная статья расскажет вам о том, какие opcodes и в каких случаях генерируются. Конечно, рассказать про все opcodes в рамках одной статьи не получится, но в данной статье будет рассмотрен конкретный пример и на его основе мы попытаемся разобраться что к чему у этих opcodes. На мой взгляд, самое главное, что вы узнаете прочитав статью, это то, как на самом деле происходит выполнение ваших исходных текстов и, возможно, это поможет вам в лучшем понимании языка php.

Советую вам налить себе чашечку капучино или просто зеленого чая, т.к. под катом листинги opcodes и php-кода…
Читать дальше →

Доклад Алексея Брагина на Russian Open Source Summit 2015

Время на прочтение2 мин
Количество просмотров3.9K
image16 марта 2015 года в Москве в очередной раз состоялся Russian Open Source Summit.

ROSS 2015 был призван осветить качественно новую роль Open Source как основного движителя развития современных информационных технологий в эпоху облаков, мобильности и социальных сетей. Только идеология Open Source сегодня позволяет реализовать на практике концепцию универсальной технологической платформы, обеспечивающей интероперабельность информационных систем и сервисов различных производителей. В качестве ярких примеров здесь можно привести Open Source проекты облачной операционной платформы OpenStack, программно-определяемых сетей (SDN), контейнерных технологий автоматизации развёртывания и управления приложениями в среде виртуализации (Docker, Rocket и др.).

В рамках мероприятия с докладом об опыте, полученном в процессе разработки ReactOS, выступил координатор проекта Алексей Брагин.
Читать дальше →

Исследование защиты игры Limbo. Кейген

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


Всем привет. Многие знают об этой замечательной игре — LIMBO! Вы даже наверняка покупали ее в Стиме, или качали с торрентов…
Я тоже ее купил когда-то (что и вам советую!), и прошел). Но, как всегда, мне было этого мало, и я, из спортивного интереса, решил изучить ее защиту. Так и появился кейген к игре LIMBO.
Читать дальше →

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

Исследование защиты PVS-Studio

Время на прочтение4 мин
Количество просмотров55K
PVS-Studio

Приветствую! Это мой первый пост на Хабре в принципе, но не первая статья о взломе ПО вообще, поэтому навык писать все с начала и по шагам, для начинающих крякеров, у меня есть. В данной статье я расскажу о том, как был отучен от триальности PVS-Studio.
Читать дальше →

Reverse Engineering ESP8266 — часть 2

Время на прочтение5 мин
Количество просмотров46K
Продолжаем исследование модуля ESP8266. В этот раз рассмотрим процесс загрузки прошивки для дизассемблирования.

Первая часть статьи здесь.


Содержание


  1. Введение
  2. Архитектура ESP8266
    • Карта памяти (адресного пространства)
    • Формат прошивки
    • Процесс запуска
  3. Инструменты
  4. Загрузка прошивки для исследования
  5. Ассемблер Xtensa
    • Регистры
    • Базовые операторы
    • Функции
    • Условные переходы
  6. Заключение
  7. Ссылки

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

Reverse Engineering ESP8266 — часть 1

Время на прочтение5 мин
Количество просмотров70K
Поддавшись общей волне энтузиазма относительно систем «Умный дом», а также имея профильное образование инженера АСУ ТП, с удовольствием занимаюсь данной темой в виде хобби. В этой статье поделюсь с вами своим опытом реверс-инжиниринга популярного модуля ESP8266.


Содержание


  1. Введение
  2. Архитектура ESP8266
  3. Инструменты
  4. Загрузка прошивки для исследования
    • ELF
    • Системная прошивка модуля
    • Пользовательская прошивка
  5. Ассемблер Xtensa
    • Регистры
    • Базовые операторы
    • Функции
    • Условные переходы
  6. Заключение
  7. Ссылки

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

Видео от пользователя: Windows 3.11 внутри ReactOS

Время на прочтение1 мин
Количество просмотров21K
40-летнему юбилею корпорации Microsoft посвящается.



На видео один из пользователей нашего проекта демонстрирует работу Windows 3.11 внутри ReactOS.

Исследование мобильного jar трояна

Время на прочтение2 мин
Количество просмотров16K
Бывает так, что вам приходит смс следующего содержания: «Вам пришло MMS-сообщение, которое можно посмотреть по ссылке: ...» Хотя сейчас мобильные вирусы уже полностью переключились на Android-устройства, все же остались старинные «динозавры», которые до сих пор терроризируют мирных жителей.

В мои руки попал файл «mms5.jar», который был мгновенно детектирован Антивирусов Касперского как «троянская программа Trojan-SMS.J2ME.Smmer.f». Его мы и разберем подробно.
Читать дальше →

DIY управление телевидением Дом.ru с планшета при помощи ардуино

Время на прочтение3 мин
Количество просмотров37K
Пусть описание принципа работы уникального смарт-девайса для упрощения взаимодействия в системе «человек машина» выглядит как реклама таблеток для похудения, но в данном случае это лучший способ объяснить для чего, почему и как собирался данный девайс.

Тему телевидения затрагивать в статье не буду, расскажу только про «гаджетостроение» и разработку интерфейса.
Читать дальше →

Результаты Radare Summer of Code 2014 и организация нового RSoC/GSoC 2015

Время на прочтение4 мин
Количество просмотров4.5K
Во-первых, хочу отчитаться по прошлому RSoC'14, поблагодарить аудиторию хабра за ту помощь, позволившую нам организовать это мероприятие.

Благодаря тому, что не было необходимости следовать правилам Google, мы смогли изменить двух «официальных» участников «на лету». В прошлом году мы выбрали двух официальных участников и 6 «неофициальных» (без денежного вознаграждения). Однако, в процессе продвижения кодинга осталось лишь трое неофициальных участников. Но, так как им успешно удалось завершить свои задания, мы поделили собранные деньги поровну между ними (порядка $700 на человека). Рассмотрим задания подробнее:

Два задания не были выполнены/завершены — это полный перевод всего фреймворка на использование базы данных sdb и доводка до ума webui.

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

Во-первых, это поддержка парсинга сложных структур и отображение их в необходимом формате, с помощью команды pf и парсера описания данных на языке Си (struct/union, etc).

Во-вторых, это поддержка загрузки и использования сигнатур формата FLIRT (из IDA Pro), а также интеграция с Yara. Благодаря тому, что это задание было успешно выполнено, radare2 может быть использован для анализа malware с использованием существующих баз сигнатур, накопленных за годы работы с IDA Pro и Yara. Код интеграции с Yara вынесен в отдельный репозиторий.

Ну и последнее успешно выполненное задание — это поддержка PDB. Основное отличие от многих отладчиков и дизассемблеров (кроме IDA Pro) — это парсинг формата самостоятельно, без использования вызовов системных библиотек Windows.

Кроме того, с прошлого года значительно улучшилась ситуация с документацией: radare.today/radare2-is-documented
Что же ждет нас в этом году?

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