Как снять supervisor password ноутбука ThinkPad T60 с помощью Arduino
1Виды паролей в ноутбуках серии ThinkPad
В ноутбуках Lenovo (IBM) серии ThinkPad существует несколько видов паролей.
- Power on Password (сокращённо POP) – требуется после включения ноутбука, без ввода этого пароля компьютер не загрузится;
- Hard Disk Password (HDP) – блокирует доступ к содержимому жёсткого или твердотельного диска;
- Supervisor Password (SVP) или пароль супервизора – блокирует вход в BIOS, соответственно, вы не сможете поменять порядок загрузки, установить другую операционную систему и т.д.
Если вы забыли свой пароль супервизора – то не сможете полноценно пользоваться своим компьютером. Со мной такое случилось: я забыл пароль супервизора на своём стареньком ThinkPad T60, и когда мне понадобилось установить новую операционную систему, я не мог этого сделать. Пришлось разбираться, как можно снять пароль. Это оказалось не сложно, и для этого нам понадобятся:
- Arduino UNO или иная совместимая плата;
- в качестве альтернативы Arduino можно воспользоваться отладочной платой с микросхемой FTDI;
- соединительные провода (рекомендую вот такой набор);
- какие-нибудь крокодильчики в количестве трёх штук, удобно использовать вот такие;
- персональный компьютер со средой разработки Arduino IDE.
2Методика восстановленияпароля супервизора ThinkPad T60
Пароль супервизора хранится в ПЗУ PCA24S08 (аналог микросхемы 24C08 с защитой доступа) в зашифрованном виде. Даташит можно скачать в конце статьи. Нам придётся подключиться к ПЗУ во время работы компьютера и прочитать его содержимое. Потому что именно во время работы данные в нём лежат в открытом виде.
Чтобы подключиться к ПЗУ нам нужно снять верхнюю крышку с тачпадом и клавиатуру. Для этого открутим все винты на днище ноутбука T60, которые помечены соответствующими значками. После этого панель с тачпадом поднимается на себя со стороны клавиатуры. Клавиатура поднимается от себя к экрану. Шлейфы тачпада и клавиатуры вытаскиваются очень легко: достаточно потянуть их вверх за специальный язычок. Детально про разборку ноутбука Lenovo ThinkPad T60 можно прочитать в документе ThinkPad® T60 and T60p Hardware Maintenance Manual, начиная со страницы 64 и далее.
Все дальнейшие действия вы совершаете на свой страх и риск!
Теперь нужно припаять к плате ноутбука 3 провода, необходимые для работы интерфейса I2C: SCL, SDA и GND. На фото показано расположение точек, где удобно припаяться к SDA и SCL, т.к. не придётся разбирать компьютер полностью. Это крайнее правое переходное отверстие в ряду и 4-ое влево от него. Землю можно взять любую, её легко найти с помощью мультиметра.
Вместо пайки можно воспользоваться методом «ластика и иголочек». Суть в том, что вы берёте две или три швейные иголки и протыкаете ими ластик таким образом, чтобы при наложении ластика на плату компьютера острия иголок попали в нужные точки на плате. Этот метод проще, чем пайка, но не застрахован от отключения контакта в самый неподходящий момент. Или, что хуже, замыкания не тех сигналов.
Напомню, что у Arduino ножка A4 – это SDA, а A5 – SCL.
Ещё несколько фотографий внутренностей ноутбука ThinkPad T60 (разворачивается)
Эти фотографии не имеют непосредственного отношения к теме статьи:
3Скетч для считывания дампа ПЗУв котором хранится supervisor password
Скетч для Arduino, который по интерфейсу I2C считывает содержимое 4-х адресов ПЗУ, будет такой:
Скетч чтения памяти ThinkPad T60 (разворачивается)
#include <Wire.h> byte eeprom_addr[] = {84,85,86,87}; // это 4 I2C-адреса ПЗУ void setup() { Serial.begin(9600); Wire.begin(); Wire.setClock(10000); // скетч работает и на стандартной скорости IIC, это не обязательно int addr = 0; // только для удобства - для вывода на консоль адреса ячейки памяти for (int i=0; i<4; i++){ Wire.beginTransmission(eeprom_addr[i]); Wire.write(0); // записываем начальный адрес в ПЗУ, с которого начнём читать из него byte error = Wire.endTransmission(); if (error==0) { // запрашиваем 8 раз по 16 байт из каждого I2C адреса // таким образом мы прочитаем весь объём ПЗУ = 128 байт for (int j=0; j<8; j++){ Serial.print(addr, HEX); // выводим адрес ячейки памяти Serial.print(": "); Wire.requestFrom(eeprom_addr[i], 16); // запрашиваем 16 байт из текущего I2C адреса while (Wire.available()) { byte c = Wire.read(); // читаем и выводим содержимое ячейки памяти Serial.print(c, HEX); Serial.print(" "); } Serial.println(); addr += 16; } } else { Serial.print(eeprom_addr[i], HEX); Serial.println(" not answered"); } } } void loop() { // ничего не делаем }
Заливаем скетч в Arduino, затем отключаем от него питание. Подключаем ножки SDA и SCL Arduino к ноутбуку ThinkPad T60 в соответствии с приведённой иллюстрацией, но пока не подаём питание ни на ноутбук, ни на плату Arduino. Подключаем клавиатуру к ноутбуку. Включаем ноутбук и дожидаемся того момента, когда он просит ввести пароль супервизора. Только после этого подаём питание на Arduino. Запускаем монитор порта и смотрим, что удалось прочитать Ардуино из ПЗУ ноутбука.
В результате работы данного скетча мы получим примерно следующее (зависит от модели, версии BIOS, и других параметров, которые могут меняться от экземпляра к экземпляру T60):
4Поиск пароля супервизора ноутбука T60в дампе ПЗУ
В снятом дампе нас интересуют 8 байт, начиная с адреса 0x1B8. Копируем эти 8 байт в буфер обмена. Запускаем программу «Кодировки» и выбираем кодировку Scan Code XT. В нижнее поле вставляем наши 8 байт из буфера обмена. Нажимаем на кнопку со стрелкой и в верхнем поле увидим какие-то буквы или числа. Это и будет наш пароль супервизора. Теперь можно войти в BIOS и изменять настройки так, как вам нужно: сбросить пароль супервизора ThinkPad T60 или установить новый, изменить порядок загрузки, управлять другими параметрами безопасности.
Вероятно, в других прошивках или других версиях ноутбука Lenovo ThinkPad T60, пароль может находиться по другому адресу. Чтобы найти его, вставьте в программу весь массив, считанный из ПЗУ, и выберите кодировку ASCII. Вы увидите в поле текста слово "CON." Пароль будет находиться где-то после него. Ориентиром для поиска будет являться то, что это должны быть 8 байт, за которыми следуют точно такие же 8 байт (обратите внимание: на картинке со скетчем и выводом монитора красным прямоугольником выделены 8 байт, а следующие 8 в точности повторяют их).
Данная методика была опробована на нескольких ноутбуках Thinkpad T60, а также на ноутбуке Thinkpad R60. Отличие для последнего состоит в том, что места для подключения к шине I2C другие. К ним не так легко добраться, т.к. они расположены на нижней стороне материнской платы. На фотографиях показаны точки линий SDA и SCL. Наверняка к шине можно подключиться в каком-то другом, более удобном, месте, но я не нашёл.
Кстати, на этом сайте имеется информация где можно подключиться к шине I2C для разных моделей ноутбуков серии ThinkPad.
Это чип Atmel 8356908, подключаемся к его выводам 33 (SCL) и 34 (SDA).
В некоторых редких случаях пароль в ПЗУ оказывается повреждённым, т.е. не поддаётся декодированию в читаемый вид. Можно заменить эти 16 байт нулями, это должно помочь. Но это не точно ;)
Мне, кстати, удалось в итоге поставить на ноутбук ThinkPad T60 современную ОС Windows 10 LTSB. Я использовал SSD в качестве системного диска и IDE (PATA) оптибей с жёстким диском вместо DVD-привода. Обратите внимание, в ThinkPad T60 используется собственный проприетарный разъём, так что вставить любой подходящий по размеру оптибей не получится. Также поставил самый лучший центральный процессор (да, процессор можно поменять!), который поддерживается данным аппаратом – Intel Core Duo T7600. Надо сказать, после этого ноутбук T60 заработал с Windows 10 довольно лихо для своих лет. Он тянет видео в формате 720p, и запросто справляется с отображением сайтов с обилием мультимедийного контента.
5Использование микросхемы FTDIдля восстановления пароля ThinkPad T60
Сделать всё то же самое, только проще, можно с использованием любой микросхемы FTDI, которая поддерживает I2C (FT2232, FT4232 и т.д.) и программы SPI via FTDI. Проще, потому что не нужно ничего программировать, всё делается штатными средствами программы.
Для этого подключаем плату к ноутбуку T60 к тем же точкам (SDA, SCL и GND) в соответствии с таблицей:
Пин канала А | Пин канала B | Назначение |
---|---|---|
16 | 38 | SCL |
17 | 39 | SDA |
18 | 40 | SDA |
Запускаем программу, выбираем интерфейс I2C, и подключаемся к выбранному каналу микросхемы FT2232H (или другой, какая у вас есть). Выставляем скорость обмена 10000 бит/сек. Сканируем шину I2C; программа должна найти на шине несколько устройств. Нажимаем галки сохранять принятые данные в текстовый и/или двоичный форматы. Далее последовательно читаем по тем же 4-ём адресам (с 84-го по 87-ой) по 128 байт, не забывая отправлять команду "00" (адрес ячейки памяти, с которого начинаем читать ПЗУ). В общем, устанавливаем настройки, как на следующей иллюстрации.
Потом в сохранённом программой файле ищем пароль супервизора, как было описано выше.
Download attachments:
- Техническое описание (datasheet) ПЗУ PCA24S08 (1258 Downloads)
Поблагодарить автора:
Поделиться
Related items
5 comments
-
Андрей Воскреснье, 16 Апрель 2023 18:00 Ссылка на комментарий
Спасибо за инструкцию просмотрел весь интернет везде нужен ком порт чтобы считать дамп. с вашей помощью считал и расшифровал пароль, толко ноут его почемуто не берет. дамп считывал несколько раз, результат одинаковый. не подскажете что еще может быть?
-
Aave1 Четверг, 20 Апрель 2023 06:53 Ссылка на комментарий
Андрей,
Возможно, что память повреждена, и при сравнении пароля они не совпадают. Я такое видел. Сейчас уже не помню как действовать в такой ситуации. Возможно, надо перезаписать дамп в память с другим паролем. Но есть вероятность вообще всё испортить, придётся нести в сервисный центр. -
Дмитрий Вторник, 10 Сентябрь 2024 08:36 Ссылка на комментарий
Здравствуйте! Ввёл все данные в ардуино с вашей станички, но скетч не хочет компилироваться и записываться в ардуино, в чём может быть проблема? Ардуино уно
-
Дмитрий Вторник, 10 Сентябрь 2024 10:04 Ссылка на комментарий
Я так понимаю нет какой то библиотеки? Какие нужны?
-
Димитрий Среда, 18 Сентябрь 2024 14:24 Ссылка на комментарий
Зачем то поставили мою эл почту в спам, хотя я задавал вопрос по паролю в ноутбуке по данной теме. Но пароль снял, автору статьи большое спасибо!