diff --git a/.gitignore b/.gitignore index 4f9bb29..5c83277 100644 --- a/.gitignore +++ b/.gitignore @@ -32,3 +32,4 @@ *.dSYM/ /main +main diff --git a/README.md b/README.md index 42d900f..2dfc3e0 100644 --- a/README.md +++ b/README.md @@ -10,14 +10,10 @@ Publicly available documents already discuss exfiltration from secured systems u How to Use It ------------------ -Compile the program using make: +Enter the `Using _mm_stream_si128` folder and compile using make. (There are also other flavors you can `make` and try in different folders!) make -And run it on an Apple MacBook Air (13-inch, Early 2015): - - ./main - Then use a Sony STR-K670P radio receiver with the included antenna and tune it to 1580 kHz on AM. You should hear the "Mary Had a Little Lamb" song playing repeatedly. Other equipment and tuning may work as well. On the equipment above, the author has achieved clear transmission over two meters of open air or one meter through drywall. Different results will be achievable with different equipment. diff --git a/Using counter and threads/Makefile b/Using counter and threads/Makefile new file mode 100644 index 0000000..6f343cc --- /dev/null +++ b/Using counter and threads/Makefile @@ -0,0 +1,21 @@ +all : gmain cmain + +clean : + rm -f gmain + rm -f cmain + +grun : gmain + ./gmain + +crun : cmain + ./cmain + + +gmain : main.cpp + g++ -Wall -O2 -std=c++11 -pthread -lrt -o gmain main.cpp + +cmain : main.cpp + clang++ -Wall -O2 -std=c++11 -stdlib=libc++ -pthread -lrt -o cmain main.cpp + + +.PHONY : all clean run diff --git a/Using counter and threads/main.cpp b/Using counter and threads/main.cpp new file mode 100644 index 0000000..7e425f2 --- /dev/null +++ b/Using counter and threads/main.cpp @@ -0,0 +1,103 @@ +// SYSTEM BUS RADIO +// https://github.com/fulldecent/system-bus-radio +// Copyright 2016 William Entriken +// C++11 port by Ryou Ezoe + +#include +#include +#include +#include +#include +#include +#include + +std::mutex m ; +std::condition_variable cv ; +std::chrono::high_resolution_clock::time_point mid ; +std::chrono::high_resolution_clock::time_point reset ; + + +void boost_song() +{ + using namespace std::chrono ; + + while( true ) + { + std::unique_lock lk{m} ; + cv.wait( lk ) ; + + std::atomic x{0} ; + while( high_resolution_clock::now() < mid ) + { + ++x ; + } + std::this_thread::sleep_until( reset ) ; + } +} + +void square_am_signal(float time, float frequency) +{ + using namespace std::chrono ; + + std::cout << "Playing / " << time << " seconds / " << frequency << " Hz\n" ; + + seconds const sec{1} ; + nanoseconds const nsec{ sec } ; + using rep = nanoseconds::rep ; + auto nsec_per_sec = nsec.count() ; + + nanoseconds const period( static_cast( nsec_per_sec / frequency) ) ; + + auto start = high_resolution_clock::now() ; + auto const end = start + nanoseconds( static_cast(time * nsec_per_sec) ) ; + + while (high_resolution_clock::now() < end) + { + mid = start + period / 2 ; + reset = start + period ; + + cv.notify_all() ; + std::this_thread::sleep_until( reset ) ; + start = reset; + } +} + +int main() +{ + + for ( unsigned i = 0 ; i < std::thread::hardware_concurrency() ; ++i ) + { + std::thread t( boost_song ) ; + t.detach() ; + } + + while (1) + { + square_am_signal(0.400, 2673); + square_am_signal(0.400, 2349); + square_am_signal(0.400, 2093); + square_am_signal(0.400, 2349); + square_am_signal(0.400, 2673); + square_am_signal(0.400, 2673); + square_am_signal(0.790, 2673); + square_am_signal(0.400, 2349); + square_am_signal(0.400, 2349); + square_am_signal(0.790, 2349); + square_am_signal(0.400, 2673); + square_am_signal(0.400, 3136); + square_am_signal(0.790, 3136); + square_am_signal(0.400, 2673); + square_am_signal(0.400, 2349); + square_am_signal(0.400, 2093); + square_am_signal(0.400, 2349); + square_am_signal(0.400, 2673); + square_am_signal(0.400, 2673); + square_am_signal(0.400, 2673); + square_am_signal(0.400, 2673); + square_am_signal(0.400, 2349); + square_am_signal(0.400, 2349); + square_am_signal(0.400, 2673); + square_am_signal(0.400, 2349); + square_am_signal(0.790, 2093); + } +}