Комментарии
Причины по которым были созданы эти 2 режима мне неизвестны (знатоки в комментариях очень даже приветствуются)Денис Юричев «Reverse Engineering для начинающих»:
«x86 всегда был архитектурой с инструкциями переменной длины, так что когда пришла 64-битная эра, расширения x64 не очень сильно повлияли на ISA. ARM это RISC4-процессор разработанный с учетом инструкций одинаковой длины, что было некоторым преимуществом в прошлом. Так что в самом начале все инструкции ARM кодировались 4-мя байтами. Это то, что сейчас называется «режим ARM». Потом они подумали, что это не очень экономично. На самом деле, самые используемые инструкции процессора на практике могут быть закодированы c использованием меньшего количества информации. Так что они добавили другую ISA с названием Thumb, где каждая инструкция кодируется всего лишь 2-мя байтами. Теперь это называется «режим Thumb».»
Т.е. похоже все дело в простой экономии памяти.
Немного исторического контекста: это было во времена проникновения и закрепления ARM в мобильных телефонах, относительно дорогих flash с размерами меньше мегабайта и узкими (8/16 бит) шинами. Thumb (который по сути был небольшой надстройкой над ARM — второй декодер команд, управляющий тем же ALU) убил сразу двух зайцев — выше плотность кода (и экономия за счёт меньших flash в массовом продукте) и чтение очередной команды за одно обращение по 16-битной шине.
Была даже кое-какая конкуренция именно в направлении уплотнения и именно под телефоны: Motorola с нуля разработала свою ISA M*CORE (вообще без 32-битной кодировки, только 16, но с эффективным кодированием часто используемых 32-битных констант вроде битовых масок) и гордо публиковала сравнения с ARM/Thumb в свою пользу, но в итоге таки перешла на ARM.
А Thumb потом развили до нынешнего Thumb-2, позволяющего совмещать 16- и 32-бит кодировки без явного переключения режимов.
А что это за процедура с гермоблоком? Имеешь в виду образ флеш памяти с платы hdd?
Мне кажется, что если, к примеру, прикрутить плату к HDD с другого похожего HDD, диск заблокируется. Данные, наверное, не шифрованы. Но, происходит сверка каких-то данные между этими тремя компонентами. И, если все гуд, диск работает как надо. Но, если соответствия нет, на блины запишутся данные, которые его заблокируют. А, кроме платы, ничто не может сменить данные на блинах.
Плюс, мне кажется, что код, который отвечает за генерацию ключей лежит исключительно внутри IC, или Winbond Flash. На блинах нету ничего, что связано с этим уровнем. Так или иначе, мы работаем с debug меню диска. И, раз это debug меню, было бы глупо располагать его на блины: блин сломался — дебега нету.
Короче, я уверен, что были и другие способы взломать этот челлендж. И, ребятам из редбалун были бы точно интересны другие способы взлома. Но, мои познания в железяках ограничены. Это мой первый прошитый чип.
Я пытался прогнать дизассемблером по прошивке с флеш, но там все запаковано.
возьмите помощь зала. Их есть у нас :)
Стек это FIFO конструкцияFIFO — это «первым зашёл — первым вышел». По этому принципу работают очереди. У стека несколько другой принцип: «последним зашёл — первым вышел», то есть LIFO. Прошу прощения за занудство.
что такое LED я до сих пор не понял
Это специфичное для дисков Сигейт состояние firmware. LED является аналогом try… catch с переходом в abort, где собственно abort и будет состоянием LED. т.е. диск падает в контролируемый exception, сообщая либо адрес, где произошло исключение, либо код ошибки, который подскажет что именно произошло.
Для контролируемой передачи управления на вектор обработки LED исключений (на Сигейтах) используется ARM-инструкция SVC (aka Supervisor Call), которая пошлет диск в обработчик SVC (тоже есть в таблице векторов)
Это задание как-то можно было решить слив данные с блинов, или как-то из flash чипа?
это зависит от цели вашего квеста.
Если вы всего лишь хотите добраться до последнего раздела с данными (который вероятно не виден из-за обрезанного размера диска), то да, достаточно влить правильную прошивку и вы увидите все пространство диска, со всеми разделами.
Если же цель пройти все задания, то нет. Так как ключ генерится посредством самописного алгоритма и не хранится в открытом виде.
Даже без глубоких знаний внутренностей Seagate можно сравнить дампы flash двух разных прошивок (из разных уровней задания) и попробовать нащупать логику открытия следующего раздела. Судя по фрагменту патча в нулевой части статьи, код там уже распакованный.
Disclaimer: это не в коем случае не «смотри как надо было», вы публикуете «детектив» по частям, а нам не терпится угадать «кто убил» :) Ждём продолжения!
Также, представляю, что за ужс будет на третьем уровне. Воображение подсказывает самые сумасшедшие варианты, вплоть до необходимости распознания кастомных сервометок и геометрии дорожек, которые надо рассчитать отдельно и вписать в прошивку, иначе диск вообще будет думать, что область с третьим разделом неисправна. Жду с нетерпением!
Я не пытался как-то бэкапить диск, или пытаться открыть следующие разделы. На это есть несколько причин — то, что адрес начала раздела смещен — лишь моя догадка. Как они зарулили прошивку чипа так, чтоб раздела были закрыты — для меня до сих пор загадка. Брошу hddscan прошивку с флешки, и может что-то будет понятнее. Еще 1 причина — даже если я открою раздел, там может лежать шифрованный архив — и как я его открою?
Ломаем зашифрованный диск для собеседования от RedBalloonSecurity. Part 0x01