Реверс Go crackme

Тема в разделе "WASM.BEGINNERS", создана пользователем Vadimcg, 3 мар 2018.

Метки:
  1. Vadimcg

    Vadimcg Member

    Публикаций:
    0
    Регистрация:
    5 апр 2017
    Сообщения:
    32
    Некогда не имел дел с go crackme, но прочитав пару статеек понял, что надо начинать с восстановления имен функций(Go поддерживает рефлексию, потому в коде содержаться имена функций). Нашел две статьи( статья 1 и статья 2 ) со скриптами для восстановления имен функций. Запустив скрипты восстановить имена так и не удалось. Решив, что возможно в данном crackme не получиться восстановить имена функций , я создал проект на GO
    package main
    import "fmt"
    func main() {
    fmt.Println("hello world")
    }
    и скомпилил его go build -ldflags "-w -s" -убрал всю отладочную информацию, и попытался на этом Hello Word'де востановить имена функций скриптами, но результат тот же, что и с crackme, что говорит о том , что я делаю ошибочные действия. скрипт с хабра и с друг. статьи . Подскажите , как востановить имена функций, хотябы у Hello World ?)
     
  2. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    Vadimcg,

    > Go поддерживает рефлексию, потому в коде содержаться имена функций

    Не нужно было читать не технические тут темы ;)

    По задаче. Во первых чем является код - он нэйтив(если так, то морф етц имеется или нет) или это виртуальная машина ?
     
  3. Vadimcg

    Vadimcg Member

    Публикаций:
    0
    Регистрация:
    5 апр 2017
    Сообщения:
    32
    да , код native, можите пояснить, что такое морф етц ?
     
  4. HESH

    HESH Active Member

    Публикаций:
    2
    Регистрация:
    20 мар 2008
    Сообщения:
    143
  5. yashechka

    yashechka Ростовский фанат Нарвахи

    Публикаций:
    90
    Регистрация:
    2 янв 2012
    Сообщения:
    1.449
    Адрес:
    Россия
  6. Vadimcg

    Vadimcg Member

    Публикаций:
    0
    Регистрация:
    5 апр 2017
    Сообщения:
    32
    да , полиморфизм в GO имеетсья
     
  7. Prober

    Prober Member

    Публикаций:
    0
    Регистрация:
    4 дек 2008
    Сообщения:
    43
    В данном случае совершенно не обязательно. Забудьте о Go, разбирайте как обычную программу. Нет в ней ни ВМ, ни самомодифицирующегося кода, ни прочих трюков. Проверка примитивная, правильный пароль статический, с именем не связан. Функция, которая считает МД5, по внешнему виду результата быстро распознаётся. Кракми начального уровня, в общем. Просто весит много...
     
    Vadimcg и yashechka нравится это.
  8. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    Vadimcg,

    > пояснить, что такое морф етц ?

    Изменения оригинального кода автоматикой.

    Вам нужно понять общий подход. Во первых что касается крякми - он реализуется обычно без автоматики. Это нэйтивный код, без морфа(обфускаций или например пакеров, друг на друга наложенных). Такие апп содержат некоторые фичи, ради которых выполняется их разбор, он всегда ручной и в отладчике.

    Разбор крякми отличается от решения типо техзаданий по реверсу, например снятие слоя пакера. Это интересно должно быть тому, кто разбирает крякми - это получение новых знаний и опыта.

    Снятие пакеров это никак не связано с решением крякми, это рутинная и не приятная работа. Для этого используются сложные инструменты. Это деморферы, выполняющие свёртку кода, декомпиляторы и прочее.

    Поэтому нужно вначале определить что представляет собой апп:

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

    Тоесть вначале нужно определить формат кода, перед началом работы с ним.
     
    Последнее редактирование: 4 мар 2018
    _edge нравится это.
  9. superakira

    superakira Guest

    Публикаций:
    0
    Для ТС. Го - это компилируемый язык. Нету там вм. Жирный там - ибо рантайм у него огого) и он линкуется статиком. Решай кракми от обратного - если выводит строку - ищи строку в иде и смотри кто юзает, дальше лоализуй код, где проверка (если есть или что та м у тебя) или Месаджбокс итд. При взломе главное выцепить часть которая нужна, а не реверсить все подряд.
     
    Mikl___ и HESH нравится это.
  10. Vadimcg

    Vadimcg Member

    Публикаций:
    0
    Регистрация:
    5 апр 2017
    Сообщения:
    32
    Подскажите пожалуста, как тогда без вотановления имен функций найти main.main?
     
  11. HESH

    HESH Active Member

    Публикаций:
    2
    Регистрация:
    20 мар 2008
    Сообщения:
    143
    Не совсем понятно, зачем тебе именно Main.Main ? Тебе input надо искать и проверку введенного.
     
  12. Vadimcg

    Vadimcg Member

    Публикаций:
    0
    Регистрация:
    5 апр 2017
    Сообщения:
    32
    Да я нашел, спасибо, меня интересует поиск имени функции и что значат магические цифры в скриптах приведенных мною в статьях. Какой-то статьи с подробным разбором я не нашел, указывються ссылки на исходнки go и еще пару источников... Как я понял , востановление имен было поднято на конфиренции ZeroNight 2016, запись я не нашел... только призентацию)
     
  13. _edge

    _edge Well-Known Member

    Публикаций:
    1
    Регистрация:
    29 окт 2004
    Сообщения:
    631
    Адрес:
    Russia