Hablando por chat con @guti_478 sobre el código de Rubber Ducky, se me ha ocurrido que se podría crear una web/programa donde
tú teclees lo que quieras, y esta te traduzca cada tecla o combinación de teclas que has presionado a código Ducky Script.
Cosa que me parece muy simple a nivel técnico. Por ejemplo, un simple script de Python con Pynput o alguna librería para leer pulsaciones del teclado,
con varias condiciones, por ejemplo, si tras la última acción, la primera tecla que presionas es una letra, añadir STRING al principio de la línea.
Hola que tal --> STRING Hola que tal
Luego, para saber cuando termina una STRING, se haría con el ENTER, añadiendo un salto de línea a nivel de código y luego escribiendo ENTER y otro salto de línea para la siguiente acción.
Al detectar CTRL, ALT o SHIFT, esperar para añadir la siguiente letra que salga, si tras una de esas teclas, sale otro CTRL, ALT o SHIFT, pues lo mismo, y entonces pillar la primera letra que salga después.
Y el tiempo a añadir entre cada acción se puede añadir por defecto al principio del script, o contar el tiempo que pasa entre cada acción en el propio script, pero eso no sería realista, creo, ya que estos tiempos suelen ser milesimas, y para ciertas acciones unos pocos segundos.
Luego a nivel interfaz, estaría bien mostrar en tiempo real lo que va traduciendo el script, y tu tener la posibilidad de borrar con la tecla DELETE la acción entera o letra por letra.
Si a alguien le gusta la idea, sabe de Python mínimamente y me quiere echar una mano pues nos sacamos un repo de Github guapo con la tontería. Interprete en tiempo real de Ducky Script.
EDIT:
De momento pilla bastantes cosas, falta mucho por mejorar, si alguien quiere mejorarlo adelante.
tú teclees lo que quieras, y esta te traduzca cada tecla o combinación de teclas que has presionado a código Ducky Script.
Cosa que me parece muy simple a nivel técnico. Por ejemplo, un simple script de Python con Pynput o alguna librería para leer pulsaciones del teclado,
con varias condiciones, por ejemplo, si tras la última acción, la primera tecla que presionas es una letra, añadir STRING al principio de la línea.
Hola que tal --> STRING Hola que tal
Luego, para saber cuando termina una STRING, se haría con el ENTER, añadiendo un salto de línea a nivel de código y luego escribiendo ENTER y otro salto de línea para la siguiente acción.
Al detectar CTRL, ALT o SHIFT, esperar para añadir la siguiente letra que salga, si tras una de esas teclas, sale otro CTRL, ALT o SHIFT, pues lo mismo, y entonces pillar la primera letra que salga después.
Y el tiempo a añadir entre cada acción se puede añadir por defecto al principio del script, o contar el tiempo que pasa entre cada acción en el propio script, pero eso no sería realista, creo, ya que estos tiempos suelen ser milesimas, y para ciertas acciones unos pocos segundos.
Luego a nivel interfaz, estaría bien mostrar en tiempo real lo que va traduciendo el script, y tu tener la posibilidad de borrar con la tecla DELETE la acción entera o letra por letra.
Si a alguien le gusta la idea, sabe de Python mínimamente y me quiere echar una mano pues nos sacamos un repo de Github guapo con la tontería. Interprete en tiempo real de Ducky Script.
EDIT:
De momento pilla bastantes cosas, falta mucho por mejorar, si alguien quiere mejorarlo adelante.
Código:
from pynput import keyboard
# Configuración inicial
ducky_script = []
current_line = ""
modifiers = {"ctrl": "CTRL", "alt": "ALT", "shift": "SHIFT", "cmd": "GUI", "win": "GUI", "tab": "TAB"}
active_modifiers = []
string_active = False
def on_press(key):
global current_line, string_active, active_modifiers
try:
key_name = key.name if hasattr(key, 'name') else ''
if key_name in modifiers:
mod_key = modifiers[key_name]
if mod_key not in active_modifiers:
active_modifiers.append(mod_key)
elif hasattr(key, 'char') and key.char:
char = key.char
if active_modifiers:
# Si hay un STRING en construcción, no interrumpirlo
if string_active:
current_line += f"{char}"
else:
ducky_script.append(f"{' '.join(active_modifiers)} {char.upper()}")
print(f"{' '.join(active_modifiers)} {char.upper()}")
active_modifiers.clear() # Reset modifiers after usage
else:
if not string_active:
string_active = True
current_line += char
elif key == keyboard.Key.space:
current_line += " "
elif key == keyboard.Key.enter:
if current_line:
ducky_script.append(f"STRING {current_line}")
print(f"STRING {current_line}")
ducky_script.append("ENTER")
print("ENTER")
current_line = ""
string_active = False
elif key == keyboard.Key.tab:
if string_active:
current_line += "\t"
else:
ducky_script.append("TAB")
print("TAB")
except Exception as e:
print(f"Error: {e}")
def on_release(key):
key_name = key.name if hasattr(key, 'name') else ''
if key_name in modifiers:
mod_key = modifiers[key_name]
if mod_key in active_modifiers:
active_modifiers.remove(mod_key)
if key == keyboard.Key.esc:
return False
# Listener del teclado
with keyboard.Listener(on_press=on_press, on_release=on_release) as listener:
listener.join()
# Guardar el script al salir
with open("output.ducky", "w") as f:
f.write("\n".join(ducky_script))
Última edición: