Рейтинг@Mail.ru
Ноутбук Lenovo (IBM) ThinkPad T60
Ноутбук Lenovo (IBM) ThinkPad T60

Как снять supervisor password ноутбука ThinkPad T60 с помощью Arduino

автор:
Be the first to comment! Ремонт и сервис
Print Friendly, PDF & Email
Снимаем забытый пароль супервизора ноутбука Lenovo 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-ое влево от него. Землю можно взять любую, её легко найти с помощью мультиметра.

Подпаиваемся к SDA и SCL шины I2C ноутбука ThinkPad T60
Подпаиваемся к SDA и SCL шины I2C ноутбука ThinkPad T60
Места подключения к I2C ноутбука ThinkPad T60 возле микросхемы Intel PC82573
Места подключения к I2C ноутбука ThinkPad T60 возле микросхемы Intel PC82573

Вместо пайки можно воспользоваться методом «ластика и иголочек». Суть в том, что вы берёте две или три швейные иголки и протыкаете ими ластик таким образом, чтобы при наложении ластика на плату компьютера острия иголок попали в нужные точки на плате. Этот метод проще, чем пайка, но не застрахован от отключения контакта в самый неподходящий момент. Или, что хуже, замыкания не тех сигналов.

Подключаемся крокодильчиками к проводам шины I2C
Подключаемся крокодильчиками к проводам шины I2C
Подключаем Arduino к шине I2C ноутбука ThinkPad T60
Подключаем Arduino к шине I2C ноутбука ThinkPad T60

Напомню, что у Arduino ножка A4 – это SDA, а A5 – SCL.

3Скетч для считывания дампа ПЗУв котором хранится supervisor password

Скетч для Arduino, который по интерфейсу I2C считывает содержимое 4-х адресов ПЗУ, будет такой:

#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. Запускаем монитор порта и смотрим, что удалось прочитать Ардуино из ПЗУ ноутбука.

Ноутбук ThinkPad T60 ожидает ввода пароля супервайзера
Ноутбук ThinkPad T60 ожидает ввода пароля супервайзера

В результате работы данного скетча мы получим примерно следующее (зависит от модели, версии BIOS, и других параметров, которые могут меняться от экземпляра к экземпляру T60):

Чтение ПЗУ, в котором хранится пароль супервизора ThinkPad T60, с помощью Arduino
Чтение ПЗУ, в котором хранится пароль супервизора ThinkPad T60, с помощью Arduino

4Поиск пароля супервизора ноутбука T60в дампе ПЗУ

В снятом дампе нас интересуют 8 байт, начиная с адреса 0x1B8. Копируем эти 8 байт в буфер обмена. Запускаем программу «Кодировки» и выбираем кодировку Scan Code XT. В нижнее поле вставляем наши 8 байт из буфера обмена. Нажимаем на кнопку со стрелкой и в верхнем поле увидим какие-то буквы или числа. Это и будет наш пароль супервизора. Теперь можно войти в BIOS и изменять настройки так, как вам нужно: сбросить пароль супервизора ThinkPad T60 или установить новый, изменить порядок загрузки, управлять другими параметрами безопасности.

Декодирование пароля супервизора ThinkPad T60 из массива байтов
Декодирование пароля супервизора ThinkPad T60 из массива байтов

Вероятно, в других прошивках или других версиях ноутбука Lenovo ThinkPad T60, пароль может находиться по другому адресу. Чтобы найти его, вставьте в программу весь массив, считанный из ПЗУ, и выберите кодировку ASCII. Вы увидите в поле текста слово "CON." Пароль будет находиться где-то после него. Ориентиром для поиска будет являться то, что это должны быть 8 байт, за которыми следуют точно такие же 8 байт (обратите внимание: на картинке со скетчем и выводом монитора красным прямоугольником выделены 8 байт, а следующие 8 в точности повторяют их).

Декодирование дампа ПЗУ ThinkPad T60 из массива байтов в кодировке ASCII
Декодирование дампа ПЗУ ThinkPad T60 из массива байтов в кодировке ASCII

Данная методика была опробована на нескольких ноутбуках Thinkpad T60, а также на ноутбуке Thinkpad R60. Отличие для последнего состоит в том, что места для подключения к шине I2C другие. К ним не так легко добраться, т.к. они расположены на нижней стороне материнской платы. На фотографиях показаны точки линий SDA и SCL. Наверняка к шине можно подключиться в каком-то другом, более удобном, месте, но я не нашёл.

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

Места подключения к шине I2C ноутбука ThinkPad R60 для снятия пароля супервизора
Места подключения к шине I2C ноутбука ThinkPad R60 для снятия пароля супервизора

Это чип Atmel 8356908, подключаемся к его выводам 33 (SCL) и 34 (SDA).

Места подключения к шине I2C ноутбука ThinkPad R60 для снятия пароля супервизора
Места подключения к шине I2C ноутбука ThinkPad R60 для снятия пароля супервизора

В некоторых редких случаях пароль в ПЗУ оказывается повреждённым, т.е. не поддаётся декодированию в читаемый вид. Можно заменить эти 16 байт нулями, это должно помочь. Но это не точно ;)

Мне, кстати, удалось в итоге поставить на ноутбук ThinkPad T60 современную ОС Windows 10 LTSB. Я использовал SSD в качестве системного диска и IDE (PATA) оптибей с жёстким диском вместо DVD-привода (нужен либо HDD с интерфейсом IDE, либо оптибей должен иметь функцию адаптера с SATA на IDE. Надо сказать, ноутбук T60 работает с Windows 10 довольно лихо для своих лет. Он тянет видео в формате 720p, и запросто справляется с отображением сайтов с обилием мультимедийного контента.

Загрузка ноутбука ThinkPad T60 на Windows 10 LTSB при воспроизведении видео в качестве 720p
Загрузка ноутбука ThinkPad T60 на Windows 10 LTSB при воспроизведении видео в качестве 720p

5Использование микросхемы FTDIдля восстановления пароля ThinkPad T60

Сделать всё то же самое, только проще, можно с использованием любой микросхемы FTDI, которая поддерживает I2C (FT2232, FT4232 и т.д.) и программы SPI via FTDI. Проще, потому что не нужно ничего программировать, всё делается штатными средствами программы.

Чтение дампа памяти ноутбука ThinkPad T60 с помощью FT2232H
Чтение дампа памяти ноутбука ThinkPad T60 с помощью FT2232H

Для этого подключаем плату к ноутбуку T60 к тем же точкам (SDA, SCL и GND) в соответствии с таблицей:

Выводы микросхемы FT2232H в режиме I2C
Пин канала АПин канала BНазначение
1638SCL
1739SDA
1840SDA

Запускаем программу, выбираем интерфейс I2C, и подключаемся к выбранному каналу микросхемы FT2232H (или другой, какая у вас есть). Выставляем скорость обмена 10000 бит/сек. Сканируем шину I2C; программа должна найти на шине несколько устройств. Нажимаем галки сохранять принятые данные в текстовый и/или двоичный форматы. Далее последовательно читаем по тем же 4-ём адресам (с 84-го по 87-ой) по 128 байт, не забывая отправлять команду "00" (адрес ячейки памяти, с которого начинаем читать ПЗУ). В общем, устанавливаем настройки, как на следующей иллюстрации.

Сканируем устройства на шине I2C ноутбука ThinkPad T60
Сканируем устройства на шине I2C ноутбука ThinkPad T60

Потом в сохранённом программой файле ищем пароль супервизора, как было описано выше.

Демонстрация производительности ноутбука ThinkPad T60 на Windows 10
Last modified onПятница, 13 Сентябрь 2019 09:30 Read 249 times
Ключевые слова: :

Поделиться

Print Friendly, PDF & Email

Leave a comment

Make sure you enter all the required information, indicated by an asterisk (*). HTML code is not allowed.