mirror of
https://github.com/dbisu/pico-ducky.git
synced 2025-12-06 02:41:45 +00:00
* Adds Hak5's Keystroke Reflection Exfoliation Adds a way to read in caps, scroll, and num lock so that you can export information from the attack into a loot.bin. Has some caveats on how it works * Fixed programing status bug
59 lines
1.6 KiB
Python
59 lines
1.6 KiB
Python
# License : GPLv2.0
|
|
# copyright (c) 2023 Dave Bailey
|
|
# Author: Dave Bailey (dbisu, @daveisu)
|
|
# Pico and Pico W board support
|
|
|
|
from board import *
|
|
import board
|
|
import digitalio
|
|
import storage
|
|
import os
|
|
|
|
def is_exfil_enabled(payload_path="payload.dd"):
|
|
try:
|
|
with open(payload_path, "r") as f:
|
|
for line in f:
|
|
if "$_EXFIL_MODE_ENABLED" in line and "TRUE" in line.upper():
|
|
return True
|
|
except OSError:
|
|
pass
|
|
return False
|
|
|
|
exfil_enabled = is_exfil_enabled()
|
|
loot_exists = "loot.bin" in os.listdir("/")
|
|
noStorage = False
|
|
noStoragePin = digitalio.DigitalInOut(GP15)
|
|
noStoragePin.switch_to_input(pull=digitalio.Pull.UP)
|
|
noStorageStatus = noStoragePin.value
|
|
|
|
# If GP15 is not connected, it will default to being pulled high (True)
|
|
# If GP is connected to GND, it will be low (False)
|
|
|
|
# Pico:
|
|
# GP15 not connected == USB visible
|
|
# GP15 connected to GND == USB not visible
|
|
|
|
# Pico W:
|
|
# GP15 not connected == USB NOT visible
|
|
# GP15 connected to GND == USB visible
|
|
if exfil_enabled:
|
|
if not loot_exists:
|
|
storage.disable_usb_drive()
|
|
if(board.board_id == 'raspberry_pi_pico' or board.board_id == 'raspberry_pi_pico2'):
|
|
# On Pi Pico, default to USB visible
|
|
noStorage = not noStorageStatus
|
|
elif(board.board_id == 'raspberry_pi_pico_w' or board.board_id == 'raspberry_pi_pico2_w'):
|
|
# on Pi Pico W, default to USB hidden by default
|
|
# so webapp can access storage
|
|
noStorage = noStorageStatus
|
|
|
|
if(noStorage == True):
|
|
# don't show USB drive to host PC
|
|
storage.disable_usb_drive()
|
|
print("Disabling USB drive")
|
|
else:
|
|
# normal boot
|
|
print("USB drive enabled")
|
|
|
|
|