View
586
Download
5
Category
Preview:
Citation preview
GOLANGРЕВЕРСИНГ
MAINЧАСТЬ 1
НАЧАЛО
ПРИВЕТ
▸ Точка входа 1
НАЧАЛО
ПРИВЕТ2
▸ Точка входа 2
НАЧАЛО
КАК НАЙТИ MAIN?
▸ Написать свой «hello, world» и найти по нему. Или поискать программу с отладочными символами.
НАЧАЛО
КАК НАЙТИ MAIN
ТЕКСТ
КАК НАЙТИ MAIN
ТЕКСТ
КАК НАЙТИ MAIN
ИМЕНА ФУНКЦИЙЧАСТЬ 2
ИМЕНА ФУНКЦИЙ
ИДЕЯ
▸ Желание восстановить имена хотя бы части функций естественно вытекает из предыдущей части
▸ Три подхода:
▸ Rizzo
▸ IDB2PAT
▸ Ультимативный способ, работающий только для golang
ИМЕНА ФУНКЦИЙ
RIZZO
▸ https://github.com/devttys0/ida/tree/master/plugins/rizzo
▸ Позволяет создавать сигнатуры по IDB файлу
▸ Не требует IDA FLAIR
▸ Нетороплив (субъективно)
▸ Не идеально работает - многое пропускает, но возможно это легко исправляется
ИМЕНА ФУНКЦИЙ
RIZZO
ИМЕНА ФУНКЦИЙ
IDB2PAT
▸ https://github.com/fireeye/flare-ida/blob/master/python/flare/idb2pat.py
▸ Создает PAT файл по данному idb файлу
▸ Необходим IDA FLAIR для генерации сигнатур
▸ После генерации сигнатуры все летает
▸ Где то полгода назад у меня был файл, на котором старая версия скрипта зависала
ИМЕНА ФУНКЦИЙ
IDB2PAT
ИМЕНА ФУНКЦИЙ
УЛЬТИМАТИВНЫЙ СПОСОБ
▸ Волшебные секции
▸ .typelink
▸ .gopclntab
▸ .noptrdata
▸ Нас будет интересовать .gopclntab
ИМЕНА ФУНКЦИЙ
.GOPCLNTAB
▸ http://golang.org/s/go12symtab
▸ go/src/cmd/link/internal/ld/pcln.go
ИМЕНА ФУНКЦИЙ
FUNC_N STRUCTURE
ИМЕНА ФУНКЦИЙ
FUNC_N STRUCTURE
▸ Вот так это выглядит
ИМЕНА ФУНКЦИЙ
АВТОМАТИЗАЦИЯ
▸ Это все восхитительно, но руками все восстанавливать крайне грустно
▸ Довольно несложно (зная все вышесказанное) это все делать автоматически
▸ https://gitlab.com/zaytsevgu/goutils/blob/master/go_renamer.py
ИМЕНА ФУНКЦИЙ
АВТОМАТИЗАЦИЯ. ДО И ПОСЛЕ
ТИПЫЧАСТЬ 3
ТИПЫ
ПОЛУЧЕНИЕ ИМЕН ТИПОВ
▸ Значение возвращается через стек :)
▸ Что такое unk_8560d40?
▸ Очень крутой сайт у GO :)
▸ Поиск по сорцам реально удобный
ТИПЫ
СТРУКТУРА _TYPE
▸ Имеет разный вид в зависимости от версии языка:
▸ Go 1.2 Go 1.6 Go 1.7
ТИПЫ
СТРУКТУРА _TYPE
▸ До версии 1.7 был указатель на строку. Теперь смещение от .rodata до типа name
ТИПЫ
СТАНДАРТНЫЕ ТИПЫ
▸ String
▸ Slice
▸ Error
▸ iface
ТИПЫ
REFLECT
▸ Я был почти доволен, но https://github.com/naoina/toml/
ТИПЫ
ВОССТАНОВЛЕНИЕ СТРУКТУР
▸ WHAT?
▸ Опять посмотрим на src/reflect/type.go (go1.2)
ТИПЫ
ВОССТАНОВЛЕНИЕ СТРУКТУР
▸ Так это выглядит для go 1.7
ТИПЫ
UNK_8560D40
▸ Восстанавливаем тип
ТИПЫ
А ЕСЛИ ЕЩЕ?
▸ enum kind. Определяет тип типа :)
ТИПЫ
ОСТАЛЬНЫЕ ТИПЫ
▸ Все в том же файле src/reflect/type.go находятся описания и для всех остальных типов
ТИПЫ
ИНТЕРФЕЙСЫ
▸ Довольно важная часть языка(наверное)
ТИПЫ
ИНТЕРФЕЙСЫ
▸ Определяет набор методов, которые должны быть реализованы
▸ Конкретный тип определяется следующим образом:
ТИПЫ
ИНТЕРФЕСЫ. ПРИМЕР
ТИПЫ
РЕАЛИЗАЦИЯ ИНТЕРФЕЙСОВ
ТИПЫ
РЕАЛИЗАЦИЯ ИНТЕРФЕЙСОВ
ТИПЫ
АВТОМАТИЗАЦИЯ
ТИПЫ
ТИПЫ
ТЕКСТ
BONUS
BONUS
ПОКА НА ЭТОМ ВСЕ. СПАСИБО ЗА ВНИМАНИЕ!
ВОПРОСЫ?
ТИПЫ
Recommended