- My Hardware
- My Setups
- Pwnagotchi Build Guide
- Build Instructions
- Step 1) Download the image
- Step 2) Flash the image to microSD
- Step 3) Build your config
- Step 4) Copy the config to MicroSD
- Step 5) Important if you are using an SPI LCD screen!
- Step 6) Boot for the first time
- Step 7) Bluetooth connection manually
- Step 8) Change the default passwords
- Step 9) Plugins and mods
- Step 10) Back up your work
- Build Instructions
- Boards:
- Screens:
- Waveshare:
- Eink 2,13" (250x122)
- OLED/LCD (OLEDs: 128x64; SSD1306; LCD: 320x240; 4 GPIO Buttons)
- Adafruit:
- Pitft 2,8" (320x240; Resistive touch; 4 GPIO Buttons; GPIO Header)
- Pitft 2,4" (320x240; Resistive touch; 5 GPIO Buttons; GPIO Header)
- Mini Pi tft 1,3" (240x240; 2 GPIO Buttons; Stemma QT)
- TFT Bonnet (240x240; 7 GPIO Buttons/Joystick; Stemma QT)
- Pimoroni:
- Displayhatmini (320x240; RGB LED, 4 GPIO Buttons; Stemma QT; Breakout Garden / I2C header)
- Pirateaudio line-out (240x240; 4 GPIO Buttons; PCM5100A DAC chip with 3,5mm jack)
- GFX Hat 128x64 (128x64; RGB Backlight; 6 capacitive touch buttons)
- Hyperpixel Touch (800x480; Breakout Garden / I2C header)
- Sparkfun:
- I2C OLED (128x32; SSD1306)
- Waveshare:
- Power:
- GPS:
- USB GPS Dongle (U-blox 7 copy)
- PA1010D I2C GPS boards
- Sandisk Ultra 32Gb micro SD
- Micro USB OTG cables and adapters
- USB Ethernet adapter
Build logs and details coming soon!
Name | Picture | Board | Screen | Case | Power | Extra |
---|---|---|---|---|---|---|
Pwnamon | Raspberry Pi0W | Waveshare Eink 2,13" | 3D printed | PiSugar 3 | USB GPS Dongle | |
FAT32 | Pi 3B | Adafruit Pitft 2,8" | Adafruit Case and Faceplate | USB | ||
FAT16 | Pi 3A+ | Adafruit Pitft 2,4" | Adafruit Case and Faceplate | USB | ||
Pip-Boy | Pi 0W2 | Pimoroni Displayhat mini | 3D printed | PiSugar 3 | ||
WarDriver | Pi 0W2 | Adafruit Mini TFT | 3D printed (under development) | USB | Pimoroni I2C GPS | |
RasTest OLEDLCD | Pi 3A+ | Waveshare OLED/LCD | Geekworm Alu case (+ 3D printed faceplate under development) | USB | ||
RasTest GFX Hat | Pi 3A+ | Pimoroni GFX Hat | 3D printed (under development) | Pisugar 3 Plus | Adafruit I2C GPS | |
PLEASE REFER TO THE UNOFICCIAL PWNAGOTCHI SITE! Also you can join the Pwnagotchi community on Reddit and Discord!
I use Jayofelonys repo. It is under active development based on the community feedback and updated frequently with bugfixes, new features, and supports more than 80 screens. Also you can skip most of these steps, if you can ssh in to your device, and use the wizard:
sudo pwnagotchi --wizard
Note: Recommended to use Raspberry Imager to flash the image.
Several tutorials exist online (Google or YouTube) that provide instructions for flashing an image to a microSD.
Before flashing the image I use the Raspberry Imager, to set the timezone, and change the default user/password for the OS.
Your initial config.toml will contain the baseline configuration for your pwnagotchi, such as the name of the device. It is recommended to avoid trying to configure all of your plugins at this stage, and only focus on the essential plugins, such as bt-tether, Modify as necessary!
main.name = "Pwnagotchi"
main.whitelist = [
"your wifi here",
]
main.plugins.bt-tether.enabled = true
main.plugins.bt-tether.devices.android-phone.enabled = true
main.plugins.bt-tether.devices.android-phone.search_order = 1
main.plugins.bt-tether.devices.android-phone.mac = "MA:CA:DD:RE:SS"
main.plugins.bt-tether.devices.android-phone.ip = "192.168.44.44"
main.plugins.bt-tether.devices.android-phone.netmask = 24
main.plugins.bt-tether.devices.android-phone.interval = 1
main.plugins.bt-tether.devices.android-phone.scantime = 0
main.plugins.bt-tether.devices.android-phone.max_tries = 0
main.plugins.bt-tether.devices.android-phone.share_internet = true
main.plugins.bt-tether.devices.android-phone.priority = 1
main.plugins.bt-tether.devices.ios-phone.enabled = false
main.plugins.bt-tether.devices.ios-phone.search_order = 2
main.plugins.bt-tether.devices.ios-phone.mac = "MA:CA:DD:RE:SS"
main.plugins.bt-tether.devices.ios-phone.ip = "172.20.10.6"
main.plugins.bt-tether.devices.ios-phone.netmask = 24
main.plugins.bt-tether.devices.ios-phone.interval = 1
main.plugins.bt-tether.devices.ios-phone.scantime = 0
main.plugins.bt-tether.devices.ios-phone.max_tries = 0
main.plugins.bt-tether.devices.ios-phone.share_internet = true
main.plugins.bt-tether.devices.ios-phone.priority = 999
ui.display.enabled = true
ui.display.type = "waveshare_4"
ui.fps = 1
ui.invert = false
ui.web.enabled = true
ui.web.username = "changeme"
ui.web.password = "changeme"
Note: If you removed, insert the microSD card flashed in Step 2. Open the new drive titled "boot", and copy over your config.toml
For jays image since 2.8.7 until now, there is some issue with the SPI chip select stuff.
If your screen is not showing any image, but the backlight is on, you should modify the /boot/firmware/config.txt
, and change dtoverlay=spi0-0cs
to dtoverlay=spi0-1cs
under the necessary pi settings.
Note: if you are sure that you need to modify the config.txt, you can do it after flashing the card. The config.txt is directly in the cards boot partition.
WARNING: BE PATIENT! The First boot will take longer than average due to key generation.
NOTE: If you specified settings for bt-tether plugin, ensure your mobile device is nearby and listening for new bluetooth devices to pair. Ensure Internet sharing via Personal Hotspot is enabled. Your mobile device will be prompted to pair with your pwnagotchi.
SSH in (default login: pi, pw: raspberry)
sudo bluetoothctl
scan on
Wait until your phones mac address shows up and copy your phones mac address
pair MA:CA:DD:RE:SS
trust MA:CA:DD:RE:SS
exit
If you haven't done it with the Raspberry Imager, change the user "pi" password. Default is "raspberry"
passwd
Change "root" password:
sudo passwd root
If you haven't done it when creating your config.toml file, change pwnagotchis Web UI password. Default is "changeme"
sudo nano /etc/pwnagotchi/config.toml
Locate and update the values for:
ui.web.username = "changeme"
ui.web.password = "changeme"
Update bettercap password, if you want to, I usually leave it as-is. Default is "pwnagotchi"
sudo nano /etc/pwnagotchi/config.toml
locate and update the values for:
bettercap.username = "pwnagotchi"
bettercap.password = "pwnagotchi"
For the new bettercap password to work yoyu have to modify these two files as well to match config.toml:
sudo nano /usr/local/share/bettercap/caplets/pwnagotchi-auto.cap
sudo nano /usr/local/share/bettercap/caplets/pwnagotchi-manual.cap
reload pwnagotchi for config changes to apply.
sudo systemctl restart pwnagotchi.service
Consider this step OPTIONAL, unless you would like these custom plugins. Otherwise, proceed to Step 10.
Make custom-plugins directory defined in config.toml, if not done so already.
cd ~ sudo mkdir /usr/local/share/pwnagotchi/custom-plugins/
I usually use the default plugin directory.
Plugins marked with * are not tested by me yet, or needs some tweaking to work on my setup. Installation instruction and details soon
These plugins are provided in Jayofelonys repo, therefore if you have a full config.toml, the settings should be in your config.toml as well.
- auto-update I usually leave it turned off, and update after the new release seems stable.
- bt-tether See Step 3 and Step 7.
- fix-services Updated watchdog plugin to avoid the blindbug issue.
- gdrivesync* Not tested, but I would like to use something like this, to backup my pwnys automatically to a server (preferably to one of my NAS).
- gpio_buttons* There are some issues with GPIO in the latest builds, I use it to control the pwnmenu.
- grid Sending data to the grid
- logtail Useful tool in the webUI, to check your logs without ssh.
- memtemp Shows system information on the screen (CPU temperature; load and memory load).
- onlinehashcrack Automatically uploads handshakes to onlinehashcrack.com.
- session-stats Displays stats of the current session in the webUI.
- webcfg Editor for your config.toml file in the webUI.
- webgpsmap Shows GPS location of your handshakes on a map.
- wpa-sec Automatically uploads handshakes to wpa-sec.
- Clock Clock/Calendar for pwnagotchi
- PiSugar3 The PiSugar 3 Plugin displays the battery percentage as well as the charging status on your Pwnagotchi's UI.
- Powerutils The Powerutils plugin lets you run the Pwnagotchi's internal shutdown, restart, or reboot functions, instead of the system "shutdown" command. By using the internal functions, you can access other features such as syncing the AI data before shutdown, or switching between AUTO and MANU mode.
- Pwnmenu Pwnmenu is a plugin that lets you run scripts on a Pwnagotchi using the 2.13 inch Waveshare e-paper display. You can use it to select and call scripts to extend the functionality of the host Raspberry Pi Zero W. To do this, the Pwnmenu can be controlled with terminal commands bound to GPIO pins.
- Custom Faces A mod that allows you to use custom images as pwnagotchi Faces with transparency feature (.png) and themed plugins.
- Tweak View Editor for the UI layout.
- Fancygotchi* Theme manager for the Pwnagotchi. NOT WORKING WITH JAYS IMAGE AT THE MOMENT!!!
- GPSD Easy Uses gpsd to report lat/long on the screen and setup bettercap pcap gps logging. Better than the baked in GPS plugin. The plugin should install gpsd automatically, but it can take a long time, especially with BT internet sharing. Before enabling the plugin for the first time you can install GPSD manually from the terminal:
sudo apt-get install gpsd gpsd-clients
- Wardriver A simple plugin for wardriving on your pwnagotchi.
- Enable deauth / Enable Assoc Enable and disable DEAUTH and ASSOC attacks on the fly. Enabled when plugin loads, disabled when plugin unloads.
- Touch UI* Use touchscreen input to toggle settings.
- Instattack Pwn more aggressively. Launch immediate associate or deauth attack when bettercap spots a device.
- EXP V2 Get exp every time a handshake get captured. You can add the Age plugin too, but I reflash my build so often that EXP is more than enough for my pwnys.
- Achievement* Collect achievements for daily challenges.
- Shower Thoughts Displays random r/showerthoughts headlines on your pwnagotchi when the device is waiting. You need to modify core files, which are rewritten to default whith autoupdate. Thinking about changing to RSS Voice plugin in the future
Download the Backup script from Github Append the "FILES_TO_BACKUP" section of the backup script to include the following additional files that have been added or modified as a result of this guide:
FILES_TO_BACKUP="/root/brain.nn \
/root/brain.json \
/root/.api-report.json \
/root/.ssh \
/root/.bashrc \
/root/.profile \
/root/handshakes \
/root/peers \
/etc/pwnagotchi/ \
/etc/ssh/ \
/var/log/pwnagotchi.log \
/var/log/pwnagotchi*.gz \
/home/pi/.ssh \
/home/pi/.bashrc \
/home/pi/.profile \
/root/.api-report.json \
/root/.auto-update \
/root/.bt-tether* \
/root/.net_pos_saved \
/root/.ohc_uploads \
/root/.wigle_uploads \
/root/.wpa_sec_uploads \
/usr/bin/pwnlib \
/etc/systemd/system/pwngrid-peer.service \
/usr/local/share/pwnagotchi/custom-plugins \
/usr/local/lib/python3.11/dist-packages/pwnagotchi"
Note: The last entry in the list must include an end quotation mark. Be sure to relocate this to the end of the list before saving. Make the script executable:
sudo chmod +x backup.sh
Run the script
sudo ./backup.sh
Enjoy your new Pwnagotchi, and please support the Pwnagotchi community on Reddit and Discord!