分享一种使用RTH示波器探测并解码HDMI的方法

描述

引言

现代社会中,人们的日常工作和生活愈发依赖于计算机。在处理一些机密事务时,信息安全不可谓不重要。在一些单位会采取断网或禁止插入U盘的方式来防止泄密。然而,计算机的EMI问题还可能导致信息从其它途径泄露。本文介绍了一种使用RTH示波器探测并解码HDMI的方法,并解释了其实现原理。

RTH示波器相比市面上常见的软件无线电接收机采样率高了很多倍,因此解析出的画面会更清晰,有利于看清小字体。另外,RTH示波器是手持仪表,携带非常方便,还能通过WiFi方式实现信号回传,简化了示波器与上位机之间的连接,降低了整套探测系统的复杂度。

HDMI信号

既然是EMI问题导致的信息泄露,我们可以先尝试用示波器的近场探头配合示波器FFT功能在被攻击电脑附近进行探测。当我们移动近场探头到达被攻击电脑的HDMI接口附近,示波器频谱上会出现好多信号。

    HDMI信号HDMI信号                                                    

▲从上图可知,HDMI显示信号已经泄露到了空气中,如果我们能够找出信号规律,即可逆向得到原始画面内容。

HDMI信号

我们可以先在被攻击电脑上使用比较简单的图形,并观察示波器的时域波形,来尝试找出电脑画面与泄露信号之间的规律。

HDMI信号

比如我们可以在被攻击电脑上开启画图程序,并填充黑色背景。然后中间开启一个白色长条形的记事本窗口,并尝试更改这个窗口的宽度,或左右拖动这个窗口。

HDMI信号

调整示波器的水平/垂直刻度和触发方式,你会得到这样有规律的时域波形。并且你会发现,在示波器屏幕中间的触发位置处有一个窄矩形,同时它的左数3格位置也有类似的窄矩形。说明这种矩形的重复周期大概是30us。当我们在被攻击电脑上左右拖动记事本窗口的边沿,则两个窄矩形之间的较宽矩形就会对应运动,并且当电脑屏幕上的记事本运动到屏幕边界处时,示波器显示的宽矩形也会靠近窄矩形的位置。

HDMI信号

根据上述规律,我们可以大胆猜测在窄矩形之间的波形,对应的是电脑屏幕上的一行,示波器从左往右的波形对应于电脑屏幕的一行中从左往右的像素点。由于目前被攻击电脑的屏幕内容比较简单,因此可以认为它的每一行数据基本是相同的。这也就是为什么时域波形看上去是周期性的,重复周期是30us。如果对模拟视频制式比较熟悉,你会发现这一点与PAL或NTSC制式非常相似。 

因此,我们可以尝试用时域波形的幅度对应于像素点的亮度,把每一行的波形都用绘图软件库中的函数绘制出来,行之间的顺序也参考模拟视频,把左侧出现的行放在上方,右侧出现的行放在下方。

HDMI信号

大致猜出信号规律后,我们就可以开始着手写程序了。

我们需要先配置示波器程控开发环境(以Ubuntu系统为例):

1.安装python3.8 

2.在罗德与施瓦茨官网搜索并下载,RSVisa(对于Ubuntu系统,可下载deb包,并双击安装) 

3.使用pip3 install命令安装pyvisa, rsinstrument, opencv-python等软件库 这样就配置完成了示波器程控开发环境。

然后我们找到罗德与施瓦茨在github上的账号中的RTH示波器范例,并逐步修改,实现自己的程序。

    HDMI信号    

在上方代码中,我修改了RTH的设备地址、时基设置、通道刻度、触发方式(可用代码设置或保持示波器原先的设置)。

    HDMI信号    

在上方代码中,设置了数据类型,并请求数据。然后获取通道的刻度和偏置,实现数据归一化。最终,用matplotlib绘制时域波形。

    HDMI信号    

运行上述代码,你就能在程控电脑的屏幕上得到上图结果。你会观察到,现在程控电脑上得到的波形与示波器探测的波形完全一致,比较宽的矩形对应的就是被攻击电脑上的记事本窗口,而比较窄的矩形对应的就是被攻击电脑的屏幕边界。下一步,我们只要把波形幅度转为像素点亮度即可。

HDMI信号

成功运行了RTH程控范例后,我们即可对此范例程序进一步修改,以验证我们之前猜测的想法。       HDMI信号      

上图是我修改后的代码,我做的主要修改是先对整个解码程序加了一个循环,这样解码的画面才可以不停刷新,而不是只显示一副画面。我用abs来对波形数据取模,相当于实现了AM解调,并把解调结果依次绘制在OpenCV的画布上。绘制顺序是从左往右绘制,到达行尾后换行,到达列尾后重新回到画布左上角。绘制完一副画面后,用imshow函数把画面显示出来。

HDMI信号

HDMI信号

成功实现HDMI解码后,我们还可以查询HDMI规范,了解为什么这种高清数字信号能用模拟视频解调的方式解出来。

      HDMI信号        

从上图可知HDMI在TMDS模式时,3个通道独立发送数据。它们对应于HDMI线缆中的3对差分线。更具体来说,这3对差分线中分别传输的数据就是R、G、B数据。    

  HDMI信号      

不仅如此,从上图可知这三路R、G、B数据是按像素点依次传输的。当某一行的像素点从左往右传输完成后,就会换行,传输下一行的RGB数据,这一点与模拟视频几乎一样,这就解释了为何我们可以用类似模拟视频解调的方式,实现HDMI信号的解码。不仅HDMI信号以此方式传输,早期的DVI信号也是这种方式。因此,也能用类似的方式解码。  

除了这些视频接口外,显示屏内部的专用信号也存在信息泄露问题,这些问题可能由于显示屏在生产过程中内部电路板的差分走线的不对称而引入。

结语

通过本文,相信你已经学会如何自己写程序控制示波器,并实现对HDMI泄露信号的探测和解码。在日常工作中,罗德与施瓦茨的示波器和近场探头也是调试EMI问题的好帮手。除此之外,罗德与施瓦茨还提供了全套专业的EMC测试方案,帮助你整改目标设备的EMC问题。 



审核编辑:刘清

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分