TEMPEST HDMI泄漏接收 3

第一篇文章我本打算用python写代码并使用rtlsdr来接收,这样不但代码简洁好懂,而且设备也非常便宜,很好入门。但是第二篇文章我为了尽早实现效果还是采用了c++语言和hackrf。可能会对入门者不太友好,所以这两天我继续做python+rtlsdr的版本。现在已经初有成效了

from pylab import *
from rtlsdr import *
import cv2

sdr = RtlSdr()
# configure device
sdr.sample_rate = 1.951047e6
sdr.center_freq = 395.991e6
sdr.gain = 60
# init for opencv
x = 0
y = 0
img=np.zeros((512,512,1), np.uint8)

while True:
    samples = sdr.read_samples(1024*100) #type(sample) is numpy.complex128
    
    for sample in samples:
        mag = np.sqrt( sample.imag * sample.imag + sample.real * sample.real)
        value = mag * 255 * 10
        img[y, x] = value
        x = x + 1
        if (x >= 463):
            x = 0
            y = y + 1
        if (y >= 500):
            y = 0

    cv2.imshow("HDMI", img)
    if(cv2.waitKey(10)==27):
        break

sdr.close()

以上是我的代码,一共才30多行,十分简洁。可以用python2.7运行。

当rtlsdr在hdmi线缆附近时,效果如下:

 这是泄漏电脑的桌面:

 可以看得出他们是比较呼应的——总体界面都是黑色,上面都有一条白色横条,然后左边有一条垂直白色矩形,右边还有一个小的白色矩形。

但是目前还有两个问题

1.解出来的图像有一点倾斜(这个问题可以通过调整换行位置463改善,但是由于换行位置必须整形数,所以精度有限)

2.窗口中重复出现了很多个比较小的画面,最好把画面放大一些,没必要那么看到那么多重复画面,这个也好解决,只需要在图像绘制阶段把1个像素点扩展为上下左右好几个像素点就行。

后面我会找时间慢慢优化。

下面是两幅实景照片,你可以比较两个电脑屏幕的关系。我的操作是在移动泄露电脑屏幕右侧的白色文本输入界面。

 

猜你喜欢

转载自blog.csdn.net/shukebeta008/article/details/125465317