TEMPEST HDMI泄漏接收 1

之前听说有个神奇的软件叫做tempestsdr,可以用sdr来接收显示器泄露出来的信号。

这个软件说实话很难安装,因为是java的,并且只给了代码。但是我看了他的代码其实核心就是AM解调,因此我有了自己写代码来实现这个功能的想法。

tempestsdr的名字其实不是随便起的,tempest是Temporary emanation and spurious transmission的缩写,专指这种类型的泄漏。

我用了另一个知名软件TVSharp也大致看到了HDMI泄漏的信号,进一步验证了我的想法,就是用AM解调并把结果依次一行行画出来就行。

以下是我实测的效果。

SDR接收HDMI泄露信号 无需tempestsdr_哔哩哔哩_bilibili-https://www.bilibili.com/video/BV1b94y127Qh?spm_id_from=333.337.search-card.all.click但是如果要进一步改善效果要改代码,TVSharp是C#开发的,不开源,可以反编译看到代码,但是不能重新再编译了(主要是我懒得建一个C#工程,本就不喜欢windows开发)。

我主要习惯的开发环境还是Linux下的C/C++开发或者Python开发。我之前也用C++写过模拟电视接收的程序。但本次为了做一个尽量通俗易懂的教程,我打算用Python 2.7来开发。

首先,我找到一个叫做pyrtlsdr的包,它把rtlsdr的驱动封装了一下。

GitHub - roger-/pyrtlsdr: A Python wrapper for librtlsdr (a driver for Realtek RTL2832U based SDR's)A Python wrapper for librtlsdr (a driver for Realtek RTL2832U based SDR's) - GitHub - roger-/pyrtlsdr: A Python wrapper for librtlsdr (a driver for Realtek RTL2832U based SDR's)https://github.com/roger-/pyrtlsdr

它里面有个例子

from pylab import *
from rtlsdr import *

sdr = RtlSdr()

# configure device
sdr.sample_rate = 2.4e6
sdr.center_freq = 95e6
sdr.gain = 4

samples = sdr.read_samples(256*1024)
sdr.close()

# use matplotlib to estimate and plot the PSD
psd(samples, NFFT=1024, Fs=sdr.sample_rate/1e6, Fc=sdr.center_freq/1e6)
xlabel('Frequency (MHz)')
ylabel('Relative power (dB)')

show()

运行上面的代码就能看到下面的频谱图。

 我基于这个代码来做了修改,因为我事先已经找到了频点,我只需要把时域信号画出来就行了,不需要频谱,因此我先把频谱绘制代码删掉了。然后我需要持续循环获得时域信号,并且为了调试,我还要把信号值打印到屏幕上。

修改后的代码:

from pylab import *
from rtlsdr import *

sdr = RtlSdr()

# configure device
sdr.sample_rate = 2.4e6
sdr.center_freq = 395.991e6
sdr.gain = 4


while True:
    samples = sdr.read_samples(1*1024)
    print (samples)

sdr.close()

有了这段代码,如果你有一个rtlsdr插在电脑上,再找一个portapack,用信号源功能在395.991MHz上发射一个信号,就能看到没信号时终端上数字都很小,发出信号后,终端上的数字也变大。

后面我们要做的工作就是把这些大大小小的数字转化为颜色就行了。

未完待续,敬请期待!

猜你喜欢

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