• Stars
    star
    771
  • Rank 58,926 (Top 2 %)
  • Language
    Python
  • License
    BSD 3-Clause "New...
  • Created almost 8 years ago
  • Updated about 1 month ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Implement your own USB device in Python, supported by a hardware peripheral such as Cynthion or GreatFET

FaceDancer 2.9

This repository houses the next generation of FaceDancer software. Descended from the original GoodFET-based FaceDancer, this repository provides a python module that provides expanded FaceDancer support-- including support for multiple boards and some pretty significant new features.

Where are my scripts?

In preparation for the 3.0 release of FaceDancer, scripts in the "old" style have been moved to legacy-applets. Their functionality should be unchanged.

These will continue working even after the 3.0 merge; as facedancer.compat will continue to support the old scripts and their syntax.

What is a FaceDancer?

FaceDancer boards are simple hardware devices that act as "remote-controlled" USB controllers. With the proper software, you can use these boards to quickly and easily emulate USB devices-- and to fuzz USB host controllers!

This particular software repository currently allows you to easily create emulations of USB devices in Python. Control is fine-grained enough that you can cause all kinds of USB misbehaviors. :)

For more information, see:

USBProxy 'Nouveau' and Protocol Analysis

A major new feature of the newer FaceDancer codebase is the ability to man-in-the middle USB connections-- replacing one of the authors' original USBProxy project. This opens up a whole new realm of applications-- including protocol analysis and live manipulation of USB packets-- and is especially useful when you don't control the software running on the target device (e.g. on embedded systems or games consoles).

                 +-----------------------------------------------------------------------+
+------------+   |  +--------------------------------+   +---------------------------+   |  +--------------+
|            |   |  |                                |   |                           |   |  |              |
|  PROXIED   |   |  |         HOST COMPUTER          |   |    FACEDANCER DEVICE      |   |  |  TARGET USB  |
|   DEVICE   <------>  running FaceDancer software   <--->  acts as USB-Controlled   <------>     HOST     |
|            |   |  |                                |   |      USB Controller       |   |  |              |
|            |   |  |                                |   |                           |   |  |              |
+------------+   |  +--------------------------------+   +---------------------------+   |  +--------------+
                 |                                                                       |
                 |                    MITM Setup (HOST + FACEDANCER)                     |
                 +-----------------------------------------------------------------------+

This feature is complete, but could use more documentation. Pull requests are welcome. :)

How do I use this repository?

First, you'll likely want to set the BACKEND environment variable, which lets the software know which type of FaceDancer board you'd like to use. If this variable isn't set, the software will try to guess for you based on what's connected. It doesn't always make the best guesses, so you're probably better off setting it yourself.

Next, you'll probably want to check out one of the examples, or one of the pre-made scripts. Examples in the new syntax are located under examples. The core FaceDancer scripts in the "old" syntax are located in legacy-applets.

For example:

export BACKEND=greatfet
./examples/rubber-ducky.py

What boards are currently supported?

  • All GoodFET-based FaceDancers, including the common FaceDancer21 (BACKEND=goodfet)
  • The GreatFET One (BACKEND=greatfet)
  • The NXP LPC4330 Xplorer board. (BACKEND=greatfet)
  • The CCCamp 2015 rad1o badge with GreatFET l0adable (BACKEND=greatfet)
  • RPi + Max3241 Raspdancer boards (BACKEND=raspdancer)

Note that hardware restrictions prevent the MAX3420/MAX3421 boards from emulating more complex devices-- there's limitation on the number/type of endpoints that can be set up. The LPC4330 boards-- such as the GreatFET-- have fewer limitations.

For a similar reason, the MAX3420/MAX3421 boards (BACKEND=goodfet or BACKEND=raspdancer) currently cannot be used as USBProxy-nv MITM devices. All modern boards (BACKEND=greatfet) should be fully functional.

What boards could be supported soon?

  • The LUNA USB multitool.
  • Any Linux computer with gadgetfs support (e.g. the Pi Zero or Beaglebone Black)
  • Anything supporting USB-over-IP.

What features do you plan on adding?

The roadmap is hazy, but in addition to multi-board support, this repository eventually will be home to some cool new features, such as:

  • High-speed ("USB 2.0") device emulation on devices with USB 2.0 PHYs.
  • On-the-fly

Whose fault is this?

There are a lot of people to blame for the awesomeness that is this repo, including:

  • Kate Temkin (@ktemkin)
  • Travis Goodspeed (@travisgoodspeed)
  • Sergey Bratus (@sergeybratus)
  • Dominic Spill (@dominicgs)
  • Michael Ossmann (@michaelossmann)
  • Mikaela Szekely (@Qyriad)
  • anyone whose name appears in the git history :)

Contributions?

... are always welcome. Shoot us a PR!

More Repositories

1

hackrf

low cost software radio platform
C
6,522
star
2

ubertooth

Software, firmware, and hardware designs for Ubertooth
C
1,932
star
3

luna

Amaranth HDL framework for monitoring, hacking, and developing USB devices
Python
975
star
4

ViewSB

[Archived] open-source USB analyzer toolkit with support for a variety of capture hardware
Python
342
star
5

greatfet

GreatFET firmware and host software
C
309
star
6

yardstick

Yet Another Radio Dongle
258
star
7

daisho

SuperSpeed USB 3.0 FPGA platform
Eagle
253
star
8

gr-bluetooth

[Archived] A Bluetooth receiver implementation for GNU Radio
C++
200
star
9

libbtbb

A Bluetooth baseband decoding library
C
184
star
10

packetry

A fast, intuitive USB 2.0 protocol analysis application for use with Cynthion.
Rust
135
star
11

greatfet-hardware

This repository is deprecated. Go to:
116
star
12

throwing-star-lan-tap

A passive tap for monitoring 10/100 Ethernet.
111
star
13

cynthion

USB test instrument
Rust
83
star
14

lab-notes

notes, test reports, and other documentation for projects in progress
Python
81
star
15

apollo

microcontroller-based FPGA / JTAG programmer
C
63
star
16

cynthion-hardware

USB test instrument
61
star
17

greatfet-tutorials

Learn to do something new with GreatFET!
60
star
18

python-usb-protocol

python library providing utilities, data structures, constants, parsers, and tools for working with USB data
Python
54
star
19

gsg-kicad-lib

GSG's schematic symbols and modules for KiCad
49
star
20

amalthea

an experimental SDR platform
Python
42
star
21

bucatini

a noodly Amaranth HDL-wrapper for FPGA SerDes' presenting a PIPE PHY interface
Python
31
star
22

hackrf-nightly

Nightly build repository for HackRF - builds everything pushed to mossmann/hackrf master branch.
HTML
31
star
23

libgreat

a library to help you do Great things
C
31
star
24

plotsweep

A tool to plot spectrogram images using hackrf_sweep, soapy_power, or rtl_power output.
Rust
30
star
25

urti-mainboard

Mainboard of URTI, the Universal Radio Test Instrument
24
star
26

pyfwup

Python FirmWare UPgrader -- a DFU (and similar) utility for python
Python
22
star
27

saturn-v

DFU bootloader for SAMD11 and SAMD21 microcontrollers
C
20
star
28

misc

miscellaneous Great Scott Gadgets projects
13
star
29

luna-soc

Amaranth HDL libary for building USB-capable SoC designs.
Verilog
13
star
30

toorcamp2018badge

badge for ToorCamp 2018, an electronic jar of fireflies
C
11
star
31

ubertooth-nightly

Nightly build repository for Ubertooth - builds everything pushed to greatscottgadgets/ubertooth master branch.
HTML
10
star
32

greatfet-pinout

Simple repository hosting an interactive GreatFET pinout table.
JavaScript
7
star
33

amalthea-hardware

experimental SDR platform
7
star
34

LNA3030

LNA3030 is an in-line SMA Low Noise Amplifier with SAW filter
7
star
35

cydonia

a 2.4 GHz receiver front-end
7
star
36

LNA1109

LNA with SAW filter
5
star
37

sous-vide

Let Them Eat Crème Brûlée!
C
5
star
38

urti-ui-board

User Interface board of URTI, the Universal Radio Test Instrument
5
star
39

tycho

Production test jig for Cynthion
4
star
40

luna-analyzer-capture

Experimental native host code for LUNA USB analyzer capture
C
4
star
41

cynthion-test

Test software for Cynthion hardware
Python
3
star
42

cynthion-analyzer

Integration repository for developing Cynthion's USB analyzer mode
Makefile
2
star
43

demo-kit

1
star
44

luna-boards

Board definitions for LUNA
Python
1
star