Как стать автором
Обновить

Writing a wasm loader for Ghidra. Part 1: Problem statement and setting up environment

Время на прочтение 7 мин
Количество просмотров 11K
Информационная безопасность *Assembler *Реверс-инжиниринг *
Из песочницы

This week, NSA (National Security Agency) all of a sudden made a gift to humanity, opening sources of their software reverse engineering framework. Community of the reverse engineers and security experts with great enthusiasm started to explore the new toy. According to the feedback, it’s really amazing tool, able to compete with existing solutions, such as IDA Pro, R2 and JEB. The tool is called Ghidra and professional resources are full of impressions from researchers. Actually, they had a good reason: not every day government organizations provide access to their internal tools. Myself as a professional reverse engineer and malware analyst couldn’t pass by as well. I decided to spend a weekend or two and get a first impression of the tool. I had played a bit with disassembly and decided to check extensibility of the tool. In this series of articles, I'll explain the development of Ghidra add-on, which loads custom format, used to solve CTF task. As it’s a large framework and I've chosen quite complicated task, I’ll break the article into several parts.

By the end of this part I hope to setup development environment and build minimal module, which will be able to recognize format of the WebAssembly file and will suggest the right disassembler to process it.
Read more →
Всего голосов 18: ↑17 и ↓1 +16
Комментарии 1

Модернизация GHIDRA. Загрузчик для ромов Sega Mega Drive

Время на прочтение 22 мин
Количество просмотров 14K
Программирование *Java *Реверс-инжиниринг *Игры и игровые консоли
Туториал


Приветствую вас, товарищи. Не слышал о пока-ещё-не-опенсорсной GHIDRA, наверное, только глухой/слепой/немой/без_интернета реверс-инженер. Её возможности из коробки поражают: декомпиляторы для всех поддерживаемых процессоров, простое добавление новых архитектур (с сразу же активной декомпиляцией благодаря грамотному преобразованию в IR), куча скриптов упрощающих жизнь, возможность Undo/Redo… И это только очень малая часть всех предоставляемых возможностей. Сказать что я был впечатлён — это практически ничего не сказать.

Читать дальше →
Всего голосов 29: ↑29 и ↓0 +29
Комментарии 15

Ломаем простую «крякми» при помощи Ghidra — Часть 1

Время на прочтение 9 мин
Количество просмотров 65K
C++ *C *Реверс-инжиниринг *
Из песочницы
О том, что это за зверь такой — Ghidra («Гидра») — и с чем его едят она ест программки, многие уже, наверняка, знают не понаслышке, хотя в открытый доступ сей инструмент попал совсем недавно — в марте этого года. Не буду докучать читателям описанием Гидры, ее функциональности и т.д. Те, кто в теме, уже, уверен, всё это сами изучили, а кто еще не в теме — могут это сделать в любое время, благо на просторах веба сейчас найти подробную информацию не составит труда. Кстати, один из аспектов Гидры (разработку плагинов к ней) уже освещался на Хабре (отличная статья!) Я же дам только основные ссылки:


Итак, Гидра — это бесплатный кроссплатформенный интерактивный дизассемблер и декомпилятор с модульной структурой, с поддержкой почти всех основных архитектур ЦПУ и гибким графическим интерфейсом для работы с дизассемблированным кодом, памятью, восстановленным (декомпилированным) кодом, отладочными символами и многое-многое другое.

Давайте попробуем уже что-нибудь сломать этой Гидрой!
Читать дальше →
Всего голосов 58: ↑57 и ↓1 +56
Комментарии 32

Ломаем простую «крякми» при помощи Ghidra — Часть 2

Время на прочтение 12 мин
Количество просмотров 12K
C++ *C *Реверс-инжиниринг *
Туториал
В первой части статьи мы при помощи Ghidra провели автоматический анализ простой программы-крякми (которую мы скачали с сайта crackmes.one). Мы разобрались с тем, как переименовывать «непонятные» функции прямо в листинге декомпилятора, а также поняли алгоритм программы «верхнего уровня», т.е. что выполняется функцией main().

В этой части мы, как я и обещал, возьмемся за анализ функции _construct_key(), которая, как мы выяснили, как раз и отвечает за чтение переданного в программу двоичного файла и проверку прочитанных данных.
Читать дальше →
Всего голосов 25: ↑25 и ↓0 +25
Комментарии 2

GHIDRA, исполняемые файлы Playstation 1, FLIRT-сигнатуры и PsyQ

Время на прочтение 13 мин
Количество просмотров 12K
Программирование *Java *Реверс-инжиниринг *Игры и игровые консоли
Туториал

Привет всем,



Не знаю как вам, а мне всегда хотелось пореверсить старые приставочные игры, имея в запасе ещё и декомпилятор. И вот, этот радостный момент в моей жизни настал — вышла GHIDRA. О том, что это такое, писать не буду, можно легко загуглить. И, отзывы настолько разные (особенно от ретроградов), что новичку будет сложно даже решиться на запуск этого чуда… Вот вам пример: "20 лет работал в иде, и смотрю я на вашу Гидру с большим недоверием, потому что АНБ. Но когда-нибудь запущу и проверю её в деле".

Читать дальше →
Всего голосов 38: ↑38 и ↓0 +38
Комментарии 13

Решаем простой Crackme для Sega Mega Drive

Время на прочтение 9 мин
Количество просмотров 6.9K
Реверс-инжиниринг *Игры и игровые консоли Логические игры
Туториал

Привет всем,



Несмотря на мой большой опыт в реверсе игр под Sega Mega Drive, крякмисов под неё я никогда не решал, да и не попадались они мне на просторах интернета. Но, на днях появился забавный крэкми, который захотелось решить. Делюсь с вами решением…

Читать дальше →
Всего голосов 22: ↑22 и ↓0 +22
Комментарии 4

Укрощение Горыныча, или Декомпиляция eBPF в Ghidra

Время на прочтение 14 мин
Количество просмотров 4.8K
Блог компании Digital Security Информационная безопасность *


Автор статьи https://github.com/Nalen98


Добрый день!


Тема моего исследования в рамках летней стажировки «Summer of Hack 2019» в компании Digital Security была «Декомпиляция eBPF в Ghidra». Нужно было разработать на языке Sleigh систему трансляции байткода eBPF в PCode Ghidra для возможности проводить дизассемблирование, а также декомпиляцию eBPF-программ. Результатом исследования является разработанное расширение для Ghidra, которое добавляет поддержку eBPF-процессора. Исследование, как и у других стажёров, можно по праву считать «первопроходным», поскольку ранее в других инструментах реверс-инжиниринга не было возможности проводить декомпиляцию eBPF.

Читать дальше →
Всего голосов 27: ↑27 и ↓0 +27
Комментарии 10

Пишем USB-драйверы для заброшенных устройств

Время на прочтение 6 мин
Количество просмотров 62K
Работа с видео *Разработка под Linux *Компьютерное железо Старое железо Видеотехника
Перевод


Недавно на eBay мне попалась партия интересных USB-девайсов (Epiphan VGA2USB LR), которые принимают на вход VGA и отдают видео на USB как веб-камера. Меня настолько обрадовала идея, что больше никогда не придётся возиться с VGA-мониторами, и учитывая заявленную поддержку Linux, я рискнул и купил всю партию примерно за 20 фунтов (25 долларов США).

Получив посылку, я подключил устройство, но оно даже не подумало появиться в системе как UVC. Что не так?

Я изучил сайт производителя и обнаружил, что для работы требуется специальный драйвер. Для меня это была новая концепция, ведь в ядре моего дистрибутива Linux обычно есть драйверы для всех устройств.
Всего голосов 231: ↑229 и ↓2 +227
Комментарии 96

GHIDRA vs. IDA Pro

Время на прочтение 12 мин
Количество просмотров 40K
Assembler *Реверс-инжиниринг *


Приветствую,


Думаю, пришла пора. Наболело/накипело/есть мнение. С выходом Гидры ситуация с инструментарием для реверс-инженеров достаточно сильно изменилась. Если раньше выбора чем пользоваться особо не было (здесь не будут упоминаться Binary Ninja, Hopper, JEB или Radare2, потому как в известных мне ИБ-компаниях и комьюнити ими пользуется очень малое количество человек, либо же порог вхождения в некоторые (привет, Радар) очень высок, либо же покрытие архитектур ограничено лишь x86/x64/ARM/ARM64/MIPS), то теперь мы имеем очень мощного конкурента Hex-Rays в лице АНБ с их GHIDRA.

Читать дальше →
Всего голосов 31: ↑31 и ↓0 +31
Комментарии 36

NSA, Ghidra, and Unicorns

Время на прочтение 12 мин
Количество просмотров 765
Блог компании PVS-Studio Open source *Java *Реверс-инжиниринг *

NSA, Ghidra, and Unicorns

This time, the PVS-Studio team's attention was attracted by Ghidra, a big bad reverse-engineering framework allowing developers to analyze binary files and do horrible things to them. The most remarkable fact about it is not even that it's free and easily extensible with plugins but that it was developed and uploaded to GitHub for public access by NSA. On the one hand, you bet NSA has enough resources for keeping their code base clean. On the other hand, new contributors, who are not well familiar with it, may have accidentally introduced bugs that could stay unnoticed. So, we decided to feed the project to our static analyzer and see if it has any code issues.
Read more →
Рейтинг 0
Комментарии 0

АНБ, Ghidra и единороги

Время на прочтение 12 мин
Количество просмотров 3.6K
Блог компании PVS-Studio Open source *Java *Реверс-инжиниринг *

АНБ, Ghidra и единороги

На этот раз взгляд команды PVS-Studio привлекла Ghidra — большой и злой фреймворк для реверс-инжиниринга, с помощью которого можно анализировать различные бинарные файлы и делать с ними всякие страшные вещи. Наиболее интересно в нём даже не то, что он бесплатен для использования или отлично расширяется плагинами, а то, что написали его в АНБ и выложили исходники на GitHub для всех желающих. С одной стороны, кажется, что у АНБ-то точно достаточно ресурсов для поддержания кодовой базы в чистоте. А с другой, не очень знакомые с ней новые контрибьюторы могли за прошедшее время случайно добавить незамеченных багов. Поэтому, вооружившись статическим анализом, мы решили поискать слабые места в этом проекте.
Читать дальше →
Всего голосов 6: ↑6 и ↓0 +6
Комментарии 2

Разбираем ресурсы Twisted Metal 4 (PSX) в Ghidra. Часть 1

Время на прочтение 9 мин
Количество просмотров 3K
Assembler *C *Реверс-инжиниринг *Игры и игровые консоли
Туториал


Всем привет,


В данной статье я расскажу о реверс-инжиниринге ресурсов игры Twisted Metal 4 для первой Playstation. В качестве основного инструмента я буду использовать Ghidra.


Наверняка вы слышали об игровой серии Twisted Metal. А кому-то, наверное, довелось и поиграть (мне нет). По словам тех, кто играл в четвёртую часть, в игре имеются некоторые неприятные баги. Так вот, реверс-инжиниринг должен помочь исправить их. Поехали…

Читать дальше →
Всего голосов 8: ↑8 и ↓0 +8
Комментарии 4

Пишем спецификацию под Nvidia Kepler (бинарники CUDA, версия языка sm_30) для Ghidra

Время на прочтение 6 мин
Количество просмотров 1.8K
GPGPU *C *Реверс-инжиниринг *
Из песочницы
Для обычных процессорных языков уже написано довольно много спецификаций для Ghidra, однако для графических ничего нет. Оно и понятно, ведь там своя специфика: предикаты, константы, через которые передаются параметры в том числе, и другие вещи, унаследованные от шейдеров. Кроме того формат, который используется для хранения кода, зачастую проприетарный, и его нужно самостоятельно ревёрсить.

В этой статье на двух примерах разберёмся, что к чему.
Читать дальше →
Всего голосов 17: ↑17 и ↓0 +17
Комментарии 15

Декомпиляция node.js в Ghidra

Время на прочтение 10 мин
Количество просмотров 5.2K
Блог компании Positive Technologies Информационная безопасность *Java *Node.JS *Реверс-инжиниринг *


Приветствую,


Вам когда-нибудь хотелось узнать, как же именно работает программа, которой вы так активно пользуетесь, игра, в которую часто играете, прошивка какого-нибудь устройства, которое что-то делает по расписанию? Если да, то для этого вам потребуется дизассемблер. А лучше — декомпилятор. И если с x86-x64, Java, Python ситуация известная: этих ваших дизассемблеров и декомпиляторов полным-полно, то с другими языками всё обстоит немного сложнее: поисковые машины уверенно утверждают — «It's impossible».



Что ж, мы решили оспорить данное утверждение и произвести декомпиляцию NodeJS, а именно выхлоп, который выдаёт npm-пакет bytenode. Об этом подробнее мы и расскажем по ходу статьи. Заметим, что это уже вторая статья в серии о нашем плагине для Ghidra (первый материал был также опубликован в нашем блоге на Хабре). Поехали.

Читать дальше →
Всего голосов 16: ↑16 и ↓0 +16
Комментарии 2

Модифицируем Last Epoch — От dnSpy до Ghidra

Время на прочтение 9 мин
Количество просмотров 9.6K
Реверс-инжиниринг *

Last Epoch — это однопользовательская ARPG на Unity и C#. В игре присутствует система крафта — игрок находит модификаторы, которые затем применяет к экипировке. С каждым модификатором накапливается "нестабильность", которая увеличивает шанс поломки предмета


Я преследовал две цели:


  • Убрать "поломку" предмета в результате применения модификаторов
  • Не расходовать модификаторы при крафте

cut

Читать дальше →
Всего голосов 7: ↑7 и ↓0 +7
Комментарии 0

Получение исходного кода PowerPacker Cruncher от AmigaOS

Время на прочтение 5 мин
Количество просмотров 3.2K
C++ *C *Реверс-инжиниринг *Демосцена Игры и игровые консоли
🔥 Технотекст 2020


Всем привет,


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


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

Читать дальше →
Всего голосов 18: ↑18 и ↓0 +18
Комментарии 11

Укрощение Горыныча 2, или Символьное исполнение в Ghidra

Время на прочтение 8 мин
Количество просмотров 3.9K
Блог компании Digital Security Информационная безопасность *Реверс-инжиниринг *


С удовольствием и даже гордостью публикуем эту статью. Во-первых, потому что автор — участница нашей программы Summ3r of h4ck, Nalen98. А во-вторых, потому что это исследовательская работа с продолжением, что вдвойне интереснее. Ссылка на первую часть.


Добрый день!


Прошлогодняя стажировка в Digital Security не оставила меня равнодушной к компании и новым исследованиям, так что в этом году я взялась поработать над проектом так же охотно. Темой летней стажировки «Summer of Hack 2020» для меня стала «Символьное исполнение в Ghidra». Нужно было изучить существующие движки символьного исполнения, выбрать один из них и реализовать его в интерфейсе Ghidra. Казалось бы, зачем, ведь в основном движки представляют собой самостоятельные решения? Этот вопрос будет возникать до тех пор, пока не попробовать то, что автоматизирует действия и сделает их наглядными. Это и стало целью разработки.


Статья в какой-то степени является еще и продолжением статьи моего наставника, Андрея Акимова, о решении Kao’s Toy Project с Triton. Только сейчас нам не придется писать ни строчки кода – решить крякми можно будет практически двумя кликами.


Итак, начнем по порядку.

Читать дальше →
Всего голосов 16: ↑16 и ↓0 +16
Комментарии 0

Исправляем кривой запуск первого Mass Effect

Время на прочтение 18 мин
Количество просмотров 18K
Разработка игр *
Перевод
image

Часть 1


В последнее время я работал над собственным форком ME3Explorer [неофициальный редактор игр серии Mass Effect], содержащим множество важных улучшений и даже новые инструменты. Также я поработал над Mod Manager 5.1, который имеет удобные новые функции импорта сторонних модов, однако был отодвинут на второй план, пока я работал над новым фронтендом установщика ALOT.

ALOT Installer с манифестом 2017 года

Для его реализации я сотрудничал с CreeperLava и Aquadran; он должен упростить жизнь конечным пользователям, устанавливающим ALOT и его аддон (сторонние текстуры). Одна из моих проблем заключалась в том, что Origin не запускал игру после установки ALOT, если не запустить его с правами администратора. И поскольку запуск Origin при загрузке невозможно выполнить с правами админа, это очень раздражает. К тому же это влияет на мод MEUITM. Поэтому я начал разбираться, почему это происходит. Дело оказалось в идеальном сочетании реализации защиты, плохого кода и желания упростить жизнь других людей.

Давайте посмотрим, как работает Mass Effect с Origin в неизменённом состоянии под Windows 10.
Читать дальше →
Всего голосов 16: ↑16 и ↓0 +16
Комментарии 8

Устраняем старый баг в NVIDIA GeForce Experience

Время на прочтение 7 мин
Количество просмотров 7.5K
Отладка *Реверс-инжиниринг *Компьютерное железо Игры и игровые консоли
Перевод

Предыстория


Несколько месяцев назад я решил попробовать сыграть в Microsoft Flight Simulator 2020. Копия нашей планеты, созданная Asobo при помощи фотограмметрии и машинного обучения, казалась подходящим местом для отдыха в эти трудные времена.

Я подключил свой верный беспроводной джойстик Logitech Freedom 2.4 и поднялся в небеса.



Спустя несколько часов полётов вокруг моей альма-матер и дома, в которой я провёл детство, настало время закругляться. Я настроил свой компьютер так, чтобы мониторы отключались через несколько минут неактивности, поэтому быстро понял, что больше они не отключаются.
Читать дальше →
Всего голосов 17: ↑17 и ↓0 +17
Комментарии 3

Первое знакомство с отладчиком Ghidra и взлом игры Spiderman

Время на прочтение 12 мин
Количество просмотров 11K
Блог компании RUVDS.com Информационная безопасность *Разработка игр *Реверс-инжиниринг *Лайфхаки для гиков
Перевод


В середине декабря в твиттер-аккаунте NSA было объявлено о релизе новой ветки Ghidra с долгожданной поддержкой отладки. Теперь с помощью GDB-заглушки и прочих механизмов можно будет выполнять ее пошагово внутри самой Ghidra. Желая отпраздновать это событие, которое совпало с моим домашним карантином, я подготовил небольшой обзор сборки этой версии, включая пример использования ее отладчика для интересной цели.
Читать дальше →
Всего голосов 35: ↑35 и ↓0 +35
Комментарии 1
1