Newer
Older
glitch-o-bolt / ConfigGlitchBrute.py
######
# LEAVE THESE IMPORTS!
######
import functions
import random
from textual.widgets import Log

######
# config values
######

SERIAL_PORT = '/dev/ttyUSB0'
BAUD_RATE = 115200

LENGTH = 1
REPEAT = 1
DELAY = 1

###
# ^ = pullup, v = pulldown
###
triggers = [
    ['-', False],  #0
    ['-', False],  #1
    ['-', False],  #2
    ['-', False],  #3
    ['-', False],  #4
    ['-', False],  #5
    ['-', False],  #6
    ['-', False],  #7
]

###
# name, enabled, string to match in output, function to run
# if string is blank ("") doesnt show toggle, just run button
###
conditions = [
    ["Flag", True,  "ctf", "stop_glitching"],
    ["pt1", True, "Hold one of", "start_chal_02"], # requires bolt output gpio pin 0 -> challenge board chall 2 button
    ["pt2", True, "Starting challenge 2", "glitched_too_far"],
    ["std", True, "1000000", "perform_glitch"]
]

######
# Custom functions for conditions to trigger
######

def stop_glitching():
	elapsed = functions.get_glitch_elapsed()
	functions.glitching_switch(False)
	functions.add_text(f"[auto] glitching stopped (elapsed: {elapsed})")    

def start_chal_02():
    functions.run_output_high(0, 30000000) ## can also run_output_low() if need too
    #functions.execute_condition_action("glitched_too_far")

increment_delay = True
increment_length = True
inc_delay_amount = 100
inc_repeat_amount = 100
inc_length_amount = 100  

def perform_glitch():
    global increment_delay, increment_length
    global inc_delay_aamount, inc_repeat_amount, inc_length_amount
    
    
    if increment_delay:
        to_increment = "delay"
        increment_amount = inc_delay_amount
        increment_delay = False
    else:
        if increment_length:
            to_increment = "length"
            increment_amount = inc_length_amount
            increment_length = False
            increment_delay = True
        else:
            to_increment = "repeat"
            increment_amount = inc_repeat_amount
            increment_length = True
            increment_delay = True
    
    current_val = functions.get_config_value(to_increment)
    new_val = current_val + increment_amount
    functions.set_config_value(to_increment, new_val)

    functions.add_text(f"[auto] incrementing: {to_increment}")
    
    Len = functions.get_config_value("length")
    Rep = functions.get_config_value("repeat")
    Del = functions.get_config_value("delay")
    functions.start_glitch(Len, Rep, Del)
    
def glitched_too_far():
    global increment_delay, increment_length
    global inc_delay_amount, inc_repeat_amount, inc_length_amount
    
    # Determine which value to decrement based on current state
    if increment_delay:
        if increment_length:
            to_decrement = "repeat"
            current_inc_amount = inc_repeat_amount
        else:
            to_decrement = "length"
            current_inc_amount = inc_length_amount
    else:
        to_decrement = "delay"
        current_inc_amount = inc_delay_amount
    
    # Get current value and decrement it
    current_val = functions.get_config_value(to_decrement)
    new_val = current_val - current_inc_amount 
    functions.set_config_value(to_decrement, new_val)
    
    # Update the increment amount for next time
    if current_inc_amount == 100:
        new_inc_amount = 10
    elif current_inc_amount == 10:
        new_inc_amount = 1
    else:
        new_inc_amount = current_inc_amount  # keep as is if not 100 or 10
    
    # Update the correct increment amount variable
    if to_decrement == "delay":
        inc_delay_amount = new_inc_amount
    elif to_decrement == "length":
        inc_length_amount = new_inc_amount
    elif to_decrement == "repeat":
        inc_repeat_amount = new_inc_amount

    functions.add_text(f"[auto] decrementing: {to_decrement}")