Pull to refresh
  • by relevance
  • by date
  • by rating

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

Information Security *Assembler *Reverse engineering *
Sandbox

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 →
Total votes 18: ↑17 and ↓1 +16
Views 9.5K
Comments 1

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

Programming *Java *Reverse engineering *Games and game consoles
Tutorial


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

Читать дальше →
Total votes 29: ↑29 and ↓0 +29
Views 13K
Comments 15

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

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


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

Давайте попробуем уже что-нибудь сломать этой Гидрой!
Читать дальше →
Total votes 58: ↑57 and ↓1 +56
Views 52K
Comments 32

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

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

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

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

Programming *Java *Reverse engineering *Games and game consoles
Tutorial

Привет всем,



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

Читать дальше →
Total votes 38: ↑38 and ↓0 +38
Views 11K
Comments 13

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

Reverse engineering *Games and game consoles Logic games
Tutorial

Привет всем,



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

Читать дальше →
Total votes 22: ↑22 and ↓0 +22
Views 6.2K
Comments 4

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

Digital Security corporate blog Information Security *


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


Добрый день!


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

Читать дальше →
Total votes 27: ↑27 and ↓0 +27
Views 4.3K
Comments 10

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

Working with video *Development for Linux *Computer hardware Old hardware Video equipment
Translation


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

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

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

GHIDRA vs. IDA Pro

Assembler *Reverse engineering *


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


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

Читать дальше →
Total votes 31: ↑31 and ↓0 +31
Views 31K
Comments 36

NSA, Ghidra, and Unicorns

PVS-Studio corporate blog Open source *Java *Reverse engineering *

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 →
Rating 0
Views 561
Comments 0

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

PVS-Studio corporate blog Open source *Java *Reverse engineering *

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

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

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

Assembler *C *Reverse engineering *Games and game consoles
Tutorial


Всем привет,


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


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

Читать дальше →
Total votes 8: ↑8 and ↓0 +8
Views 2.3K
Comments 4

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

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

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

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

Positive Technologies corporate blog Information Security *Java *Node.JS *Reverse engineering *


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


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



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

Читать дальше →
Total votes 16: ↑16 and ↓0 +16
Views 3.3K
Comments 2

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

Reverse engineering *

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


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


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

cut

Читать дальше →
Total votes 7: ↑7 and ↓0 +7
Views 5.6K
Comments 0

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

C++ *C *Reverse engineering *Demoscene Games and game consoles
🔥 Technotext 2020


Всем привет,


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


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

Читать дальше →
Total votes 18: ↑18 and ↓0 +18
Views 2.9K
Comments 11

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

Digital Security corporate blog Information Security *Reverse engineering *


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


Добрый день!


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


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


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

Читать дальше →
Total votes 16: ↑16 and ↓0 +16
Views 2.7K
Comments 0

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

Game development *
Translation
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.
Читать дальше →
Total votes 16: ↑16 and ↓0 +16
Views 15K
Comments 8

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

Debugging *Reverse engineering *Computer hardware Games and game consoles
Translation

Предыстория


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

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



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

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

RUVDS.com corporate blog Information Security *Game development *Reverse engineering *Lifehacks for geeks
Translation


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