逆转和入侵Aigo的自加密外部硬盘。 第1部分:剖析

反转和破解外部自加密驱动器是我的旧爱好。 过去,我曾经使用过诸如Zalman VE-400,Zalman ZM-SHE500和Zalman ZM-VE500之类的模型进行练习。 最近,一个同事给我带来了另一个展览:爱国者(Aigo)SK8671,它是按照典型设计制造的-LCD指示器和用于输入PIN码的键盘。 这就是它的来历...


1.简介
2.硬件架构
-2.1。 主板
-2.2。 液晶板
-2.3。 键盘板
-2.4。 我们看一下电线
3.攻击步骤的顺序
-3.1。 删除SPI闪存驱动器的数据转储
-3.2。 嗅探通讯




1.简介



房屋



包装方式


输入PIN码后,可以访问存储在磁盘上的数据(据称已加密)。 此设备的一些介绍性注意事项:


  • 要更改密码,请在解锁前按F1键;
  • 密码必须在6到9位之间;
  • 15次错误尝试后,磁盘将被清除。


2.硬件架构


首先,我们将设备分成几部分,以了解其由哪些组件组成。 最繁琐的任务是打开盒子:许多微小的嵌齿轮和塑料。 打开机壳后,我们看到以下内容(请注意由我焊接的五针连接器):




2.1。 主板


主板非常简单:



它最值得注意的部分(请参见从上到下):


  • LCD连接器(CN1);
  • 高音扬声器(SP1);
  • Pm25LD010( 规格 )SPI闪存驱动器(U2);
  • 用于USB-SATA(U1)的Jmicron JMS539控制器( 规范 );
  • USB 3连接器(J1)。

SPI闪存驱动器存储JMS539的固件和某些设置。



2.2。 液晶板


液晶板上没有什么特别的。




只是:


  • LCD指示器来源不明(可能带有中文字体); 具有顺序控制;
  • 键盘板的带状连接器。


2.3。 键盘板


当您查看键盘面板时,事情会变得更加有趣。



在背面,我们看到带状连接器以及赛普拉斯CY8C21434-微控制器PSoC 1(以下简称为PSoC)



CY8C21434使用M8C指令集(请参见文档 )。 在产品页面上,表明它支持CapSense技术(赛普拉斯的电容式键盘解决方案)。 在这里,我可以看到由我焊接的五针连接器-这是通过ISSP接口连接外部编程器的标准方法。



2.4。 我们看一下电线


让我们找出与此有关的内容。 为此,用万用表将导线振铃就足够了:



此膝上图的说明:


  • PSoC在技术规范中进行了描述。
  • 第二个连接器,右边的一个是ISSP接口,按照命运的决定,它对应于Internet上关于它的内容。
  • 最右边的连接器是带键盘的带状连接器的端子;
  • 黑色矩形是CN1连接器的图形,用于将主板连接到LCD板。 P11,P13和P4-连接到LCD板上的PSoC引脚11、13和4。


3.攻击步骤的顺序


现在我们知道该驱动器由什么组成,我们需要:1)确保基本存在加密功能; 2)了解如何生成/存储加密密钥; 3)查找准确检查了密码的位置。


为此,我已经完成了以下步骤:


  • 删除了SPI闪存驱动器的数据转储;
  • 我试图删除PSoC闪存驱动器的数据转储。
  • 确保赛普拉斯PSoC与JMS539之间的数据交换实际上包含所按下的键;
  • 确保更改密码时,SPI闪存驱动器中不会覆盖任何内容;
  • 太懒了,无法从JMS539撤消8051固件。


3.1。 删除SPI闪存驱动器的数据转储


此过程非常简单:


  • 将探头连接到闪存驱动器的支脚:CLK,MOSI,MISO和(可选)EN;
  • 使用嗅探器使用逻辑分析仪进行“嗅探”通信(我使用Saleae Logic Pro 16 );
  • 解码SPI协议并将结果导出到CSV;
  • 使用decode_spi.rb解析结果并进行转储。

请注意,这种方法在JMS539控制器的情况下特别有效,因为该控制器在初始化阶段从USB闪存驱动器加载了整个固件。


$ decode_spi.rb boot_spi1.csv dump 0.039776 : WRITE DISABLE 0.039777 : JEDEC READ ID 0.039784 : ID 0x7f 0x9d 0x21 --------------------- 0.039788 : READ @ 0x0 0x12,0x42,0x00,0xd3,0x22,0x00, [...] $ ls --size --block-size=1 dump 49152 dump $ sha1sum dump 3d9db0dde7b4aadd2b7705a46b5d04e1a1f3b125 dump 

从SPI闪存驱动器中删除转储后,我得出的结论是,它的唯一任务是存储JMicron控制单元的固件,该单元内置于8051微控制器中。 不幸的是,转储SPI闪存驱动器原来是没有用的:


  • 更改PIN码时,闪存驱动器转储保持不变;
  • 初始化阶段之后,设备将无法访问SPI闪存驱动器。


3.2。 嗅探通讯


这是找到哪个芯片负责检查感兴趣的时间/内容的通信的一种方法。 众所周知,USB-SATA控制器通过CN1连接器和两条胶带连接到Cypress PSoC LCD。 因此,我们将探针连接到三个相应的分支:


  • P4,通用输入/输出;
  • P11,I2C SCL;
  • P13,I2C SDA。


然后,我们启动Saleae逻辑分析仪,并在键盘上输入:“ 123456〜”。 结果,我们看到下图。



在其上,我们可以看到三个数据交换通道:


  • 信道P4有几个短脉冲串;
  • 在P11和P13上-几乎连续的数据交换。

增加通道P4上的第一个脉冲串(上图的蓝色矩形),我们看到以下内容:



在这里,您可以看到在P4上几乎有70ms的均匀信号,起初在我看来,它起着时钟信号的作用。 但是,花了一些时间来验证我的直觉后,我发现这不是时钟信号,而是按下键时输出到squeaker的音频流。 因此,此信号部分本身不包含对我们有用的信息。 但是,它可以用作指示符-了解PSoC注册按键的时间。


但是,P4通道的最后一个音频流与其他通道略有不同:这是“错误密码”的声音!


返回击键图,增加最后一个音频流的图(再次参见蓝色矩形)时,我们得到:



在这里,我们在P11上看到单调信号。 所以看起来这是时钟。 P13是数据。 请注意,蜂鸣结束后花样如何变化。 看看这里发生了什么会很有趣。


用两根线工作的协议通常是SPI或I2C,赛普拉斯的技术规范说这些触点对应于I2C,正如我们所看到的,这对于我们的情况是正确的:



USB-SATA芯片组不断轮询PSoC-读取密钥状态,默认为“ 0”。 然后,当您按下“ 1”键时,它将变为“ 1”。 如果输入了错误的PIN码,则在按“〜”后立即进行的最终发送会有所不同。 但是,目前我还没有检查实际发送到那里的内容。 但是我怀疑这几乎不​​是加密密钥。 无论如何,请参见下一节以了解如何删除内部PSoC固件的转储。

Source: https://habr.com/ru/post/zh-CN455515/


All Articles