Thanks to RTL-SDR.com reader 'flatflyfish' for submitting information on how to get Martin Marinov's TempestSDR up and running on a Windows system. If you didn't already know by definition "TEMPEST" refers to techniques used by some spy agencies to eavesdrop on electronic equipment via their unintentional radio emissions (as well as via sounds and vibrations). All electronics emit some sort of unintentional RF signals, and by capturing and processing those signals some data can be recovered. For example the unintentional signals from a computer screen could be captured, and converted back into a live image of what the screen is displaying.

TempestSDR is an open source tool that allows you to use any SDR that has a supporting ExtIO (such as RTL-SDR, Airspy, SDRplay, HackRF) to receive the unintentional signal radiation from a screen, and turn that signal back into a live image. This can let you view what is on a screen without any physical connections. If a high gain directional antenna is used then it may be possible to receive images from several meters away as well.

TempestSDR showing what's on the screen via unintentional RF radiation from the monitor.

Although TempestSDR has been released now for a number of years it hasn't worked properly in Windows with ExtIO interfaces. In his email flatflyfish showed us how to compile a new version that does work.

1. You need to install a 32-bit version of the Java runtime. The 64-bit version won't work with extio's possibly because they are all 32-bit. Also install the JDK.

2. You need to install MingW32 and MSYS and put their bin folders in your Windows PATH.

3. Then when compiling I was seeing a lot of CC command unknown errors. To fix that I just added CC=gcc to the top of all makefiles. I also removed the Mirics compilation line from the JavaGUI makefile to make things easier as we're not using that sdr.

4. Originally my JDK folder was in Program Files. The makefile didn't like the spaces in the folder, so I moved it to a folder without spaces and it fixed the errors.

5. Lastly to compile it you need to specify the ARCHNAME as x86 eg "make all JAVA_HOME=F:/Java/jdk1.7.0_45 ARCHNAME=X86"

After doing all that it compiled and I had a working JAR file. The extio's that are used normally with HDSDR work fine now and I get some images from my test monitor with an rtlsdr.

We've tested the software with the ExtIO for RTL-SDRs (available on the HDSDR downloads page) and confirmed that it works. Images from one of our older DELL monitors using DVI are received nicely, although they are a bit blurry. We also tried using an Airspy or SDRplay unit and this significantly improved the quality of the images a lot due to the larger bandwidth. The quality was good enough to make out large text on the screens. ExtIO's for the Airspy are available on this page, and for the SDRplay on the official SDRplay website. Note that for the SDRplay we were unable to go above 6 MHz, and on the RTL-SDR 2.8 MHz was the limit - anything higher on these SDRs did not produce an image possibly due to dropped samples.

To use the software you should ideally know the resolution and refresh rate of your target monitor. But if you don't there are auto-correlation graphs which actually help to predict the detected resolution and frame rate. Just click on the peaks. Also, you will need to know the frequency that your monitor unintentionally emits at. If you don't know you can browse around in SDR# looking for interference peaks that change depending on what the image of the screen is showing. For example in the image below we show what the interference might look like. A tip to improving images is to increase the "Lpass" option and to watch that the auto FPS search doesn't deviate too far from your expected frame rate. If it goes too far, reset it by re-selecting your screen resolution.

Unintentionally radiated RF signal from computer screen shown in SDR#

The best results were had with the Airspy listening to an older 19" DELL monitor connected via DVI. A newer Phillips 1080p monitor connected via HDMI had much weaker unintentional signals but images were still able to be recovered. A third AOC 1080p monitor produced no emissions that we could find.

Clear images were obtained with an antenna used in the same room as the monitor. In a neighboring room the images on the DELL monitor could still be received, but they were too blurry to make anything out. Possibly a higher gain directional antenna could improve that.

You should try watching Tempest For Eliza on Youtube on the target monitor. With the computer you’re using SDR# with, switch it to AM channel and find the sound. Much faster and simpler. I got great results within 15 minutes compared to the hours I spent finding it through NFM.

Am testing this on a Windows 7 64-bit machine with Java JDK 8 update 172 installed to C:\Java and using an AirSpy R2, doesn’t work. After opening the precompiled JAR file, going to File > Load ExtIO source and selecting the AirSpy ExtIO 1.0.7 DLL (which I downloaded from http://www.montefusco.com/airspy/), I got an error “The ExtIO dll is not compatible with the current machine or does not exist. Please check the filename is correct and the file is a valid ExtIO dll file and try again.”. @OP how did you guys manage to get this working with the AirSpy?

Things I’ve tried:
1. Using the 32-bit version of the JDK instead of the 64-bit version.
– After doing this step, I can’t even get to the GUI of TempestSDR, just a Java error and crash. So I uninstalled the 32-bit JDK and reinstalled the 64-bit JDK, which at least allowed me to get to the main GUI of TempestSDR.
2. Installing both MinGW and MSYS.
3. Ensuring the Java (C:\Java\bin) / MinGW / MSYS paths (yes, both C:\MinGW\bin and C:\MinGW\msys\1.0\bin) are in my Path system environment variable.
4. Putting the downloaded AirSpy ExtIO 1.0.7 into the Release\dlls\WINDOWS\X64 folder instead of the X32 folder.

I’ve narrowed down a likely cause: for the AirSpy to be used for this on a 64-bit machine, I think a 64-bit ExtIO DLL is needed, but the one provided in http://www.montefusco.com/airspy/ (specifically AirSpy ExtIO 1.0.7) seems to be a 32-bit version. Any comments/corrections?

I attempted to get this working. I installed JRE (32bit) and JDK (32bit) 9.0.1 on Windows 10. I used 32 bit MinGW. I also downloaded the EXTIO_HACKRF.dll file from https://github.com/jocover/ExtIO_HackRF . When I load the ExtIO, I get the error “The ExtIO dll is not compatible with the current machine or does not exist. Please check the filename is correct and the file is a valid ExtIO dll file and try again.” I analyzed the HACKRF ExtIO with Dependency Walker and ran into a whole bunch of errors. Does anyone have any advice?

hi
I run 64 bit Windows 10, I have downllowd JtempestSDR.jar and 64 bit ExtIO_RTL.dll
I have RTL2832U dongles and HackRF ONE
can you give me a guid step by step
I don’t know how operation to get “TempsetSDR.exe”
Thanks.[email protected]

I just posted this up top but, You should try watching Tempest For Eliza on Youtube on the target monitor. With the computer you’re using SDR# with, switch it to AM channel and find the sound. Much faster and simpler. I got great results within 15 minutes compared to the hours I spent finding it through NFM. Also I used this with a HackRF and it worked surprisingly well.

Exception in thread “AWT-EventQueue-0” java.lang.UnsatisfiedLinkError: martin.tempest.core.TSDRLibrary.init()V
at martin.tempest.core.TSDRLibrary.init(Native Method)
at martin.tempest.core.TSDRLibrary.(TSDRLibrary.java:207)
at martin.tempest.gui.Main.(Main.java:186)
at martin.tempest.gui.Main$1.run(Main.java:165)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$500(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

Submit a Story/Contact

Meta

What is RTL-SDR

The RTL-SDR is an ultra cheap software defined radio based on DVB-T TV tuners with RTL2832U chips. The RTL-SDR can be used as a wide band radio scanner. It may interest ham radio enthusiasts, hardware hackers, tinkerers and anyone interested in RF.