Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Георгий Зайцев - Reversing golang

1,016 views

Published on

Георгий Зайцев - Reversing golang
28 встреча DEFCON Russia - https://defcon-russia.ru

Published in: Internet
  • Be the first to comment

Георгий Зайцев - Reversing golang

  1. 1. GOLANG РЕВЕРСИНГ
  2. 2. MAIN ЧАСТЬ 1
  3. 3. НАЧАЛО ПРИВЕТ ▸ Точка входа 1
  4. 4. НАЧАЛО ПРИВЕТ2 ▸ Точка входа 2
  5. 5. НАЧАЛО КАК НАЙТИ MAIN? ▸ Написать свой «hello, world» и найти по нему. Или поискать программу с отладочными символами.
  6. 6. НАЧАЛО КАК НАЙТИ MAIN
  7. 7. ТЕКСТ КАК НАЙТИ MAIN
  8. 8. ТЕКСТ КАК НАЙТИ MAIN
  9. 9. ИМЕНА ФУНКЦИЙ ЧАСТЬ 2
  10. 10. ИМЕНА ФУНКЦИЙ ИДЕЯ ▸ Желание восстановить имена хотя бы части функций естественно вытекает из предыдущей части ▸ Три подхода: ▸ Rizzo ▸ IDB2PAT ▸ Ультимативный способ, работающий только для golang
  11. 11. ИМЕНА ФУНКЦИЙ RIZZO ▸ https://github.com/devttys0/ida/tree/master/plugins/rizzo ▸ Позволяет создавать сигнатуры по IDB файлу ▸ Не требует IDA FLAIR ▸ Нетороплив (субъективно) ▸ Не идеально работает - многое пропускает, но возможно это легко исправляется
  12. 12. ИМЕНА ФУНКЦИЙ RIZZO
  13. 13. ИМЕНА ФУНКЦИЙ IDB2PAT ▸ https://github.com/fireeye/flare-ida/blob/master/python/ flare/idb2pat.py ▸ Создает PAT файл по данному idb файлу ▸ Необходим IDA FLAIR для генерации сигнатур ▸ После генерации сигнатуры все летает ▸ Где то полгода назад у меня был файл, на котором старая версия скрипта зависала
  14. 14. ИМЕНА ФУНКЦИЙ IDB2PAT
  15. 15. ИМЕНА ФУНКЦИЙ УЛЬТИМАТИВНЫЙ СПОСОБ ▸ Волшебные секции ▸ .typelink ▸ .gopclntab ▸ .noptrdata ▸ Нас будет интересовать .gopclntab
  16. 16. ИМЕНА ФУНКЦИЙ .GOPCLNTAB ▸ http://golang.org/s/go12symtab ▸ go/src/cmd/link/internal/ld/pcln.go
  17. 17. ИМЕНА ФУНКЦИЙ FUNC_N STRUCTURE
  18. 18. ИМЕНА ФУНКЦИЙ FUNC_N STRUCTURE ▸ Вот так это выглядит
  19. 19. ИМЕНА ФУНКЦИЙ АВТОМАТИЗАЦИЯ ▸ Это все восхитительно, но руками все восстанавливать крайне грустно ▸ Довольно несложно (зная все вышесказанное) это все делать автоматически ▸ https://gitlab.com/zaytsevgu/goutils/blob/master/ go_renamer.py
  20. 20. ИМЕНА ФУНКЦИЙ АВТОМАТИЗАЦИЯ. ДО И ПОСЛЕ
  21. 21. ТИПЫ ЧАСТЬ 3
  22. 22. ТИПЫ ПОЛУЧЕНИЕ ИМЕН ТИПОВ ▸ Значение возвращается через стек :) ▸ Что такое unk_8560d40? ▸ Очень крутой сайт у GO :) ▸ Поиск по сорцам реально удобный
  23. 23. ТИПЫ СТРУКТУРА _TYPE ▸ Имеет разный вид в зависимости от версии языка: ▸ Go 1.2 Go 1.6 Go 1.7
  24. 24. ТИПЫ СТРУКТУРА _TYPE ▸ До версии 1.7 был указатель на строку. Теперь смещение от .rodata до типа name
  25. 25. ТИПЫ СТАНДАРТНЫЕ ТИПЫ ▸ String ▸ Slice ▸ Error ▸ iface
  26. 26. ТИПЫ REFLECT ▸ Я был почти доволен, но https://github.com/naoina/toml/
  27. 27. ТИПЫ ВОССТАНОВЛЕНИЕ СТРУКТУР ▸ WHAT? ▸ Опять посмотрим на src/reflect/type.go (go1.2)
  28. 28. ТИПЫ ВОССТАНОВЛЕНИЕ СТРУКТУР ▸ Так это выглядит для go 1.7
  29. 29. ТИПЫ UNK_8560D40 ▸ Восстанавливаем тип
  30. 30. ТИПЫ А ЕСЛИ ЕЩЕ? ▸ enum kind. Определяет тип типа :)
  31. 31. ТИПЫ ОСТАЛЬНЫЕ ТИПЫ ▸ Все в том же файле src/reflect/type.go находятся описания и для всех остальных типов
  32. 32. ТИПЫ ИНТЕРФЕЙСЫ ▸ Довольно важная часть языка(наверное)
  33. 33. ТИПЫ ИНТЕРФЕЙСЫ ▸ Определяет набор методов, которые должны быть реализованы ▸ Конкретный тип определяется следующим образом:
  34. 34. ТИПЫ ИНТЕРФЕСЫ. ПРИМЕР
  35. 35. ТИПЫ РЕАЛИЗАЦИЯ ИНТЕРФЕЙСОВ
  36. 36. ТИПЫ РЕАЛИЗАЦИЯ ИНТЕРФЕЙСОВ
  37. 37. ТИПЫ АВТОМАТИЗАЦИЯ
  38. 38. ТИПЫ
  39. 39. ТИПЫ
  40. 40. ТЕКСТ
  41. 41. BONUS
  42. 42. BONUS
  43. 43. ПОКА НА ЭТОМ ВСЕ. СПАСИБО ЗА ВНИМАНИЕ! ВОПРОСЫ? ТИПЫ

×