Вот представьте себе вы тихо-мирно набираете текст на компьютере. Постепенно начинаете замечать, что периодически на клавиатуре начинают нажиматься случайные буквы. Сначала это не особо напрягает, но через некоторое время начинает очень злить :-) Вы меняете клавиатуру на другую, но проблема не исчезает. Проверяете компьютер всеми возможными антивирусами но все усилия ни к чему не приводят и проблема не решается. В конце концов переустановка операционной системы. Но и после этого ничего не изменяется. Через некоторое время вы обнаруживаете подозрительную «флешку»

А флешка эта ни какая на самом деле не флешка! А эмулятор usb клавиатуры. Суть его работы такова. Эмулятор представляется компьютеру  как обычная usb клавиатура и через случайные промежутки времени нажимает случайные буквы клавиатуры. Эмулятор не требует ни каких драйверов (они уже есть в системе) и ни какой настройки. Достаточно просто воткнуть его во вражеский компьютер и смотреть на мучения жертвы :-) Конечно флешка довольно таки заметна, но подозрений вызвать по идее не должна. Так же этот эмулятор легко вычислить если открыть диспетчер устройств и просмотреть список подключенных клавиатур. Наш эмулятор там обязательно засветится.  Схема девайса особой сложностью не отличается:

Следует обратить внимание на то, что на плате и на схеме отведен проводок от  PC0. Естественно возникает вопрос для чего это нужно. А нужно это для инициализации генератора случайных чисел. По идее есть функция random() которая возвращает случайное число, но она нам не совсем подходит. Дело в том, что функция делает свое дело, но последовательность генерируемых случайных чисел будет каждый раз одинаковая. Чтоб хоть как-то ее изменить нужно перед вызовом функции random, вызвать srandom и передать ей какое либо случайное число. Для генерации такого случайного числа я решил использовать . . . АЦП! В двух младших битах регистра данных ацп как правило всегда находится всякий случайный мусор. Вот этот мусор как раз и использует моя функция GetRndDigit(). Она 8 раз считывает младший бит ацп и запихивает бит за битом в переменную. У функции есть один недостаток. Что бы получать качественные случайные числа, нужно перед считыванием в очередной раз первого бита ацп, делать задержку. В результате функция исполняется слишком продолжительное время. Именно поэтому она вызывается только один раз чтоб инициализировать генератор случайных чисел. Проводок на плате от пина PC0 нужен чтоб лучше ловить наводки и тем самым улучшить генерацию случайных чисел. Я использовал микроконтроллер в корпусе TQFP-32 исключительно для миниатюрности. Можно без проблем воткнуть и в DIP корпусе главное помнить, что нумерация выводов другая! Для создания этого девайса была принесена в жертву флешка JetFlash на 128 мегабайт. Платка у меня получилась вот такой:

Ни каких настроек девайс не требует. Достаточно просто прошить контроллер и запаять детальки. Нужно только не забыть выставить фьюзы микроконтроллера на тактирование от кварцевого резонатора. Можно доработать устройство, приделать к нему пару кнопок и сделать так чтоб при нажатии печатались целые фразы. Ну или еще что-нибудь придумать ведь исходники есть. Кстати об исходниках. Данная разработка основана на коде компании Objective Development. Я просто немного допилил схему и программу.
Файлы проекта
P.S. на фотке плата с не большой ошибкой. схема и печатка в файле — правильные