工行U盾12864屏幕简单逆向
偶然翻出来十几年前的工行U盾,以前办网银必选U盾,密码器或者动态口令卡。口令卡类似于刮刮乐,交易时网银会随机给一组口令卡坐标,用户按照坐标把密码刮开填进去,密码本是一次性的,上面的格子刮完了再想用得去银行买。密码器那个结构稍微复杂点,里面是个RTC时钟给一个LFSR随机数生成器提供种子,显示一串和时间相关的密钥,银行服务端在一定正负误差时间内校验这个伪随机密钥来对用户鉴权,长得跟超薄计算器一样,用的段码液晶,没啥可以利用的。U盾就复杂点了,带USB和点阵液晶屏,有点折腾价值。


屏幕使用焊接式FPC排线固定在主板上,焊盘总共10PIN,这个引脚规模基本是SPI或I2C这类串行口没跑了。

1:先分析电源引脚
观察屏幕接口附近的接口走线,给这个U盾上电,在屏幕显示内容静止状态下,使用万用表电压档测量各个引脚的电压,初步可以得到电源脚的定义。

2: 确认数字信号接口
芯片的IO上都会带两个ESD管以保护芯片在遭受静电冲击的时候不至于损坏,一个ESD管正向到电源,另一个反向到地。上一步已经把电源脚分析出来了,剩下3,4,5,6,7引脚用万用表二极管档测一下正反偏压降,一般在0.4~0.7v之间,这一步可以排除下这里面是否有没用到的空脚。实际测试后,发现这5个未知IO都存在二极管压降,那么屏幕接口是SPI的概率就很高了,一般SPI屏也就用到RST,CS,SDA,SCL,A0这5个引脚。


3: 使用逻辑分析仪确定引脚定义
将3,4,5,6,7这5个脚和GND飞线出来,接入逻辑分析仪,开启采样,然后再给原板子上电,抓到下图的上电初始化序列。

6号脚的特征最明显,波形跳变密度最高,一看就是时钟信号,放大并测量下波形细节,的确是4MHz的时钟信号,8Bit一组。


4号脚的特征也非常明显,一般屏幕初始化前操纵复位信号通常有如下的时序,且后续通信中复位线全程拉高。通过这两点,可以判断出4号脚就是复位信号了。
RST=1
delay
RST=0
delay
RST=1
....


SPI屏还有个CS片选,A0(命令/数据)切换,这两个脚也比较好区分,找时钟较为连续的一组数据查看,CS片选脚通常在整组传输周期拉低,那么3号脚就符合这个特征。
这种带控制器的屏幕,写屏幕显存前都需要先写入的x,y坐标和宽高信息,随后写入真正的显存数据,这就需要一个引脚指示当前传输的数据是发给屏幕的命令还是写到显存的数据,那么在数据传输时且时钟无效(低电平)的位置发生跳变的信号就是命令/数据切换脚了,放大波形查看细节,5号就是要找的A0脚。

剩下一个7号就是SDA数据脚了,此时可以附加上协议分析,把之前推断的引脚进行协议绑定,通过解码功能验证之前的猜想是否正确。

可以看到顺利解码出数据,看到这个40 B0 10 00,熟悉这种128x64点阵屏幕的人一下就能看出是类似ST7567这类LCD控制器的写显存指令。


那么最终的引脚定义也就水落石出了。

4.抓一下初始化序列
上电复位后,先填充显存为00,8个Page,每个Page=8像素高度,传128个00,共传输8组。
A0=0 A0=1
40 B0 10 00 (00 x 128)
40 B1 10 00 (00 x 128)
40 B2 10 00 (00 x 128)
40 B3 10 00 (00 x 128)
40 B4 10 00 (00 x 128)
40 B5 10 00 (00 x 128)
40 B6 10 00 (00 x 128)
40 B7 10 00 (00 x 128)
然后发屏幕初始化序列,设置对比度,面板偏压之类的,通过AF命令打开显示。
A0=0
E3 E2 A2 A0 C8 27 81 28 F8 01 2C 2E 2F 40 B0 10 00 A6 A4 AF
delay 300ms
这里还设置了其他参数,对着手册分析即可。

A0=0
81 28 E3
delay 50ms
next fill GRAM

浙公网安备 33010602011771号