Thinkpad-EEPROM-Reset

Aus LaborWiki
Wechseln zu: Navigation, Suche
           
Thinkpad-EEPROM-Reset

Release status: experimental [box doku]

Thinkpad board.jpg
Description How to reset the supervisor password of your Thinkpad
Author(s)  Peter, Philipp (Philipp)
Last Version  0.1
Platform  Atmega
License  GPL
Download  https://www.das-labor.org/trac/browser/microcontroller/src-atmel/playground/thinkpad-24rf08-reset

Informationen zu Thinkpad Modellen[Bearbeiten]

Modelle T43/p, R52, R60, T60/p, X60/s, Z60 und Z61:

Diese Modelle sollen angeblich das Passwort im TPM speichern (fraglich). Deshalb funktioniert hier unsere Methode nicht. (ggf. siehe #Neuere Thinkpads)

Alle anderen Modelle:

Aktuell sollte die Methode mit allen anderen Modellen funktionieren. Allerdings konnten wir dies nur beim X61 testen.

Die Lage des EEPROM[Bearbeiten]

Die Lage ist von Modell zu Modell unterschiedlich. Teils werden auch andere EEPROM's verwendet, einer der standard EEPROM's im thinkpad ist der 24RF08. Entweder sucht ihr nach mögliuchen EEPROM's auf der Platine oder ihr guckt einfach auf dieser Seite.

Das EEPROM[Bearbeiten]

Der Inhalt des EEPROM besteht zum größten Teil aus Nullen. Die Standard größe liegt bei 1024 Byte. Wir schätzen das in dem EEPROM die Serienummer, BIOS und POP Passwörter etc. gespeichert werden. Diese werden dann mit einem scancode codiert und wenn der TPM aktiv ist, zusätzlich verschlüsselt. Das SVP liegt doppelt in irgendeinen (meist 0x338 bis 0x348) Adressbereich. Das EEPROM besitzt einen zusätzlichen Schreibschutz der sich auf einzelne Adressbereiche bezieht. Dies könnt ihr alles im Datenblatt vom 24RF08 nachlesen.

Neuere Thinkpads[Bearbeiten]

Bei neueren Thinkpads (z.B. X220, T4x0, T5x0 usw.), vor allem auch die mit UEFI-Support reicht es weiterhin aus, Teile des EEPROMs durch Nullen zu ersetzen. Der Bereich dafür umfasst nach Aussagen von Lenovo die Adressen 0x10 bis 0x1F, sowie 0x20 bis 0x2F auf dem Block 6 (also die vierte I2C-Adresse des EEPROMs: 0x57). Die zwei genannten Adressbereiche enthalten das SVP und sollten identisch sein (2. das Backup vom 1.). Neben dem Ausnullen dieser beiden SVPs, scheint es nötig zu sein, das SVP noch deaktivieren, indem noch die zwei Bytes 0x02 und 0x03 auf 0 gesetzt werden. Bei einem X220 führte dies zum gewünschten Erfolg.

Hardware[Bearbeiten]

Die Hardware kann einfach ein standard Atmega Board sein, welches ein serielles interface zum PC und drei Kabel "SDA,SCL,GND" besitzt. Diese sollten an den I2C ports des Atmega angeschlossen sein. Danach baut und flasht ihr unsere fertige Firmware auf den Atmega. Startet das Thinkpad. Drückt F1. und haltet SDA, SCL und GND an die entsprechenden PIN's. Danach startet ihr den Atmega, bekommt euren dump und rebootet den PC.

Mittlerweile ist es jedoch wesentlich einfacher, einen einfachen Raspberry Pi zu nutzen, da dieser auch mindestens ein I2C-Interface hat, welches mit dem entsprechenden Linux-Kernelmodul (i2c-dev) genutzt werden kann.

Außerdem ist es mit Coreboot auch möglich, direkt im Linux auf dem Notebook auf den EEPROM zuzugreifen. Tut man dies jedoch mit dem Original-BIOS, so ist der entsprechende Bereich zwischen 0x00 und 0x7F nicht zugreifbar und damit sind auch keine Resets möglich, wenn man nicht ohnehin Coreboot hat. Dennoch ist diese Methode praktisch, falls man nur das BIOS-ROM anfassen will und keine Kabel am EEPROM anlöten möchte.

Software[Bearbeiten]

Die Software dumped den EEPROM und gibt Ihn auf der seriellen konsole aus. Danach beschreibt sie den Adressbereich 0x338 bis 0x348 mit Nullen. In diesem Adressbereich befindet sich das verschlüsselte Passwort, dies kann jedoch von Modell zu Modell abweichen.

Deshalb lest bitte nur den EEPROM aus und schaut euch den dump erst im hex editor an, damit ihr den Adressbereich bestimmen könnt.

Wenn ihr einen doppelten Eintrag hinereinander findet, handelt es sich sehr wahrscheinlich um das verschlüsselte Passwort.

Wird Linux zum Überschreiben des EEPROMs genutzt, wird das Tool eeprog empfohlen. Die Suite i2c-tools (insbesondere die Programme i2cdetect, i2cdump und evtl. i2cset) kann sich auch als Nützlich erweisen.