Как стать автором
Обновить

Комментарии 119

Неожиданно, Хабр снова торт.

После многочасовых мучений выяснилось, что первый вариант отпадает. И даже не потому что в даташите на мой чипсет (Intel Skylake / Kaby Lake) нет описания как послать произвольную SPI команду по шине, это я смог найти в даташите у китайцев. Чипсет нагло игнорирует мои попытки послать запрос, будто эта фича (SPI Software Sequencing) отключена, короче я так и не нашёл, где её включить.
Начиная со Skylake как раз режим software sequencing больше не поддерживается.

Там всё интереснее, сами регистры есть, реагируют на чтение/запись именно как и раньше, но команду всё равно исполнить не удаётся.

Потому что ME постоянно в цикле снимает бит flash cycle go. Попробуйте отключить МЕ HAP-битом и swseq заработает, скорее всего.
Статья просто потрясающая. Уровень работы с железом, зашкаливающий. Тут меня более всего подивила отладка UEFI, даже не знал что так можно делать.
Громадное спасибо за статью, снимаю шляпу за проделанную работу! Это прям хабртортище!

Grub умеет прикидываться биусом, я бы для него модуль дописывал и эмулировал диск, но так тоже интересно)

А можно подробнее про прикидывание BIOS-ом? fakebios/loadbios? Если да, то с ними даже DOS не запустить :(

Как происходили поиск и идентификация отладочных пинов?

На жёстком-то? Из инета взял, даже на хабре статья по ним была. Но вообще гляньте прошлую мою статью, там рассказывал.

А вы не изучали, есть ли в прошивке жестких дисков настройки усиления и уровня 0 и 1? Чтобы считывать данные однократно затёртого нулями диска пусть и с огромным количеством ошибок.

Вот этого не подскажу. За чтение отвечает отдельный микроконтроллер, и там всё настолько точно подогнано, что сомневаюсь в возможности. Лучше спросить у спецов по восстановлению данных.

На хабре видел статью по флешкам по этой теме.

Статью по считыванию остаточного заряда обнулённых флешек?

Да, правда, без подробностей реализации

https://habr.com/ru/post/484872/

Настройки есть, много разных таблиц, изучить это все можно, но это очень кропотливый и много месячный труд, но это только про настройки усиления… Они не помогут для считывания перезаписанных данных.

То чувство когда только что компилировал efi-приложение на базе edk2, а тут такое.. Снимаю шляпу.

Не смотрели, прокатит ли такой трюк с SSD? Ибо мобильный HDD в чачестве системного харда - боль.

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

теперь ждём от вас статью про такую же модификацию SSD

Не смотрели, прокатит ли такой трюк с SSD? Ибо мобильный HDD в чачестве системного харда - боль.

Эхъ, в былые времена с дискеток систему подгружали(1я, 2я, 3я..) - счастливые ходили;)

Блеск! Технопорно.
Я так понял, по паспорту диска всё равно можно заподозрить неладное. Правда это никак не поможет, ОС всё равно не сможет туда писать и оттуда читать. Такой подход может пригодиться при проверке на границе, например.

Разве что по служебному паспорту, где будет несколько разных Max_LBA. Обычный ATA паспорт подозрений не вызывает, в нём что угодно написать можно. Например, так в Xbox 360 "прошивали" HDD, полностью подсовывая паспорт от другого диска.

А утилиты вроде Victoria не покажут неладное?

Неа, хоть отформатируйте целиком, это по-прежнему винт на 160

Неладное можно заподозрить уже по наклейке, на которой 320 гигов, а все ОС видят 160. Даже и без наклейки нехарактерный объём наводит на мысли.
Если взять диск на 1 TB, разбить по 500, и сменить наклейку, то будет выглядеть реалистично.
Наклейку легко удалить. Перфекционист может заменить.
сказать что отрезал лишнее из-за битых секторов))
  1. Для этого ноутбук нужно как минимум разобрать. Простая проверка с помощью LiveCD или вообще загрузки в имеющуюся ОС никак не заподозрит неладное.

  2. Наклейку можно оторвать/сделать частично нечитаемой/заменить на наклейку от другого диска подходящего размера.

lshw ведь все равно покажет правильную модель? Или я что-то упускаю?
При наличии полной версии жемчужины емнип в паспорте диска можно хоть LOL-KEK-CHEBUREK-999 сделать, что и будет отражено в lshw и прочем софте, который этот паспорт запрашивает.
чем для вас 160 нехарактерен? обычный член ряда 10-20-40-80-160-320-640 (он же, кстати, 9-18-36-72-150-300-600 в SCSI/SAS сегменте), который потом сменился рядом 250-500-1000-2000-4000
и наклейку можно поменять
Это изготовление троллейбуса из буханки хлеба и не более. SSD уже повсеместно вытеснили HDD в качестве transactional storage. Любой приличный SSD поддерживает TCG Opal. В Opal есть locking ranges. Это все, что нужно знать для «проверок на границах».

Отличная статья!
Есть предположение, что можно добиться примерно того же результата на дисках, которые поддерживают спецификацию OPAL 2. Там можно определять области диска, которые доступны на чтение или запись или недоступны вообще. И удалить эти области можно только обладая паролем админа от этого диска.

А там не будет ли ситуации, когда видно, что область есть, но доступа к ней нет? Или прям совсем скрывается, уменьшая размер диска?

Прям совсем скрывается, диск теперь считает, что у него другая конфигурация

Попробовал загрузиться с другого устройства без расшифровки основного OPAL 2.0 диска (Samsung 970 Evo Plus) — Evo видится как маленький EFI System Partition (где лежит sedutil, запрашивающий пароль) плюс "нераспределённая область" на весь размер шифрованной части. При этом, если расшифровать, маленький EFI раздел полностью исчезает. Непоследовательно как-то, могли бы точно так же скрывать большую часть в заблокированном состоянии.

Когда диск совсем нерасшифрован - у него особый режим: MBR - небольшая незашифрованная область, которая помогает загрузиться машине и провести процедуру расшифровки диска.

А вот если будет кусок диска доступ к которому совсем закрыт, а у другому открыт - я не знаю, что будет. Надо экспериментировать. :-) Насколько я понимаю это весьма редкие режимы работы OPAL.

MBR в заблокированном состоянии, естественно, видеться должен. Мои претензии к тому, что в нём так же видится (как неразмеченное пространство) и шифрованный объём. Так понимаю, диск сообщает системе полный объём, а та уже понимает что таблица разделов в MBR описывает существенно меньшее пространство и показывает «у вас там есть ещё».

Кстати, «раз уж все здесь», вопрос к специалистам по UEFI: давно мечтаю написать (или найти готовый) UEFI-модуль, загружаемый из этого самого видимого MBR-раздела, который бы запрашивал пароль, посылал в OPAL-диск (это команды Security Protocol In/Out), подхватывал изменившуюся конфигурацию диска и продолжал загрузку с него же, не перезагружая систему (как сейчас делает sedutil). Это вообще возможно?

Ну если это будет небольшой GPT раздел с .efi загрузчиком, то он подхватится автоматом, с посылкой команд диску проблем не вижу, тот же ATA протокол задействовать, если чего. А вот как потом без перезагрузки сбросить диск и вызвать загрузчик операционки (естественно, тоже EFI) - не скажу, но думаю, что возможно

Вроде как PBA от sedutil делает именно это - загружает OS после разблокировки диска, так что наверняка это возможно.

Но насколько я понимаю, проблема в другом: засыпание OS + блокировка диска и пробуждение с разблокировкой диска. Я надеюсь увидеть как это делает Windows 10, но пока не придумал как заставить его использовать аппаратное шифрование диска с которого он сам и грузится.

Как раз sedutil PBA и пользуюсь сейчас, но он довольно медленный: сначала стартует сильно урезанный образ Linux, содержащий приложение, запрашивающее пароль, посылающее команду дискам и перезагружающее систему, дальше идёт повторная загрузка с того же диска, но уже из шифрованной части. Вместо этого хотелось бы как-то так: из MBR грузится UEFI-приложение, запрашивает пароль, посылает его диску, перечитывает конфигурацию диска и продолжает с него загрузку.
Режим сна и OPAL — отдельная проблема пока без нормальных решений (видел костыли с удержанием пароля в RAM и повторной отправкой его диску, спасибо, не надо), у меня он просто отключён. Проблему режима сна наверное решило бы встраивание вышеописанного UEFI-модуля в BIOS? (повторно запросить пароль и разблокировать диск до восстановления контекста ОС?) Или загружаемому модулю как-то можно "остаться резидентом" и вмешаться в процесс пробуждения?

Со сном проблема, там пробуждение идёт очень урезанно, только с этапом PEI, не представляю как меню выводить. Только если сохранять пароль где-то

Если для хранения пароля использовать TPM, то мне кажется можно было бы и не хранить пароль во время сна. Ведь BitLocker умеет доставать секреты для расшифровки диска без каких-либо паролей, просто из TPM, который в свою очередь гарантирует, что загрузка прошла без модификаций.

В общем я читал, что Windows 10 умеет использовать OPAL 2, но вживую этого не видел. Было бы интересно посмотреть.

У Linux добавили какой-то патч для NVME, чтобы сохранять пароль от OPAL на время сна, но как это работает - опять-таки неизвестно. Надеюсь, что это временный, дополнительный пароль только на время сна.

Если для хранения пароля использовать TPM, то мне кажется можно было бы и не хранить пароль во время сна. Ведь BitLocker умеет доставать секреты для расшифровки диска без каких-либо паролей, просто из TPM, который в свою очередь гарантирует, что загрузка прошла без модификаций.
BitLocker не хранит секреты в TPM. Он может использовать TPM в качестве key protector (как они это называют). Ключ для шифрования данных в любом случае хранится где-то снаружи, либо в защищенном виде, либо нет.

В общем я читал, что Windows 10 умеет использовать OPAL 2, но вживую этого не видел. Было бы интересно посмотреть.
Скорее всего, вы читали про Encrypted Hard Drive, а не про Opal. Это не эквивалентные вещи: Microsoft eDrive дополнительно реализует протокол на основе IEEE 1667 для provisioning дисков с аппаратным шифрованием, который и используется в BitLolocker (точнее, может использоваться, потому что по умолчанию – не используется).

Можно ли таким диском пользоваться вне экосистемы BitLocker у меня возможности проверить нет. Насколько понимаю, с этим могут быть проблемы.

У Linux добавили какой-то патч для NVME, чтобы сохранять пароль от OPAL на время сна, но как это работает — опять-таки неизвестно. Надеюсь, что это временный, дополнительный пароль только на время сна.
Вы про это?

Не знал, что PBA перезагружает комп после разблокировки диска. Это многое объясняет.

Это вопрос реализации. BitLocker c включенным eDrive и пин-кодом – это тоже PBA, однако перезагрузка не требуется.

А зачем для разработки и отладки UEFI-драйвера встраивать его в прошивку? Можно же из Shell или через Driver Option загружать его с флешки, а потом реконнектить все драйверы, чтобы диск заново обнаружился.

О, драйверы можно реконнектить? Если есть какие материалы про такую отладку почитать, присылайте, было бы круто! А так да, встраивал чтобы до ATA драйвера запуститься и успеть послать переключение до того, как разметку начнет читать.

Исходники команды disconnect из UEFI Shell: https://github.com/tianocore/edk2/blob/master/ShellPkg/Library/UefiShellDriver1CommandsLib/Disconnect.c
Правда, не знаю, поддерживает ли драйвер AHCI контроллера disconnect.


Ещё можно по-другому обойтись без встраивания – переключать и перезагружаться, если от перезагрузки состояние диска не сбрасывается.

habr.com/post/274463 → «Тестируем результат в UEFI Shell»

Ня! Жаль, нельзя второй плюс в карму. Да что там — два.

Это торт, я джава года ждал такого качественного материала.

Шикарная статья! Великолепный низкоуровневый уровень работы.

Мужик, ты псих ненормальный. Аж подбивает самому статью написать про что-нибудь из реверса и низкоуровневого треша.

Когда я был маленьким и 32 МБ памяти ОЗУ считалось невероятным количеством и интернета не было почти вообще, мне пришлось приобрести новый жёсткий диск большего размера. Этот диск не виделся биосом и требовал подгрузки драйвера с дискетки. И вот этот самый пионер(которым я был) умудрился слить прошивку биоса и приклеить к ней кусок кода с дискеты поправить адреса вызовов (в текстовом редакторе, консольке и паскалем), перешить обратно и… оно заработало, но на сегодняшний момент я такую магию провернуть не смогу от слова совсем, что изменилось? Почему тогда всё казалось возможным а сейчас: не работает — ну его подальше ))))

А теперь напридумывали всякие ооп, абстракции, шаблоны проектирования, специализированные микросхемы вместо универсальной логики, надмозговый оверинжиниринг в самых примитивных задачах, так что железки по сути стали обфусцированным неподдающимся доработке шлаком.

Если бы не было этого шлака, то прогресс был бы гораздо медленнее, а так благодаря всем этим абстракциям и т.п. разработка проще, легче, дешевле. То, что в статье описано, это круто конечно, но это удел меньшинства. 99% людей это вряд ли понадобится.

Но это не меняеет того, что для инжинера железки по большей части не пригодны и приходится брать специально промышленные ОЕМ модули, которые рассчитаны на дальнейшую разработку, и стоят в 10 раз дороже. И то порой даже в ОЕМ палки в колеса ставят, добавляя всякие проверки подписи и защиты от постороннего вмешательства.

Пробный запуск OpenOCD показал

А как вы делали этоот пробный запуск?

Если его запустить с конфигом, где прописан один какой-нибудь проц, то он при поиске JTAG показывает, мол, нашлось совсем другое, и список идентификаторов в логе перечисляет

А может, аппаратно? 2 диска и условный переключатель П2К (или мультиплексор/шинный формирователь шустрый) на sata/pcie?

Тогда уж проще, как в вопросе из заголовка, переключатель на питание повесить. Тут интереснее вышло, диск с виду один, но с секретом

Почти в любой цифровой железке без питания начнут срабатывать защитные диоды и повесят шину.
Можно пару мелких M.2 встроить в корпус SATA

SATA — развязан по постоянному току, ему пофиг.

Я понимаю, что немного в сторону, но не проще на жестком диске посредством Lnux сделать четвертый раздел и установить туда тот же Linux.
Поясню, в Windows есть ограничение на количество разделов на одном диске в количестве трех - не размеченная область, диск 1 и Диск 2...

При этом есть нюанс, Windows новый раздел не видит, а Linux видит всё.

Да вроде в десятке уже без ограничений, даже на флешке дюжина разделов теперь видится. И конечно же проще, но не так интересно!

Какая то у Вас не такая windows, чем у нас. Захожу в «Управление дисками», и вижу сколько угодно разделов. Даже с тем же Linux, или если буква не назначалась, то «невидно»?

Честно говоря я не знаю, в чем была причина, но в моем случае было именно так, при разметке диска область не монтировалась и её не было видно... Могу с легкостью отнести этот эффект к моим кривым рукам :)))

Возможно, вы создали франкенштейна с одновременно активными MBR и GPT, и разные ОС читали разные таблицы разделов.

Но разделы и/или неразмеченное пространство будет видно, а тут нет, хоть полное форматирование делай хоть что, второая половина самодостаочна и независима.
Позвольте! На винте с MBR было ограничение в 4 логических раздела. Но есть один сделать Extended, то внутри можно разместить ещё много (не помню про ограничение). Вот в GPT поменяли расклад, поскольку до сих пор(!) не пользуюсь таковыми, точных сведений нету.
Потрясающий материал!
Столько трудов в него было вложено, столько исследований проведено и собрано в финальную статью!
Буду читать ещё раз, а то не всё с первого раза уложилось и появилось множество вопросов.
Особенно понравилось отключение проверки выхода за пределы максимального LBA. Преобразование ATA в код, LBA из ATA команды во внутренний LBA, добавление патча в конец модуля.
Шедеврально!

А отключение проверки на выход за пределы максимального LBA не приведёт к тому, что кривой софт, запущенный с первой половинки диска, повредит данные на второй половинке диска? Или эта проверка перенесена в транслятор, меняющий номер запрашиваемого LBA-блока?

Именно, проверка теперь производится в коде переключалки. Без этого и правда можно было бы считать / записать вторую половинку при работе из первой

Жаль не могу плюсик нажать, офигенный материал. ​

Скажите, а физическая головка чтения/записи только половину площади самой поверхности использует ? Или файл может оказаться в любом месте ?

Точно сказать нельзя, диск внутри себя транслирует логический номер сектора в реальное место на диске. Но вообще, тут диск с одной пластиной и двумя головками, предположу, что в "режиме 0" почти все данные будут размещаться на одной половине блина HDD (головка 0), а в "режиме 1" - соответственно, будет использоваться вторая половина блина (головка 1).

Предположу обратное ))

Титанический труд, хвала исполнителю.
Наверно несложно будет реализовать режим «только для чтения» для основного раздела, записывая изменения на дополнительный и отдавая ОС актуальные данные, а во время перезагрузки реализовать возможность выбора — продолжить модификацию данных, откатиться к исходному состоянию или модифицировать его до текущего.

В случае с HDD откат / модификация будет занимать продолжительное время (копирование 160 гигов внутри диска), но вообще возможно.

Откат мгновенно, просто путём удаления дельты.
В ней хранить список модифицированных секторов и собственно их актуальное содержимое. При обращении ОС к номеру сектора, имеющемуся в таблице, отдавать модифицированное содержание (вплоть до перезагрузки). За сессию ведь перезаписывается не так много секторов, причём часть из них — повторно — часто модифицируемые файлы, промежуточные состояния можно отбрасывать.
Можно вообще добавить возможность фильтрации по типу файлов или папке, к примеру изменения в реестре или в системной папке не фиксировать без необходимости, «забывая» при перезагрузке.

ps. Список и содержимое модифицированных секторов вообще можно хранить в ОЗУ, пока его объёма достаточно.

Тут уже посложнее, например, если в диапазон чтения попадает как оригинал, так и измененные данные, понадобится их как-то соединить.

Карты в руки — можно вывести в лог номера перезаписанных секторов и оценить их долю в объёме раздела.

Я про случай, когда в одном ATA запросе читают диапазон секторов, в котором как неизмененные, так и измененные сектора попадутся. Это придется внутри диска их по отдельности вычитывать, чтобы целиком ответ вернуть.

Задержка, да. Возможно, не слишком значительная.
HDD минимизирует движения головок
"Представьте диск с 4-мя магнитными головками, и вы хотите добиться линейных чтения и записи. Разумеется, диску необходимо использовать все 4 головки, и понятно, что вы хотите получить максимально возможную скорость операций. Для уменьшения движения головок диску необходимо переключаться с одной головки на другую, и логично было бы читать все треки одной головки до переключения на другую, но при этом первая головка с большой вероятностью будет наиболее загруженной, по сравнению с остальными.

Для уменьшения движения головок и для выравнивания загруженности каждой из них диски используют различные схемы чтения и записи.



Красные линии показывают путь, по которому пройдёт блок магнитных головок во время чтения или записи. Как вы можете видеть, путь зигзагообразный. Количество треков в зигзаге может отличаться на разных дисках и на современных дисках также может быть уникальным для каждой головки каждого диска (поскольку головки имеют различные параметры TPI и изменяющиеся зигзаги помогут уменьшить движения БМГ)."

Похоже, задержка на переключение головки относительно небольшая. Что если уполовинивать HDD именно переключением головки — тогда для чтения оригинальной/модифицированной версии сектора будет достаточно выбрать нужную головку и дождаться сектора, пропустив один оборот шпинделя (8 мс для 7200 об/мин)?
Конечно, для скорости потокового чтения задержка будет губительной, но большие файлы как раз модифицируются гораздо реже.
А отключение неисправной головки сервисные утилиты должны поддерживать, наверно и в прошивке есть для этого какой-то механизм.

Не, ну это ещё больше усложняет задачу :)

Данные пишутся кусочками (зонами) на каждую головку, и есть определенные механизмы трансляции логических координат в физические. В одну зону может попадать сразу несколько треков по одной головке. Для реализации вашей идеи надо нехило переписать код диска и изучить принцип трансляции. Более того, все подобные изменения подходят только для конкретно одного изучаемого диска, если вы захотите повторить подобное на другой модели, вам придется все заново изучать и модифицировать. Но если у вас есть огромный опыт в такой работе, это не составит труда. Но теоретически, если очень сильно заморочиться, такое возможно.
Снимаю шляпу, крутая работа. Только не делайте так с макбуком)
Потрясающая глубина проработки кучи материала! Снимаю шляпу!
Класс! Спасибо!
Несколько вопросов от полного нуба в EFI, если можно :)
1. Когда драйвер выгружается? Не получится ли так, что он сработает на какое-нибудь «позднее» Ctrl-C и переключит хард, который уже используется?
2. События синхронные? В смысле, если кто-то очень быстро два раза нажмёт Ctrl-C, оно не отправит команду дважды? А если хард определится во время обработки Ctrl-C?
3. Не стало ли медленнее читать/писать данные харду? Подозреваю, что нет, но было бы интересно потестировать.
4. Можно ли написать EFI-драйвер, который будет жить параллельно с осью, или это всё выгружается при старте оси?
5. Правильно ли я понимаю, что secure boot с этим всем несовместим?
  1. Выгружается с запуском системы, сейчас позднее переключение возможно, но если убрать отправку на все текущие диски, оставив только реагирование на новые обнаруженные диски, проблема решится

  2. Ctrl+C только выставляет флажок, на каждый диск команда отправится единожды. И даже если отправить дважды, повторная посылка ни на что не повлияет

  3. Тут только разница в скорости чтения между началом и концом диска. Сам патч на скорость не влияет

  4. Можно, но больше ограничений в плане возможностей и скорости работы

  5. С Secure Boot можно жить, а вот всякие BIOS Guard, которые проверяют целостность прошивки ноутбука помешают засунуть свой драйвер

4 — я видел UEFI-модуль, который при запуске копировал свой шпионский драйвер в windows/system32…

Visual Studio нынче 2 языка вроде бы сразу ставит?

Но если нет – можно доставить, сейчас инсталлятор стал, по ощущениям, сильно лучше в плане простоты и скорости до-установки компонента, нежели он был раньше :)

FT232H с алиэкспресс
Напоминаю, официальный драйвер FTDI окирпичивает китайские клоны.

Не, тут оригинальный FT232H, а не китайский FT232, с этим проблем нет

Утирая скупую мужскую слезу, вспомнил как припаивал модем к спектруму, никак он не хотел работать.
В схеме подключения была ошибка, я этого не знал и искал ошибки у себя, в итоге ее выявил. Квест был тот еще.
Очень печально, что вы постите в паблик информацию, которая является конфиденциальной, благодаря таким как вы, современные накопители все больше и больше защищают от реверса и каких либо внесений изменений в их код, встраивают аппаратные шифрования данных. Производители жестких дисков не дураки, и они мониторят все, что касается их интеллектуальной собственности. Также вы помогаете вирусописателям, которые могут использовать подобные команды и методики в корыстных целях. Этим постом вы ускоряете приход того момента, когда в случае выхода из строя жесткого диска вам не сможет помочь уже ни одна фирма по восстановлению данных. На текущий момент уже есть в продаже накопители, где в случае серьезного выхода из строя платы электроники, вам никто не поможет.

Цель статьи - показать общие техники, подходы к изучению и модификации любых устройств. По WD в сети очень много информации - сервис команды прямым текстом, утилиты, статьи по JTAG и переделке прошивки. Как можно видеть, даже из программ всё это извлекается максимум за час, кому нужно, он и без статьи достанет. Сомневаюсь, что известные многим 4 команды изменят картину.

Очень печально здесь совсем другое.

У нас имеется относительно тонкая прослойка т.н. «специалистов», сидящих по закрытым форумам, и у себя там занимающихся реверс-инженерией, взломом прошивок, написанием утилит и т.п., а затем использующая эти знания для того, чтобы свои услуги и знания подороже продать. Пока все нормально, ничего необычного.
Но, при всем этом, эти «специалисты» свято уверены в том, что эти их «ноу-хау» надо ревностно охранять, иначе на них заработает кто-то другой, либо, не приведи рандом, производитель исправит свои баги, и тогда придется реверсить снова. А на любого, кто посмел эти же знания получить из других источников, даже с первой страницы гугла, и затем поделился ими, таковые «специалисты» яростно нападают, обвиняя авторов материалов в крысятничестве, помощи неведомым злоумышленникам, лишении хлеба честных трудяг, и прочих смертных грехах по отдельности и скопом. Вот это все — уровень ремесленника, а не специалиста, и смотреть на засилие таких «специалистов» в русскоязычном интернете уже просто сил нет никаких.
“Кто-то недалекий из числа моих бывших коллег посчитает эту книгу предательством или, как минимум, помехой в славном деле борьбы с преступностью. Мол, раскрыл все секреты. На самом деле профессиональные секреты могут быть только у провинциального ремесленника, конкурирующего с таким же, как он сам, гробовщиком или горшечником. Если виртуоз-скрипач, карточный шулер или летчик-ас вам расскажут, как они все это проделывают, вы все равно на скрипке не заиграете, в карты продуетесь, а самолет в небо не поднимете. «Недостаточно овладеть премудростью, нужно также уметь пользоваться ею» (это сказал не я, а Цицерон).”

Владимир Андреевич Ажиппо. “Не зарекайся.”
Специалисты без кавычек знаниями своими охотно делятся, потому что между ними и обывателем — пропасть из многих лет опыта решения реальных проблем. «Я статьи и книги читал!» «Ну да, я их писал.»
Нет, продолжаем считать, что писать статьи, и этим помогать тренировать новичков и создавать интерес к теме — это все зашквар, подготовка себе замены, и уменьшение потенциального дохода…

Именно по этой вот причине у нас тут, ребята, в нашем ИТ все через жопу, и именно поэтому писать статьи на русском практически некому и практически не для кого.

Может и не стоит так уж переживать за "наш" ИТ и против течения пытаться что-то тут особо улучшить? Контрибьютить по мере возможности на русском, но не рассчитывать при этом на какую-то большую пользу. А в мировом интернете и места больше и признание шире и отношение другое.

Специалисты без кавычек не пишут посты в интернет) У них хватает своей работы и заниматься обучением новичков, вот таким вот способом могут только те, у кого много свободного времени, либо в целях саморекламы. Опять же, на написание подобной статьи думаю не мало времени потрачено с учетом каждого этапа работы. Но я сильно сомневаюсь что истинная цель была та, которую озвучил автор. Повторить подобное смогут единицы, и гораздо полезнее было бы, не описывать весь этот процесс а реализовать подобное решение так — чтобы оно было доступно каждому. Например написать какой то софт или сделать аппаратное решение.
Специалисты без кавычек пишут посты в интернет, и для новичков, и для саморекламы, и для самореализации через распространение знаний, потом что распространение знаний — это кайф само по себе, а написание статей очень помогает в деле систематизации и кристаллизации знаний из формата «облако смыслов» в формат «связный текст».

По сути своей реверс инженеринг — это кража интелектуальной собственности
Извините, но больше мне с вами не о чем разговаривать, у нас принципиально различные взгляды на жизнь, и к согласию мы не придем.

гораздо полезнее было бы, не описывать весь этот процесс а реализовать подобное решение так — чтобы оно было доступно каждому

Хочешь накормить человека один раз — дай ему рыбу. Хочешь накормить его на всю жизнь — научи его рыбачить (с)

Не применительно к данной ситуации:) Через лет 5 все кардинально поменяется и описанные методы уже не помогут. Оно уже не поможет на новых дисках. В описанной статье диск примерно 2009-2011 года выпуска. Попробуйте повторить на диске 2020 года выпуска.
Встречный пинок — сколько лет уже существует марвел и сколько лет назад были раскрыты «секретные» команды WD в ATA терминале?
Производители дисков не раскрывали пока никаких секретных команд. А вот некие Васи и Пети которым они достались нахаляву — выложили их в сеть. Но это только приблизило момент блокировки доступа технорежима. Так теперь и китайцы украли платы или технологию разлочки плат и продают их направо и налево. Но производители не стоят на месте и придумывают новые защиты и они уже стали на очень серьезном уровне. Например если раньше можно было для диска с интегрированым юсб поставить аналогичную сата плату и вычитать данные, на новых дисках уже не прокатит этот способ. Диск будет определяться но ни одного сектора вам не отдаст.
Вот только что я на старом IDE вестерне пересчёт листов делал, что спустя чёрти сколько лет на более свежем ноутбучном SATA, скрипт вообще не поменялся. А про подброс плат — последний раз, когда мне надо было вытащить данные с USB WDшки я предпочёл не мучать отвёртку, а просто подкинуть SATA напрямую, тупо припаяв огрызок кабла к плате. И сработало.
Кстати говоря, с нынешней копроэкономикой реверс скоро станет бессмысленным, т.к. вообще всё железо становится одноразовым.
Я лично знаю человека, занимающегося реверсом очень серьезно. Человек потратил десятилетия на изучение всех имеющихся дисков, написание по ним софта, и продолжает их изучать. Проблема в том, что почти все, кто что либо выкладывает в открытый доступ, как правило у кого то это украли (скачали, подсмотрели через IDA). У таких людей нет адекватной оценки того что можно и нельзя. И сейчас это распространяется на все области, если что то досталось нахаляву, то почему бы мне не отдать это всем, чтоб все думали какой я молодец. Тренировать новичков можно, но при условии, что у человека есть желание самостоятельно изучать и вникать в эту тему, а сейчас многие просто хотят по быстрому срубить бабла, и просят выдать им все и сразу, не желая даже вникать в элементарные основы. Те же, кто действительно сам, без чьей либо помощи смог дизассемблировать прошивку диска и изучить его команды, написать свое ПО, не будет распространять добытую большим трудом информацию, это логично. По сути своей реверс инженеринг — это кража интелектуальной собственности, цели у всех свои, но выливать это в сеть, я считаю неэтично. Но у многих отсутствует понимание что такое хорошо а что такое плохо. И все это ведет к тому, что пройдет лет 5 -7 и все, что можно будет сделать в случае поломки любого устройства, это его выкинуть и забыть. Жаль что многие этого не понимают. Мы сами роем себе могилу подобными постами. Есть вещи, о которых можно говорить, а есть те, что должны оставаться в тайне, если пытаться докопаться до всего и раздать это всему миру — грядет огромная катастрофа…

И все это ведет к тому, что пройдет лет 5 -7 и все, что можно будет сделать в случае поломки любого устройства, это его выкинуть и забыть

Право на ремонт лучше отстаивать на законодательном уровне, а не через припрятанные в кармане уязвимости реализации security through obscurity, имхо

Классная статья! Спасибо!
Интересно, при очередном обновлении 10, может прилететь обновление bios / uefi, оно затрет изменения или нет?

Да, затрётся, раздел UEFI перезапишется целиком

Браво!

Осталось только оформить все это в виде юзабельного простыми людьми инструментария и можно будет с БГ поручаться.

Впечатляет! Спасибо за статью. Проделал все тоже по ней с Intel NUC и уже исследованным ранее с помощью ft2232HL диском. Не пользовался только отладкой с SpiWrite(): прокинул зависимости на EFI_GRAPHICS_OUTPUT_PROTOCOL.
Подскажите по SpiWrite(), SpiRead(), откуда они?

Это мои функции, реализующие Intel SPI Hardware Sequencing протокол.

Спасибо, а то уже на libMPSSE от FTDI начал думать.

Там как раз вся суть в том, что через чтение BIOS производится дебаг. И эмулятор и отладчик в одном лице, удобно.

Да, здорово, что DediProg заложили необходимый функционал. Сам был удивлен, когда забрал такой эмулятор за сотню долларов на e-bay. Видимо зря игнорировал "SPI Hyper Terminal".. Хотя посещали мысли из драйвера выплевывать нечто по SPI и смотреть trace.

Нашел доки на свой чипсет, попробую реализовать SpiWrite(), SpiRead() .

Там несложно, я в другой статье пример на Python выкладывал.

Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.