You’ll be able to build basic digital transmitters and receivers using OOK, FSK and PSK. You’ll also understand the building blocks of digital signals: preambles, error-checking and payload encodings. The capstone for the course will put your newfound knowledge to work reverse engineering a digital control system.
No previous engineering or SDR knowledge is necessary – we start from the beginning.
You will not need to bring anything to the class. You will use our laptops and SDR hardware.
My brother and I co-authored the Field Expedient SDR book series and have taught SDR to students who possessed widely varying degrees of proficiency. Based on these experiences, we believe that it takes four days of training for a newcomer to become proficient building analog and digital radios with gnuradio and SDR.
This course comprises the second half of that four days, and is for those who have taken my first course or have self-taught the basics of analog SDR. Laying a solid foundation better enables InfoSec professionals to put SDRs to work detecting, intercepting and analyzing wireless vulnerabilities. This foundation is also useful for building digital transmitters to exploit RF vulnerabilities or to exfiltrate data.
As with my book series, this class avoids highly mathematical engineering lectures and focuses on teaching through 25 practical, hands-on exercises. Though we avoid the heavy math, we will carefully and methodically study digital radio design so that you can build your own gnuradio flowgraphs with confidence when needed.
We begin by building an On-Off-Keyed (OOK) receiver, and then breaking down each part of it to see how it works and why it works. Then we take a short detour into the world of complex numbers. The goal of this detour is not to work through formal mathematical definitions, but to understand from a functional level how they impact radio design. Next we build the flip-side of our first project – an OOK transmitter.
Next, we dive into the various pieces of a digital signal: the preamble, the header, the payload and the error checking. We’ll then spend some time extracting payloads from digital signals using clock recovery blocks and some simple Python scripts.
We then shift our attention to Frequency Shift Keyed (FSK) systems, building a receiver and a transmitter. We then spend some time optimizing our FSK system, seeing how we can design it to minimize the bandwidth it consumes without impacting performance. This process of optimization will shed light on a number of important characteristics of FSK design.
Then we turn our attention to Phase Shift Keying (PSK). We won’t dive as deeply into PSK as we did with OOK and FSK because there’s so much more to cover with this complicated modulation scheme. We will, however, build a Differential PSK transmitter and receiver and explain the key things to know about its design and function.
Finally, we will put our newfound knowledge to work by doing some reverse engineering. We’ll only have time to work through a handful of simple projects, but it will be enough to get you started on the path to breaking down signals yourself.
Thanks to gnuradio’s excellent simulation capabilities, we’ll work through a number of our projects without plugging in any SDR hardware. This will result in cleaner and more deterministic exercises, but we won’t stop there. We’ll also build and operate the key designs in hardware to build experience working through the kinks that invariably occur in real-world projects. To keep things entertaining, a few of our projects will be competitive, Capture the Flag-style exercises.
When you’ve finished the class, you’ll know how to build scanners to detect RF transmissions, receivers to capture and decode signals, and transmitters to produce your own signals. You’ll also be able to build custom transmit-receive pairs for exfiltrating data. Finally, your new digital radio foundation will prepare you for understanding and implementing the myriad of SDR resources you find online.
- Class goals and methods
- Review of Basic Analog Transmitter
- Review of Basic Analog Receiver
- Review of gnuradio Usage
- Review of Frequency Domain
- Digital Baseband versus Analog
- Clocking and Synchronization
- Project – OOK Receiver
- Breaking down the OOK Flowgraph
- Event Triggering in QT GUI Widgets
- Project – OOK Receiver Improvements
- Project – OOK Receiver with SDR Hardware
- Complex Numbers – Key Things to Know
- IQ Sampling
- Project – Building Complex Numbers
- Adding, Subtracting and Multiplying Complex Numbers
- Project – Complex Arithmetic
- How Complex Values Relate to Real Values
- Magnitude and Phase
- Project – Displaying Signals In the Complex Plane
- Vector Sources
- Project – Building a Digital Baseband Signal
- Generating OOK Signals
- Project – OOK Transmitter (simulated)
- Break for Lunch
- How to Test Digital Radios
- Project – Combined OOK Transmitter and Receiver Flowgraph
- Hardware Transmission and the Law
- Project – Transmitting and Receiving OOK Signals with SDR Hardware
- ASK versus OOK
- Higher Order ASK
- Symbols Defined
- Symbol Rate
- Breaking Down the Digital Baseband
- Clock Synchronization
- Polyphase Clock Sync Block
- Project – Extracting Bits
- Correlate Access Code Block
- Project – Detecting Preambles
- Project – Detecting Preambles (Better)
- Correlate Access Code and Tagged Streams
- Custom CAC-TS with Fixed Length
- Project – Detecting Preambles (Best)
- Extracting Raw Payloads
- Project – Simple Message Passing
- Repack Bits Block
- Message Debug Block
- Project – Producing Raw Payload Data
- Polyphase Clock Sync Tips
- Project – Receiving Strings
- Project – End-to-End Digital Communication
- Baseband Structure
- Processing Raw Payloads Externally
- Project – Saving and Processing Raw Payloads
- Payload Encodings
- Decoding with Python – Manchester
- Decoding with Python – PWM
- Project – Decoding the Payload
- Less Common Encodings – PIE
- Less Common Encodings – PPM
- Little versus Big Endian
- Error Checking
- Arithmetic Checksums and Parity Bits
- CRCs – What you Need to Know
- Modular Radio Design
- Frequency Shift Keying (FSK)
- Mark, Space and Higher Order FSK
- Modular Digital Radio Design
- Quadrature Demod Block
- Project – Convert OOK to FSK
- Project – Converting FSK to GMSK
- Break for Lunch
- How Noise Impacts FSK
- Channel Models and their Properties
- Project – Adding a Channel Model to the FSK System
- Power Squelch
- Project (Team CTF) – Send Info via GMSK
- PSK Theory
- Synchronization and Differential PSK
- Packed and Unpacked Bytes
- Project – Converting GMSK System to DPSK
- Higher Order PSK
- PSK Constellations
- Project – Converting DPSK to 8-PSK
- Project – Sending Strings in HW via 8-PSK
- A Brief Introduction to Reverse Engineering
- Project (CTF) – Reverse Engineering Simple Protocol
- Class Wrap-Up
- Suggested Next Steps for Students