前言

终于在网盘翻到了以前拍的照片。这是大约两年前写的,关于从加锁的硬盘提取信息的那些事,走了很多弯路。

以前买了NTG55的Head Unit,装配在奔驰E系车型。

NTG55

将目标设备拆开后,可以发现一块车规级HDD

硬盘信息如下
MQ01AAD032C
Serial ATA 2.6 / ATA8
3.0 Gbit/s , 1.5 Gbit/s
320 GB

右侧是旧款 Head Unit 使用的硬盘,左边是新款,再新也不过是NTG55,现在已经到NTG7了

hdd_compare

探索过程

该硬盘最高支持SATA 2.6。当我拿到手的时,接在USB硬盘盒上发现读不出来,以为硬盘是运输途中损坏了。实际上这个硬盘非常耐艹,碰撞了多次都没事,不愧是车规级。

后来尝试接到台式机上,发现启动之后BIOS提示硬盘有密码,试过各种弱口令都不行。

进入Linux查看两款不同型号的硬盘信息,Security节都提示locked。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
$ sudo hdparm -I /dev/sdb 

# 东芝
ATA device, with non-removable media
Model Number: TOSHIBA MQ01AAD032C
Serial Number: 46NHP01LT
Firmware Revision: AK001Y
Transport: Serial, ATA8-AST, SATA 1.0a, SATA II Extensions, SATA Rev 2.5, SATA Rev 2.6
Standards:
Supported: 8 7 6 5
Likely used: 8
Security:
Master password revision code = 7
supported
enabled
locked
not frozen
not expired: security count
supported: enhanced erase
Security level high
116min for SECURITY ERASE UNIT. 116min for ENHANCED SECURITY ERASE UNIT.

# 日立

ATA device, with non-removable media
Model Number: HGST HEJ423232H9E300
Serial Number: F63001FNJ7W93L
Firmware Revision: F6BOA200
Transport: Serial, ATA8-AST, SATA 1.0a, SATA II Extensions, SATA Rev 2.5, SATA Rev 2.6; Revision: ATA8-AST T13 Project D1697 Revision 0b
Security:
Master password revision code = 7
supported
enabled
locked
not frozen
not expired: security count
supported: enhanced erase
Security level high
104min for SECURITY ERASE UNIT. 106min for ENHANCED SECURITY ERASE UNIT.

当时对于一个没有硬件基础的我来说,实在是太难了,寻求过硬盘数据恢复公司也没有能做的。

网上能找到的资料太少,并没找到解锁SATA硬盘的相关资料。有人嗅探IDE数据来解密硬盘,但是这块硬盘是SATA的。

参考:
Open Sesame: Harddrive Password Hacking with a OpenBench Logic Sniffer

曾经想过嗅探SATA的信息,因为SATA速度太快,计划用FPGA实现,但是太耗时间和资金,遂放弃。

参考:
硬盘数据恢复技术之SATA接口实现技术(一)

将硬盘拆开,基本信息如下

1
2
3
4
MCU:88i8317-RAI2
DDR:Winbond 4MB
Flash:MXIC MX25V4006EZNI 512K
HDD Motor Combo IC: TLS2605

board

read_flash

后来我拆下里面的Flash芯片,读取了Toshiba的Flash固件,考虑到BIOS上能键盘输入硬盘解锁密码,猜测密码可能是字符串,但是并没有找到疑似密码的字符串。(实际上密码是非ASCII的字节) 。
后来读取了两个日立硬盘的固件进行对比,如果一机一密并且是简单对比验证的密钥,就有可能成果获取。(实际上所有设备密码都一样)

hdd_compare

虽然是ARM指令的固件,但是我当时并不擅长逆向嵌入式固件,也没有阅读过硬盘固件的源码,思路中断。

本来想找调试接口,曾经看过别人通过JTAG调试硬盘固件,绕过加密认证,但是这个MCU没有公开的调试资料,当时我没有JTAGulator,所以也就放弃这条路了。

参考:

Hard Disk Firmware Hacking (Part 1)

Hard Disk Firmware Hacking (Part 2)

还有一种可行的方法,先在设备端通电让目标设备解锁,但是不断电,解锁的Key会保存在硬盘的RAM中,将硬盘接在电脑上就可以直接使用。这是我解锁之后才知道的。

参考:
Self-encrypting deception: weaknesses in the encryption of solid state drives (SSDs)

查阅ATA2.6标准,并没有找到解锁密码之类的信息,猜测可能是硬盘主控独有的特性。于是我又查找硬盘手册,终于找到了相关资料。

密码长度是32字节,在Bootloader里除了SD卡密钥以外,也没发现相关信息。
0xF2这个Command就可以作为逆向的切入点。不管是在JTAG动态调试MCU、还是调试硬盘驱动都能派上用场。

HDD_unlock

解密过程

HeadUnit的Bootloader并不会为硬盘解锁,而是Bootloader解密完WinCE Image之后,ATA驱动负责发送0xF2命令解锁。(可以初步判断这个硬盘里面的内容不是很重要)。

毕竟解密了系统,干脆直接分析驱动文件

ida1

原始密码分别如下,搜索这些密码,发现已经有人在2014年用逻辑分析仪破解出来了,NTG4使用的是IDE接口硬盘。NTG4 und NTG4.5 Festplatte Einsehen, Clonen, Ändern

1
2
MELCO SANDA NTG55HUH Navi Master
MELCO SANDA NTG55HUH Navi User

ida2

转码如下(当时嫌麻烦,直接模拟执行的,这次仔细看了下,F5有点问题,转码部分汇编就4行代码)

1
2
3
for b in 'MELCO SANDA NTG55HUH Navi Master':
print(hex(0xff-ord(b)), end=" ")
print()

PS: MELCO代表三菱电机公司,SANDA代表三田製作所。HU55就是三菱电机制造的。日本人的严谨程度非常变态,几个小安全问题就能开会开到晚上。所以这个设备使用了Bootloader加密,SD卡锁,硬盘锁,还有自毁式安全启动。

接下来使用这些命令解密硬盘

1
2
3
4
5
# MASTER PASS
sudo hdparm --user-master m --security-unlock $(printf '\xb2\xba\xb3\xbc\xb0\xdf\xac\xbe\xb1\xbb\xbe\xdf\xb1\xab\xb8\xca\xca\xb7\xaa\xb7\xdf\xb1\x9e\x89\x96\xdf\xb2\x9e\x8c\x8b\x9a\x8d') /dev/sdb

# USER PASS
sudo hdparm --user-master u --security-unlock $(printf '\xb2\xba\xb3\xbc\xb0\xdf\xac\xbe\xb1\xbb\xbe\xdf\xb1\xab\xb8\xca\xca\xb7\xaa\xb7\xdf\xb1\x9e\x89\x96\xdf\xaa\x8c\x9a\x8d\xdf\xdf') /dev/sdb

执行命令之后,分区就出现了,全都是地图文件,旧设备性能差,可能会冗余地图数据换取性能。而在NTG65中去掉了硬盘,取而代之的是大容量EMMC,所以不需要那么大的硬盘。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Disk /dev/sdb: 298.1 GiB, 320072933376 bytes, 625142448 sectors
Disk model: TOSHIBA MQ01AAD0
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: dos
Disk identifier: 0x17192a08

Device Boot Start End Sectors Size Id Type
/dev/sdb1 36864 31494143 31457280 15G c W95 FAT32 (LBA)
/dev/sdb2 31494144 195071999 163577856 78G c W95 FAT32 (LBA)
/dev/sdb3 195072000 358649855 163577856 78G c W95 FAT32 (LBA)
/dev/sdb4 358649856 625137344 266487489 127.1G f W95 Ext'd (LBA)
/dev/sdb5 358651904 503355391 144703488 69G b W95 FAT32
/dev/sdb6 503357440 545300479 41943040 20G b W95 FAT32
/dev/sdb7 545302528 576759807 31457280 15G b W95 FAT32
/dev/sdb8 576761856 578207743 1445888 706M b W95 FAT32
/dev/sdb9 578209792 592889855 14680064 7G b W95 FAT32
/dev/sdb10 592891904 597086207 4194304 2G b W95 FAT32
/dev/sdb11 597088256 603379711 6291456 3G b W95 FAT32
/dev/sdb12 603381760 609673215 6291456 3G b W95 FAT32
/dev/sdb13 609675264 625135615 15460352 7.4G b W95 FAT32

相关链接

Open Sesame: Harddrive Password Hacking with a OpenBench Logic Sniffer

Toshiba_2.5_disk_product_specification.pdf

SerialATA_Revision_2_6_Gold.pdf

Hard Disk Firmware Hacking (Part 1)

Hard Disk Firmware Hacking (Part 2)

Self-encrypting deception: weaknesses in the encryption of solid state drives (SSDs)

NTG4 und NTG4.5 Festplatte Einsehen, Clonen, Ändern

技术宅:硬盘数据恢复技术之SATA协议分析(一)

技术宅:硬盘数据恢复技术之SATA协议分析(二)

技术宅:硬盘数据恢复技术之SATA协议分析(三)

技术宅:硬盘数据恢复技术之SATA协议分析(四)

技术宅:硬盘数据恢复技术之SATA协议分析(五)