Обновить
128K+

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

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

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

Как мы (почти) победили DirCrypt

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


Перевод статьи от компании Check Point’s Malware Research Team.

DirCrypt — один из самых злостных видов вымогающей деньги малвари. Она не просто зашифровывает все найденные пользовательские файлы, требуя выкуп за их расшифровку, но и остается в системе, подхватывая и зашифровывая сохраняемые пользователем файлы на лету. После ее появления работа на компьютере превращается в мучение.

Жертвам подобных вредоносных программ обычно рекомендуют восстановить файлы из раннего бэкапа. Но если такого бэкапа нет, перед нами остается трудный выбор — смириться с потерей данных или заплатить злоумышленнику. Однако, нам (Check Point’s Malware Research Team) удалось найти способ в случае DirCrypt восстановить почти все данные, воспользовавшись его слабыми сторонами в реализации шифрования.
Читать дальше →

Отключение ASLR при отладке third-party приложения под iOS

Время на прочтение2 мин
Охват и читатели4.4K
В этой статье дается простая короткая инструкция как пропатчить third-party приложение под iOS что бы отключить ASLR при отладке. Предполагается что у читателя в наличии:

  1. iOS 7.0-7.0.4 устройство с evasi0n jailbreak и компьютер с Mac OS X 10.9.4, установленным XCode 5.1.1 и МаchOView 2.4 (скорее всего для других версий тоже будет работать, но я не пробовал)
  2. некоторый опыт в отладке third-party приложения для iOS, ну и желательно знать что такое ASLR и понимать зачем его отключать

Что ж, приступим.
Читать дальше →

Реверс-инжиниринг и патч игры на Unity3d

Время на прочтение3 мин
Охват и читатели22K
Статья ориентирована на аудиторию, не имеющую какого-либо опыта. В ней не содержится описание каких-либо взломов и «плохих» патчей.

Предисловие


Однажды мне в руки попалась игра Unturned, построенная на движке Unity3d. Позже выяснилось, что она не лишена недостатков. Она находится в альфа версии, так что сервер даже не оповещает игроков о убийстве другого персонажа, что было не удобно в боях PvP. До этого случая у меня не было опыта работы с cil и реверс-инжинирингом c# приложений, тем более Unity.
Читать дальше →

McSema — декомпилятор кода в LLVM

Время на прочтение1 мин
Охват и читатели8.4K
Ребята, которые выступали на ReCON 2014, опубликовали свой инструмент McSema (MC-Semantics) для восстановления x86-бинарников Windows в LLVM-код. Этот инструмент разделен на несколько подпроектов:
  • Восстановление порядка выполнения
  • Семантика инструкций
  • Парсинг бинарных файлов
  • Семантика тестирования

На данный момент, программа поддерживает трансляцию x86-семантики с целочисленной арифметикой, арифметикой с плавающей точкой и векторными операциями.

Для чего это нужно? Этот проект, в теории, позволит делать сумасшедшие порты бо́льшему количеству людей и в более короткие сроки, позволит более-менее избавляться от обфускации malware путем ее перекомпиляции с оптимизациями.
Проект финансируется DARPA.
Читать дальше →

Реверс-инжиниринг прошивки китайского Android-планшета

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


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

Альтернативные методы трассировки приложений

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

Трассировка используется во многих видах ПО: в эмуляторах, динамических распаковщиках, фаззерах. Традиционные трейсеры работают по одному из четырех принципов: эмуляция набора инструкций (Bochs), бинарная трансляция (QEMU), патчинг бинарных файлы для изменения потока управления (Pin), либо работа через отладчик (PaiMei, основанный на IDA). Но сейчас речь пойдет о более интересных подходах.

Зачем отслеживать?


Задачи, которые решают с помощью трассировки можно условно разделить на три группы в зависимости от того, что именно отслеживается: выполнение программы (поток управления), поток данных или взаимодействие с ОС. Давай поговорим о каждом подробнее...
Читать дальше →

Разлочиваем велокомпьютер VDO A4 до A8

Время на прочтение3 мин
Охват и читатели68K
image

Как заплатить 600 рублей и получить функциональности на 1200? Наверное всем известен способ «апгрейда» велокомпьютера — ставим 2 магнитика на колесо и скорость удваивается, но мы пойдём другим путём. Увеличим количество функций велокомпьютера вдвое одним движением отвёртки.
Читать дальше →

Как запатчить 11 разных прошивок и не сойти с ума от разнообразия

Время на прочтение12 мин
Охват и читатели11K
Если какая-либо операция превращается в рутину — автоматизируй её. Даже если времени потратишь больше — зато ты занимался не рутиной, а интересным делом. Именно под этой вывеской вместо того, чтобы просто запатчить новые 11 версий rtsp_streamer'а для камер от TopSee, решил нарисовать автопатчер. Идеальным языком для любых наколенных изделий я считаю питон — достаточно лаконично, достаточно жестко по читабельности (хотя я всё равно умудряюсь сделать его не читаемым). В общем, сейчас я расскажу, как с помощью палки и верёвки за один вечер научиться рисовать автопатчеры.
Читать дальше →

Внедрение кода с пользой

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


В статье описан способ построения моста между неуправляемым и управляемым кодом на примере математического пакета Mathcad. На картинке показан пример, как бурундук Тот собирается обрабатывать своё изображение средствами математического пакета. Для этого он «использовал» пользовательскую функцию, написанную на VB.Net, в которой реализована возможность подключения к веб-камере и создания снимка. Результат работы функции сразу доступен в рабочем документе.
Читать дальше →

Siemens SGold: I/O сниффер

Время на прочтение35 мин
Охват и читатели14K
Сниффер — специальная программа для анализа и перехвата сетевого трафика, передачи данных через интерфейсы
и многого другого. В данном случае мы будем мониторить операции (чтение и запись) с портами ввода-вывода
на примере телефона линейки Siemens SGold и я постараюсь объяснить, как это всё работает.

image

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

Атака на чёрный ящик. Реверс-инжиниринг виртуализированного и мутированного кода

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


Защита собственного программного обеспечения от реверс инжиниринга достаточно старая проблема, в своё время терзавшая сердца многих shareware разработчиков и не только. Обычно для таких целей применяют протектор, но насколько бы ни был крутой протектор, всегда найдутся люди которые его распилят и взломают. Однако последнее время протекторы стали применять технологии видоизменения кода(мутацию и виртуализацию), которые позволяют из исходного алгоритма сделать кашу, внешне напоминающую 'чёрный ящик'. И действительно встречаются люди, уверенные в том, что виртуализация и мутация исполняемого кода современными коммерческими протекторами является некой панацеей. Понятное дело что любой безопасник скорее ухмыльнётся и не согласится с таким утверждением, ведь люди знающие горькую цену безопасности любые намёки на идеальную защиту скорее всего воспримут как миф и маркетинговую сказку. В этой статье я расскажу о собственном опыте и виденье исследования чёрного ящика коммерческих протекторов и возможных атаках на него. Надеюсь понимание недостатков таких технологий, поможет вам более разумно и эффективно применять их на практике или не применять вообще.
Читать дальше →

Написание бота для Stronghold Kingdoms

Время на прочтение11 мин
Охват и читатели46K
История написания бота для Stronghold Kingdoms

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

Да, как Вы могли заметить, C# не спроста – игра написана именно на нем, с использованием .net 2.0, что в последствии вставило мне некоторые палки в колеса.


Изначально я думал написать сокетного бота, который бы лишь эмулировал сетевой протокол (который никак не шифруется), а имея «исходные коды» (результат декомпиляции il-кода) легко восстанавливается в стороннем приложении.

Но мне это показалось нудным и муторным, ведь зачем городить велосипед, если имеются те самые «исходные коды».

Вооружившись Reflector’ом я начал разбираться с точкой входа игры (код которой вообще никак не обфусцирован более трех лет, диву даюсь разработчикам) – ничего особенного.
Читать дальше →

Steam Files. Часть 1 — GCF/NCF

Время на прочтение21 мин
Охват и читатели22K
Steam LogoКак и обещал в предыдущей статье, начинаю публиковать статьи о той части инфраструктуры Steam, которую смогло открыть Anti-Steam сообщество путём реверс-инжиниринга и продолжительных мозговых штурмов.

Файлы формата GCF до недавнего времени являлись стандартом для всех игр, выпускаемых компанией VALVE, а NCF — для всех остальных. Сами по себе эти файлы представляют образ файловой системы с несколькими уровнями защиты. Отличие NCF от GCF заключается в том, что первые содержат только заголовки, а файлы, принадлежащие им, расположены в отдельном каталоге (<каталог Steam>/SteamApps/common/<имя игры>). Поэтому описывать буду GCF, а все особенности NCF приведу после.

В данной статье я подробно разберу структуру данных файлов и работу с ними на примере своей библиотеки (ссылка на неё — в конце статьи). Начало будет достаточно скучным — описание структур и назначения их полей. Самое «вкусное» будет после них…

Весь код, приведенный здесь, является плодом реверс-инжиниринга библиотек Steam. Большая часть информации о формате файлов была почерпнута из открытых источников, я же немного её дополнил и значительно оптимизировал работу с файлами кеша (даже по сравнению с самой популярной на то время библиотекой HLLIB).
Читать дальше →

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

Взламываем D-Link DSP-W215 Smart Plug: Опять, снова, еще раз

Время на прочтение4 мин
Охват и читатели25K
image

В предыдущих сериях:
  1. Взламываем D-Link DSP-W215 Smart Plug
  2. Взламываем D-Link DSP-W215 Smart Plug. Снова
  3. Взламываем D-Link DSP-W215 Smart Plug. Снова и опять


До сих пор, все найденные в DSP-W215 уязвимости могли быть выполнены только из LAN, ну, если вы не глупец и не открыли доступ к Smart Plug из интернета.
Типичным способом атаки устройств со встроенным веб-сервером, доступным только из внутренней сети, типа того, что у DSP-W215 — через CSRF. Проблема этого метода в том, что любой веб-браузер будет кодировать (urlencode) передаваемые данные, например, адрес возврата, но до этого момента мы использовали уязвимости, которые не декодируют (urldecode) наши данные (уязвимость в функции replace_special_char, которую мы эксплуатировали в предыдущей статье, декодирует только ограниченный набор ASCII-символов).

Бинарный файл my_cgi.cgi, который является основной уязвимой целью, содержит функцию-декодировщик «decode», которая декодирует POST-данные. Этой функции передается два аргумента: указатель на закодированные данные и указатель на буфер, где хранятся раскодированные данные:
void decode(char *encode_buf, char *decode_buf);


Эта функция просто проходит циклом по всем байтам в encode_buf и раскодирует или копирует их в decode_buf:
image
Читать дальше →

Взламываем D-Link DSP-W215 Smart Plug. Снова и опять

Время на прочтение3 мин
Охват и читатели9.9K
Вот мы снова и опять.
image

В последнем эксплоите к DSP-W215 я говорил, чтобы функция get_input_entries не падала, нужно использовать имя «storage_path» в POST-запросе. Так нужно было сделать из-за того, что есть еще одно переполнение буфера, на этот раз в функции get_input_entries, которую вызывает get_input_entries, если имя пост параметра отлично от «storage_path» или «path»:
image

В функцию replace_special_char передается один аргумент — указатель на обрабатываемое POST-значение:
image
Читать дальше →

Взламываем D-Link DSP-W215 Smart Plug. Снова

Время на прочтение4 мин
Охват и читатели12K
image
Недавно, D-Link выпустил прошивку v1.02 для DSP-W215, в которой исправлен баг HNAP с переполнением буфера в my_cgi.cgi. Хоть они и быстренько убрали прошивку с сайта: «Вы можете обновить прошивку через мобильное приложение», я успел ее скачать перед моим рейсом в Мюнхен, и 8-часовой перелет предоставил мне достаточно времени для качественного анализа новой версии прошивки.

К сожалению, баг с HNAP был не единственной проблемой этого устройства. Конфигурационный файл lighttpd показывает нам, что my_cgi.cgi используется для обработки некоторых страниц, а не только HNAP-запросов:
alias.url += ( "/HNAP1/" => "/www/my_cgi.cgi",
               "/HNAP1"  => "/www/my_cgi.cgi",
               "/router_info.xml" => "/www/my_cgi.cgi",
               "/post_login.xml" => "/www/my_cgi.cgi",
               "/get_shareport_info" => "/www/my_cgi.cgi",
               "/secmark1524.cgi" => "/www/my_cgi.cgi",
               "/common/info.cgi" => "/www/my_cgi.cgi"
)


Главная функция в my_cgi.cgi имеет два ветвления кода: один для обработки HNAP-запросов, а другой — для всего остального:
image
Читать дальше →

Steam Protocol 2 и Steam Files — Введение

Время на прочтение5 мин
Охват и читатели32K
Steam Logo
Source Pirate Kit и все-все-все...

В далёком 2007-ом году автор одной замечательнейшей программы Source Pirate Kit (SPK) полностью утерял исходники своего проекта вместе с остальными документами — у него банально умер винчестер, где это всё хранилось. Назначение программы некоторым будет понятно из названия (кто-то даже сталкивался с ней) — создание Standalone-версий игр на движках Half-Life и Half-Life 2 (говоря проще — пираток). Всё в программе было хорошо, но с утерей исходников ушла в небытие и возможность хоть как-то подправлять алгоритм её работы — вся программа была монолитным EXE-файлом и все необходимые вспомогательные программы были подключены ресурсами и распаковывались при необходимости. Но — основной функционал был скрыт в самой программе…
Читать дальше →

Пару слов о перехвате HTTP/HTTPS трафика iOS приложений

Время на прочтение3 мин
Охват и читатели48K
В этой статье я расскажу о простом методе заработка в сети перехвата HTTP/HTTPS трафика iOS приложений, включая трафик приложений использующих certificate pinning (а это например Twitter, Facebook и куча других приложений). От прочих методов, где бедным людям рекомендуют в командной строке руками генерировать какие-то сертификаты и куда-то их запихивать, этот метод отличается (относительной) безгеморройностью, хотя кое-какие телодвижения сделать конечно прийдется.
Читать дальше →

Взламываем D-Link DSP-W215 Smart Plug

Время на прочтение4 мин
Охват и читатели31K
image
D-Link DSP-W215 Smart Plug — беспроводное устройство для мониторинга и контроля за электрическими розетками. Его пока нельзя купить в магазинах Amazon или Best Buy, но прошивка уже доступна для скачивания на сайте D-Link.

TL;DR: DSP-W215 содержит ошибку переполнения буфера, которая позволяет неаутентифицированному пользователю полностью управлять устройством, в том числе и самой розеткой.
Читать дальше →

Реверс-инжинеринг и написание бота для flash игры на Go

Время на прочтение19 мин
Охват и читатели11K
image В этой статье я расскажу, как декомпилировать flash-приложение с последующим извлечением алгоритма подписи запросов на игровой сервер. И как на основе этой информации написать игрового бота на Go.
Все началось с того, что я искал стратегию, чтобы поиграть со своего android смартфона. Нашел неплохую игру под названием «Throne rush». Потом оказалось, что есть и браузерный клиент, что делает удобнее некоторые действия. Но все же игровой процесс явно требовал автоматизации. Я воспользовался прекрасным инструментом JPEXS Free Flash Decompiler, о котором далее пойдет речь.
Читать дальше →