Некогда не имел дел с go crackme, но прочитав пару статеек понял, что надо начинать с восстановления имен функций(Go поддерживает рефлексию, потому в коде содержаться имена функций). Нашел две статьи( статья 1 и статья 2 ) со скриптами для восстановления имен функций. Запустив скрипты восстановить имена так и не удалось. Решив, что возможно в данном crackme не получиться восстановить имена функций , я создал проект на GO package mainimport "fmt"func main() { fmt.Println("hello world") }и скомпилил его go build -ldflags "-w -s" -убрал всю отладочную информацию, и попытался на этом Hello Word'де востановить имена функций скриптами, но результат тот же, что и с crackme, что говорит о том , что я делаю ошибочные действия. скрипт с хабра и с друг. статьи . Подскажите , как востановить имена функций, хотябы у Hello World ?)
Vadimcg, > Go поддерживает рефлексию, потому в коде содержаться имена функций Не нужно было читать не технические тут темы По задаче. Во первых чем является код - он нэйтив(если так, то морф етц имеется или нет) или это виртуальная машина ?
Них*я себе.. Консольный крякме весом 2 мб.... Круто )))) https://ru.wikipedia.org/wiki/Полиморфизм_(информатика)
В данном случае совершенно не обязательно. Забудьте о Go, разбирайте как обычную программу. Нет в ней ни ВМ, ни самомодифицирующегося кода, ни прочих трюков. Проверка примитивная, правильный пароль статический, с именем не связан. Функция, которая считает МД5, по внешнему виду результата быстро распознаётся. Кракми начального уровня, в общем. Просто весит много...
Vadimcg, > пояснить, что такое морф етц ? Изменения оригинального кода автоматикой. Вам нужно понять общий подход. Во первых что касается крякми - он реализуется обычно без автоматики. Это нэйтивный код, без морфа(обфускаций или например пакеров, друг на друга наложенных). Такие апп содержат некоторые фичи, ради которых выполняется их разбор, он всегда ручной и в отладчике. Разбор крякми отличается от решения типо техзаданий по реверсу, например снятие слоя пакера. Это интересно должно быть тому, кто разбирает крякми - это получение новых знаний и опыта. Снятие пакеров это никак не связано с решением крякми, это рутинная и не приятная работа. Для этого используются сложные инструменты. Это деморферы, выполняющие свёртку кода, декомпиляторы и прочее. Поэтому нужно вначале определить что представляет собой апп: - формат кода, это либо нэйтив код, либо виртуальная машина. Во втором случае нужен инструмент для работы с ней. - если код нэйтив, то он может быть отморфлен. Тоесть автоматика вносит изменения в код и он становится не доступен для анализа человеком. Это всякие крипторы и прочие инструменты, которые изменяют нэйтив код. При этом всегда размер кода увеличивается. Чем выше размер, тем больше в коде мусора, который собрал морфер. В таком случае нужны спец средства для свёртки кода, это сложная задача. Тоесть вначале нужно определить формат кода, перед началом работы с ним.
Для ТС. Го - это компилируемый язык. Нету там вм. Жирный там - ибо рантайм у него огого) и он линкуется статиком. Решай кракми от обратного - если выводит строку - ищи строку в иде и смотри кто юзает, дальше лоализуй код, где проверка (если есть или что та м у тебя) или Месаджбокс итд. При взломе главное выцепить часть которая нужна, а не реверсить все подряд.
Да я нашел, спасибо, меня интересует поиск имени функции и что значат магические цифры в скриптах приведенных мною в статьях. Какой-то статьи с подробным разбором я не нашел, указывються ссылки на исходнки go и еще пару источников... Как я понял , востановление имен было поднято на конфиренции ZeroNight 2016, запись я не нашел... только призентацию)
Vadimcg, запоздалый оффтоп, https://habrahabr.ru/post/218887/ "Анализ приложения защищенного виртуальной машиной"