Go и Rust бинари: Ghidra 11 уже тащит или всё ещё боль?

Рейтинг: 67.6% · 8 голосов
Capture The Flag, реверс бинарных файлов, разработка эксплойтов, ассемблер, форензика, крэкми и задачи по информационной безопасности.
Ответить
Аватара пользователя
cronk
Сообщения: 16
Зарегистрирован: 17 май 2026, 08:27

Go и Rust бинари: Ghidra 11 уже тащит или всё ещё боль?

Сообщение cronk »

Прилетел на разбор семпл, статически слинкованный Go-бинарь под Linux, стрипнутый. Открываю в Ghidra 11 — и привычная радость: тысячи функций без имён, рантайм Go раскидан так, что глаз дёргается, строки лежат одним монолитом без нуль-терминаторов. С Rust-семплами та же история, только ещё и мономорфизация дженериков раздувает всё до неприличия. Вопрос к тем, кто плотно реверсит современные бинари: вы как разгребаете эту радость в 2026? Голая Ghidra, плагины, или всё-таки лезете в IDA?
👍1 ❤️2 🔥2 😄 🤔1
✔ Лучший ответ сформирован автоматически — sleepyraccoon
@remington1, Не забывайте про антианализ. Современные пакеры и протекторы под Rust/Go умеют детектить и Ghidra, и отладчик, и крутят строки в рантайме. Я сначала всегда прогоняю динамику в изолированной виртуалке, снимаю дамп уже распакованного образа из памяти, и только потом несу в статику. Иначе будешь часами ковырять обфусцированный загрузчик вместо реальной логики. На Go особенно бесит, когд…
Перейти к ответу →
Аватара пользователя
golanggeek
Сообщения: 10
Зарегистрирован: 11 май 2026, 15:49

Re: Go и Rust бинари: Ghidra 11 уже тащит или всё ещё боль?

Сообщение golanggeek »

По Go всё решаемо, если накатить нормальные скрипты восстановления символов. Берёшь утилиту, которая парсит pclntab, и получаешь обратно имена функций — после этого бинарь превращается из месива в читаемую штуку. Без этого реверсить Go вручную это самоистязание. По строкам отдельно прогоняешь скрипт, который восстанавливает границы по длинам из структур, иначе да, одна гигантская кишка текста.
👍2 ❤️1 🔥1 😄 🤔
Аватара пользователя
remington1
Сообщения: 7
Зарегистрирован: 11 май 2026, 07:28

Re: Go и Rust бинари: Ghidra 11 уже тащит или всё ещё боль?

Сообщение remington1 »

Голая Ghidra по Rust до сих пор слабовата на мой взгляд. Декомпилятор спотыкается на паниках, развёртке итераторов и обработке Result/Option, получается лапша из вложенных условий. Я для тяжёлых случаев всё равно держу IDA с актуальным Hex-Rays, там по дженерикам и инлайну местами чище выходит. Но платить за это душит, поэтому 80% рутины делаю в Ghidra, а в IDA лезу только когда совсем затык.
👍1 ❤️1 🔥 😄 🤔
Аватара пользователя
sleepyraccoon
Сообщения: 35
Зарегистрирован: 13 май 2026, 11:17

Re: Go и Rust бинари: Ghidra 11 уже тащит или всё ещё боль?

Сообщение sleepyraccoon »

✔ Лучший ответ — сформирован автоматически
@remington1, Не забывайте про антианализ. Современные пакеры и протекторы под Rust/Go умеют детектить и Ghidra, и отладчик, и крутят строки в рантайме. Я сначала всегда прогоняю динамику в изолированной виртуалке, снимаю дамп уже распакованного образа из памяти, и только потом несу в статику. Иначе будешь часами ковырять обфусцированный загрузчик вместо реальной логики. На Go особенно бесит, когда вся полезная нагрузка дешифруется по строкам прямо перед использованием.
👍 ❤️ 🔥 😄 🤔
Аватара пользователя
tomcruz
Сообщения: 29
Зарегистрирован: 12 май 2026, 18:25

Re: Go и Rust бинари: Ghidra 11 уже тащит или всё ещё боль?

Сообщение tomcruz »

Отдельная просьба ко всем — не игнорьте версию компилятора. Раскладка рантайма Go и формат метаданных заметно менялись между ветками, и скрипты восстановления символов, заточенные под старые версии, на свежих бинарях молча выдают мусор. Сначала определи версию тулчейна (она часто прямо в бинаре строкой лежит), потом подбирай инструмент под неё. Я на этом один раз потерял полдня, восстанавливая 'символы', которые на деле были смещены на пару функций.
👍 ❤️ 🔥 😄 🤔
Аватара пользователя
lorenzinoarq
Сообщения: 65
Зарегистрирован: 11 май 2026, 00:03

Re: Go и Rust бинари: Ghidra 11 уже тащит или всё ещё боль?

Сообщение lorenzinoarq »

@tomcruz, Резюмирую тред для тех, кто зашёл с поиска. Базовый пайплайн под Go: определить версию тулчейна -> восстановить символы из pclntab -> отдельно починить строки -> грузить в Ghidra. Под Rust: динамическая распаковка при необходимости -> дамп из памяти -> Ghidra для общей карты, IDA точечно по самым запутанным функциям с дженериками. И запастись терпением, потому что серебряной пули тут пока нет, оба языка по дизайну реверсеру жизнь не облегчают.
👍1 ❤️1 🔥 😄 🤔
Ответить
Поделиться темой: ✈ Telegram VK

Вернуться в «CTF и реверс-инжиниринг»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 3 гостя