• Stars
    star
    746
  • Rank 60,407 (Top 2 %)
  • Language
    Python
  • License
    BSD 3-Clause "New...
  • Created over 7 years ago
  • Updated 27 days 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,373
star
2

ubertooth

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

luna

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

ViewSB

open-source USB analyzer toolkit with support for a variety of capture hardware
Python
341
star
5

greatfet

GreatFET firmware and host software
C
303
star
6

yardstick

Yet Another Radio Dongle
254
star
7

daisho

SuperSpeed USB 3.0 FPGA platform
Eagle
251
star
8

gr-bluetooth

A Bluetooth receiver implementation for GNU Radio
C++
199
star
9

libbtbb

A Bluetooth baseband decoding library
C
182
star
10

greatfet-hardware

This repository is deprecated. Go to:
116
star
11

throwing-star-lan-tap

A passive tap for monitoring 10/100 Ethernet.
110
star
12

packetry

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

lab-notes

notes, test reports, and other documentation for projects in progress
Python
76
star
14

greatfet-tutorials

Learn to do something new with GreatFET!
58
star
15

apollo

microcontroller-based FPGA / JTAG programmer
C
53
star
16

python-usb-protocol

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

gsg-kicad-lib

GSG's schematic symbols and modules for KiCad
47
star
18

amalthea

an experimental SDR platform
Python
42
star
19

cynthion

USB test instrument
Rust
37
star
20

libgreat

a library to help you do Great things
C
32
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
30
star
23

cynthion-hardware

USB test instrument
30
star
24

plotsweep

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

saturn-v

DFU bootloader for SAMD11 and SAMD21 microcontrollers
C
20
star
26

pyfwup

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

urti-mainboard

Mainboard of URTI, the Universal Radio Test Instrument
17
star
28

misc

miscellaneous Great Scott Gadgets projects
12
star
29

luna-soc

Amaranth HDL libary for building USB-capable SoC designs.
Verilog
12
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
6
star
36

sous-vide

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

LNA1109

LNA with SAW filter
5
star
38

tycho

Production test jig for Cynthion
4
star
39

luna-analyzer-capture

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

cynthion-test

Test software for Cynthion hardware
Python
2
star
41

demo-kit

1
star
42

cynthion-analyzer

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