From f1282e74115945cb73fb3ab25e7c930ac87a7e7b Mon Sep 17 00:00:00 2001 From: Shiniyoukai Date: Fri, 15 Sep 2017 10:32:50 +0200 Subject: [PATCH 1/4] Add support for alt+number combinations Made extension to duckyscript (altwingducky) Supports ALT+XXX number combinations for ASCII inputs Ex. duckyscript: CHAR 1 CHAR 2 CHAR 3 CTRL Output: { NB. The CTRL command must be added at the end of a key sequence to make the logic send a release ALT key event --- jackit/duckyparser.py | 45 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) diff --git a/jackit/duckyparser.py b/jackit/duckyparser.py index b8e54be..75de3f4 100644 --- a/jackit/duckyparser.py +++ b/jackit/duckyparser.py @@ -13,6 +13,7 @@ class DuckyParser(object): 'CTRL': [0, 1], 'GUI': [0, 8], 'SCROLLLOCK': [71, 0], + 'NUMLOCK': [83, 0], 'ENTER': [40, 0], 'F12': [69, 0], 'HOME': [74, 0], @@ -46,7 +47,17 @@ class DuckyParser(object): 'F11': [68, 0], 'F7': [64, 0], 'UP': [82, 0], - 'LEFT': [80, 0] + 'LEFT': [80, 0], + 'CHAR 1': [89, 4], + 'CHAR 2': [90, 4], + 'CHAR 3': [91, 4], + 'CHAR 4': [92, 4], + 'CHAR 5': [93, 4], + 'CHAR 6': [94, 4], + 'CHAR 7': [95, 4], + 'CHAR 8': [96, 4], + 'CHAR 9': [97, 4], + 'CHAR 0': [98, 4], } blank_entry = { @@ -162,6 +173,38 @@ def parse(self): entry['hid'], entry['mod'] = self.char_to_hid('ENTER') entries.append(entry) + elif line.startswith("TAB"): + entry = self.blank_entry.copy() + entry['char'] = "\n" + entry['hid'], entry['mod'] = self.char_to_hid('TAB') + entries.append(entry) + + elif line.startswith("DELETE"): + entry = self.blank_entry.copy() + entry['char'] = "\n" + entry['hid'], entry['mod'] = self.char_to_hid('DELETE') + entries.append(entry) + + elif line.startswith("SPACE"): + entry = self.blank_entry.copy() + entry['char'] = "\n" + entry['hid'], entry['mod'] = self.char_to_hid('SPACE') + entries.append(entry) + + elif line.startswith("NUMLOCK"): + entry = self.blank_entry.copy() + entry['char'] = "\n" + entry['hid'], entry['mod'] = self.char_to_hid('NUMLOCK') + entries.append(entry) + + elif line.startswith("CHAR"): + entry = self.blank_entry.copy() + num = line.split(" ", 1) + num = "CHAR " + num[1] + entry['char'] = num + entry['hid'], entry['mod'] = self.char_to_hid(num) + entries.append(entry) + # arrow keys elif line.startswith("UP") or line.startswith("UPARROW"): entry = self.blank_entry.copy() From 5f1f7680da5d76552652af76ef0d580f68e66e66 Mon Sep 17 00:00:00 2001 From: Shiniyoukai Date: Fri, 15 Sep 2017 10:52:33 +0200 Subject: [PATCH 2/4] Update amazon.py --- jackit/plugins/amazon.py | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/jackit/plugins/amazon.py b/jackit/plugins/amazon.py index 947d222..cd45f0c 100644 --- a/jackit/plugins/amazon.py +++ b/jackit/plugins/amazon.py @@ -21,19 +21,37 @@ def frame(self, key={'hid': 0, 'mod': 0}): def build_frames(self, attack): for i in range(0, len(attack)): key = attack[i] - key['frames'] = [] if i == 0: - for _ in range(5): - key['frames'].append([self.frame(), 5]) + key['frames'] = [[self.hello[:], 12]] + else: + key['frames'] = [] + if i < len(attack) - 1: + next_key = attack[i + 1] + else: + next_key = None + next_key_mod = 0 if key['hid'] or key['mod']: - key['frames'].append([self.frame(key), 5]) - key['frames'].append([self.frame(), 5]) + key['frames'].append([self.frame(key), 12]) + key['frames'].append([self.keepalive[:], 0]) + if next_key and key['mod'] == next_key['mod']: + next_key_mod = key['mod'] + + if not next_key: + key['frames'].append([self.frame(), 0]) + + elif key['hid'] == next_key['hid']: + dummykey = {'hid':0, 'mod': next_key_mod} + key['frames'].append([self.frame(dummykey), 0]) + + elif next_key['sleep']: + key['frames'].append([self.frame(), 0]) + elif key['sleep']: count = int(key['sleep']) / 10 for i in range(0, int(count)): - key['frames'].append([self.frame(), 10]) + key['frames'].append([self.keepalive[:], 10]) @classmethod def fingerprint(cls, p): From 2791392b732a17442c91b0a046a59f058bf17cef Mon Sep 17 00:00:00 2001 From: Shiniyoukai Date: Fri, 15 Sep 2017 10:52:57 +0200 Subject: [PATCH 3/4] Update logitech.py --- jackit/plugins/logitech.py | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/jackit/plugins/logitech.py b/jackit/plugins/logitech.py index 5fea550..08f39b1 100644 --- a/jackit/plugins/logitech.py +++ b/jackit/plugins/logitech.py @@ -47,12 +47,23 @@ def build_frames(self, attack): next_key = attack[i + 1] else: next_key = None - + next_key_mod = 0 if key['hid'] or key['mod']: key['frames'].append([self.frame(key), 12]) key['frames'].append([self.keepalive[:], 0]) - if not next_key or key['hid'] == next_key['hid'] or next_key['sleep']: + if next_key and key['mod'] == next_key['mod']: + next_key_mod = key['mod'] + + if not next_key: key['frames'].append([self.frame(), 0]) + + elif key['hid'] == next_key['hid']: + dummykey = {'hid':0, 'mod': next_key_mod} + key['frames'].append([self.frame(dummykey), 0]) + + elif next_key['sleep']: + key['frames'].append([self.frame(), 0]) + elif key['sleep']: count = int(key['sleep']) / 10 for i in range(0, int(count)): From d611201a14728780e76a66d772b80bc3f33096f1 Mon Sep 17 00:00:00 2001 From: Shiniyoukai Date: Fri, 15 Sep 2017 10:53:17 +0200 Subject: [PATCH 4/4] Update microsoft.py --- jackit/plugins/microsoft.py | 36 ++++++++++++++++++++++++++---------- 1 file changed, 26 insertions(+), 10 deletions(-) diff --git a/jackit/plugins/microsoft.py b/jackit/plugins/microsoft.py index 263b0e3..ce1d88b 100644 --- a/jackit/plugins/microsoft.py +++ b/jackit/plugins/microsoft.py @@ -38,24 +38,40 @@ def frame(self, key={'hid': 0, 'mod': 0}): def build_frames(self, attack): for i in range(0, len(attack)): key = attack[i] - key['frames'] = [] + + if i == 0: + key['frames'] = [[self.hello[:], 12]] + else: + key['frames'] = [] + if i < len(attack) - 1: - next_key = attack[i + 1] + next_key = attack[i + 1] else: next_key = None - - while self.sequence_num < 10: - key['frames'].append([self.frame(), 0]) - + next_key_mod = 0 + if key['hid'] or key['mod']: - key['frames'].append([self.frame(key), 5]) - if not next_key or key['hid'] == next_key['hid'] or next_key['sleep']: + key['frames'].append([self.frame(key), 12]) + key['frames'].append([self.keepalive[:], 0]) + + if next_key and key['mod'] == next_key['mod']: + next_key_mod = key['mod'] + + if not next_key: key['frames'].append([self.frame(), 0]) + elif key['hid'] == next_key['hid']: + dummykey = {'hid':0, 'mod': next_key_mod} + key['frames'].append([self.frame(dummykey), 0]) + + elif next_key['sleep']: + key['frames'].append([self.frame(), 0]) + elif key['sleep']: - count = int(key['sleep']) / 10 + count = int(key['sleep']) / 10 for i in range(0, int(count)): - key['frames'].append([self.frame(), 0]) + key['frames'].append([self.keepalive[:], 10]) + @classmethod def fingerprint(cls, p):