Обновить

Комментарии 6

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

Код легок для чтения, видимо из-за того что в go внедрили свой ассемблер, который должен работать на всех платформах, а оптимизировать его еще толком не успели.
Лекго отслеживать путешествие значений — аргументы, как на вход, так и на выход передаются через стек.
lea rdx, _type_p_png_decoder_71b020
mov [rsp], rdx ; передаем аргумент (push и pop не используются)
call runtime_newobject
mov rax, [rsp+8] ; получаем результат

Из минусов только разве что hex-ray декомпилятор не справляется. Неверно определяет передачу аргументов в функции и возвращаемые значения, а научить его мне не удалось.
Ну и строки хранятся без нуль терминатора, а размер этих строк передается только при вызове функций. Но и это дело можно распарсить для удобства.
Изучать алгоритм гораздо проще, если ты знаешь названия функций и типов :)
А не смотрели в сторону bokken+Radare2?
К своему сожалению постоянно откладываю на потом. Из-за того что последнее время работать с бинарями получается только во время ctf, то приходится использовать известный набор инструментов. К следующей статье обещаю разобраться с r2 :)
Bokken не рекомендуется к использованию. Проект забросили и подходит только для небольших бинарных файлов. Недавно вышла «альфа» dev-версия GUI на Qt для radare2 — iaito. Она более приятна и удобна в использовании, но лучше хотя бы с месяц подождать, пока исправят основные баги, или пока не появится инсталлятор.

В radare2 для анализа Go исполняемых файлов можно использовать Zignatures. Об этом есть отдельная статья в блоге radare2. И несколько презентаций с примерами использования: моя небольшая с основами с ZeroNights 2014, а другая — более подробная c R2con 2016 от Sergi Martinez.

В свою очередь для IDA есть несколько готовых и интересных решений. У Tim Strazzere — подобная статья и плагин. А Георгий Зайцев рассказывал об этом на ZeroNights 2016 и опубликовал плагины. mogaika вы их смотрели перед написанием своего?
bokken мертв уже давно. Сейчас там на шарпе пишут новый гуй, но это пока не точно.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации