diff --git a/applications/debug/subghz_test/scenes/subghz_test_scene_show_only_rx.c b/applications/debug/subghz_test/scenes/subghz_test_scene_show_only_rx.c index 3d5a54355..d8eade41d 100644 --- a/applications/debug/subghz_test/scenes/subghz_test_scene_show_only_rx.c +++ b/applications/debug/subghz_test/scenes/subghz_test_scene_show_only_rx.c @@ -12,7 +12,7 @@ void subghz_test_scene_show_only_rx_on_enter(void* context) { // Setup view Popup* popup = app->popup; - const char* header_text = "Transmission is blocked"; + const char* header_text = "Transmission is Blocked"; const char* message_text = "Transmission on\nthis frequency is\nrestricted in\nyour region"; if(!furi_hal_region_is_provisioned()) { header_text = "Firmware update needed"; diff --git a/applications/external b/applications/external index 011d43030..8fc8f9a6b 160000 --- a/applications/external +++ b/applications/external @@ -1 +1 @@ -Subproject commit 011d43030c8bb04aa70f575afd01ad26e31507ff +Subproject commit 8fc8f9a6bd75c533bb9d26da5154396b6b680ac5 diff --git a/applications/main/bad_kb/bad_kb_app.c b/applications/main/bad_kb/bad_kb_app.c index 883371c47..551eb24a2 100644 --- a/applications/main/bad_kb/bad_kb_app.c +++ b/applications/main/bad_kb/bad_kb_app.c @@ -345,9 +345,9 @@ BadKbApp* bad_kb_app_alloc(char* arg) { BadKbAppViewVarItemList, variable_item_list_get_view(app->var_item_list)); - app->bad_kb_view = bad_kb_alloc(); + app->bad_kb_view = bad_kb_view_alloc(); view_dispatcher_add_view( - app->view_dispatcher, BadKbAppViewWork, bad_kb_get_view(app->bad_kb_view)); + app->view_dispatcher, BadKbAppViewWork, bad_kb_view_get_view(app->bad_kb_view)); app->text_input = text_input_alloc(); view_dispatcher_add_view( @@ -389,7 +389,7 @@ void bad_kb_app_free(BadKbApp* app) { // Views view_dispatcher_remove_view(app->view_dispatcher, BadKbAppViewWork); - bad_kb_free(app->bad_kb_view); + bad_kb_view_free(app->bad_kb_view); // Custom Widget view_dispatcher_remove_view(app->view_dispatcher, BadKbAppViewWidget); diff --git a/applications/main/bad_kb/helpers/ducky_script_commands.c b/applications/main/bad_kb/helpers/ducky_script_commands.c index d52fda991..13681f8a4 100644 --- a/applications/main/bad_kb/helpers/ducky_script_commands.c +++ b/applications/main/bad_kb/helpers/ducky_script_commands.c @@ -173,6 +173,49 @@ static int32_t ducky_fnc_release(BadKbScript* bad_kb, const char* line, int32_t return 0; } +static int32_t ducky_fnc_media(BadKbScript* bad_kb, const char* line, int32_t param) { + UNUSED(param); + + line = &line[ducky_get_command_len(line) + 1]; + uint16_t key = ducky_get_media_keycode_by_name(line); + if(key == HID_CONSUMER_UNASSIGNED) { + return ducky_error(bad_kb, "No keycode defined for %s", line); + } + if(bad_kb->bt) { + ble_profile_hid_kb_press(bad_kb->app->ble_hid, key); + furi_delay_ms(bt_timeout); + ble_profile_hid_kb_release(bad_kb->app->ble_hid, key); + } else { + furi_hal_hid_kb_press(key); + furi_hal_hid_kb_release(key); + } + return 0; +} + +static int32_t ducky_fnc_globe(BadKbScript* bad_kb, const char* line, int32_t param) { + UNUSED(param); + + line = &line[ducky_get_command_len(line) + 1]; + uint16_t key = ducky_get_keycode(bad_kb, line, true); + if(key == HID_KEYBOARD_NONE) { + return ducky_error(bad_kb, "No keycode defined for %s", line); + } + + if(bad_kb->bt) { + ble_profile_hid_consumer_key_press(bad_kb->app->ble_hid, HID_CONSUMER_FN_GLOBE); + ble_profile_hid_kb_press(bad_kb->app->ble_hid, key); + furi_delay_ms(bt_timeout); + ble_profile_hid_kb_release(bad_kb->app->ble_hid, key); + ble_profile_hid_consumer_key_release(bad_kb->app->ble_hid, HID_CONSUMER_FN_GLOBE); + } else { + furi_hal_hid_consumer_key_press(HID_CONSUMER_FN_GLOBE); + furi_hal_hid_kb_press(key); + furi_hal_hid_kb_release(key); + furi_hal_hid_consumer_key_release(HID_CONSUMER_FN_GLOBE); + } + return 0; +} + static int32_t ducky_fnc_waitforbutton(BadKbScript* bad_kb, const char* line, int32_t param) { UNUSED(param); UNUSED(bad_kb); @@ -202,6 +245,8 @@ static const DuckyCmd ducky_commands[] = { {"HOLD", ducky_fnc_hold, -1}, {"RELEASE", ducky_fnc_release, -1}, {"WAIT_FOR_BUTTON_PRESS", ducky_fnc_waitforbutton, -1}, + {"MEDIA", ducky_fnc_media, -1}, + {"GLOBE", ducky_fnc_globe, -1}, }; #define TAG "BadKb" diff --git a/applications/main/bad_kb/helpers/ducky_script_i.h b/applications/main/bad_kb/helpers/ducky_script_i.h index ce0c526d4..1ed2aae3f 100644 --- a/applications/main/bad_kb/helpers/ducky_script_i.h +++ b/applications/main/bad_kb/helpers/ducky_script_i.h @@ -53,6 +53,8 @@ bool ducky_is_line_end(const char chr); uint16_t ducky_get_keycode_by_name(const char* param); +uint16_t ducky_get_media_keycode_by_name(const char* param); + bool ducky_get_number(const char* param, uint32_t* val); void ducky_numlock_on(BadKbScript* bad_kb); diff --git a/applications/main/bad_kb/helpers/ducky_script_keycodes.c b/applications/main/bad_kb/helpers/ducky_script_keycodes.c index 56b5144d4..290618c13 100644 --- a/applications/main/bad_kb/helpers/ducky_script_keycodes.c +++ b/applications/main/bad_kb/helpers/ducky_script_keycodes.c @@ -1,5 +1,4 @@ #include -#include #include "ducky_script_i.h" typedef struct { @@ -78,6 +77,37 @@ static const DuckyKey ducky_keys[] = { {"F24", HID_KEYBOARD_F24}, }; +static const DuckyKey ducky_media_keys[] = { + {"POWER", HID_CONSUMER_POWER}, + {"REBOOT", HID_CONSUMER_RESET}, + {"SLEEP", HID_CONSUMER_SLEEP}, + {"LOGOFF", HID_CONSUMER_AL_LOGOFF}, + + {"EXIT", HID_CONSUMER_AC_EXIT}, + {"HOME", HID_CONSUMER_AC_HOME}, + {"BACK", HID_CONSUMER_AC_BACK}, + {"FORWARD", HID_CONSUMER_AC_FORWARD}, + {"REFRESH", HID_CONSUMER_AC_REFRESH}, + + {"SNAPSHOT", HID_CONSUMER_SNAPSHOT}, + + {"PLAY", HID_CONSUMER_PLAY}, + {"PAUSE", HID_CONSUMER_PAUSE}, + {"PLAY_PAUSE", HID_CONSUMER_PLAY_PAUSE}, + {"NEXT_TRACK", HID_CONSUMER_SCAN_NEXT_TRACK}, + {"PREV_TRACK", HID_CONSUMER_SCAN_PREVIOUS_TRACK}, + {"STOP", HID_CONSUMER_STOP}, + {"EJECT", HID_CONSUMER_EJECT}, + + {"MUTE", HID_CONSUMER_MUTE}, + {"VOLUME_UP", HID_CONSUMER_VOLUME_INCREMENT}, + {"VOLUME_DOWN", HID_CONSUMER_VOLUME_DECREMENT}, + + {"FN", HID_CONSUMER_FN_GLOBE}, + {"BRIGHT_UP", HID_CONSUMER_BRIGHTNESS_INCREMENT}, + {"BRIGHT_DOWN", HID_CONSUMER_BRIGHTNESS_DECREMENT}, +}; + uint16_t ducky_get_keycode_by_name(const char* param) { for(size_t i = 0; i < COUNT_OF(ducky_keys); i++) { size_t key_cmd_len = strlen(ducky_keys[i].name); @@ -89,3 +119,15 @@ uint16_t ducky_get_keycode_by_name(const char* param) { return HID_KEYBOARD_NONE; } + +uint16_t ducky_get_media_keycode_by_name(const char* param) { + for(size_t i = 0; i < COUNT_OF(ducky_media_keys); i++) { + size_t key_cmd_len = strlen(ducky_media_keys[i].name); + if((strncmp(param, ducky_media_keys[i].name, key_cmd_len) == 0) && + (ducky_is_line_end(param[key_cmd_len]))) { + return ducky_media_keys[i].keycode; + } + } + + return HID_CONSUMER_UNASSIGNED; +} diff --git a/applications/main/bad_kb/resources/badusb/demo_chromeos.txt b/applications/main/bad_kb/resources/badusb/demo_chromeos.txt new file mode 100644 index 000000000..c5f675fb3 --- /dev/null +++ b/applications/main/bad_kb/resources/badusb/demo_chromeos.txt @@ -0,0 +1,80 @@ +REM This is BadUSB demo script for ChromeOS by kowalski7cc + +REM Open a new tab +CTRL t +REM wait for some slower chromebooks +DELAY 1000 +REM Open an empty editable page +DEFAULT_DELAY 50 +STRING data:text/html,