removed broken ru language
This commit is contained in:
parent
84e26d7f6c
commit
97131cb577
10 changed files with 174 additions and 23 deletions
2
Makefile
2
Makefile
|
|
@ -1,5 +1,5 @@
|
||||||
CC=go
|
CC=go
|
||||||
BUILD=build -v
|
BUILD=build -v -trimpath
|
||||||
GCFLAGS=-gcflags '-e'
|
GCFLAGS=-gcflags '-e'
|
||||||
LDFLAGS=-ldflags '-s -w'
|
LDFLAGS=-ldflags '-s -w'
|
||||||
PROGRAM=duckycode
|
PROGRAM=duckycode
|
||||||
|
|
|
||||||
10
README.md
10
README.md
|
|
@ -1,3 +1,13 @@
|
||||||
# Rubber-Ducky Encoder written in Go
|
# Rubber-Ducky Encoder written in Go
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
Encode an example:
|
||||||
|
|
||||||
|
```
|
||||||
|
./duckycode -f examples/linux.txt -l de
|
||||||
|
```
|
||||||
|
|
||||||
|
Now copy the file `inject.bin` to your microSD card.
|
||||||
|
|
||||||
|
Happy Hacking.
|
||||||
|
|
|
||||||
2
go.mod
2
go.mod
|
|
@ -1 +1,3 @@
|
||||||
module git.giftfish.de/ston1th/duckycode
|
module git.giftfish.de/ston1th/duckycode
|
||||||
|
|
||||||
|
go 1.15
|
||||||
|
|
|
||||||
113
language/ru.properties.ascii
Normal file
113
language/ru.properties.ascii
Normal file
|
|
@ -0,0 +1,113 @@
|
||||||
|
//Russian Key Map
|
||||||
|
//http://www.charset.org/charactersets.php?charset=iso-8859-5
|
||||||
|
// Needs work likely to contain errors
|
||||||
|
//
|
||||||
|
//Example mapping the Portugeuse charset
|
||||||
|
//ISO_8859_1_E7 = KEY_SEMICOLON
|
||||||
|
|
||||||
|
// 32
|
||||||
|
ASCII_20 = KEY_SPACE
|
||||||
|
|
||||||
|
//numbers
|
||||||
|
//?1234567890-?
|
||||||
|
//?!"GBP$%<<>>*()_?
|
||||||
|
ISO_8859_5_F1 = KEY_TILDE
|
||||||
|
ISO_8859_5_A1 = KEY_TILDE, MODIFIERKEY_SHIFT
|
||||||
|
ISO_8859_5_31 = KEY_1
|
||||||
|
ISO_8859_5_21 = KEY_1, MODIFIERKEY_SHIFT
|
||||||
|
ISO_8859_5_32 = KEY_2
|
||||||
|
ISO_8859_5_22 = KEY_2, MODIFIERKEY_SHIFT
|
||||||
|
ISO_8859_5_33 = KEY_3
|
||||||
|
ISO_8859_5_23 = KEY_3, MODIFIERKEY_SHIFT
|
||||||
|
ISO_8859_5_34 = KEY_4
|
||||||
|
ISO_8859_5_24 = KEY_4, MODIFIERKEY_SHIFT
|
||||||
|
ISO_8859_5_35 = KEY_5
|
||||||
|
ISO_8859_5_25 = KEY_5, MODIFIERKEY_SHIFT
|
||||||
|
ISO_8859_5_36 = KEY_6
|
||||||
|
ISO_8859_5_26 = KEY_6, MODIFIERKEY_SHIFT
|
||||||
|
ISO_8859_5_37 = KEY_7
|
||||||
|
ISO_8859_5_27 = KEY_7, MODIFIERKEY_SHIFT
|
||||||
|
ISO_8859_5_38 = KEY_8
|
||||||
|
ISO_8859_5_2A = KEY_8, MODIFIERKEY_SHIFT
|
||||||
|
ISO_8859_5_39 = KEY_9
|
||||||
|
ISO_8859_5_28 = KEY_9, MODIFIERKEY_SHIFT
|
||||||
|
ISO_8859_5_30 = KEY_0
|
||||||
|
ISO_8859_5_29 = KEY_0, MODIFIERKEY_SHIFT
|
||||||
|
ISO_8859_5_2D = KEY_MINUS
|
||||||
|
ISO_8859_5_5F = KEY_MINUS, MODIFIERKEY_SHIFT
|
||||||
|
ISO_8859_5_CA = KEY_EQUALS
|
||||||
|
ISO_8859_5_EA = KEY_EQUALS, MODIFIERKEY_SHIFT
|
||||||
|
|
||||||
|
//letters - 1st row
|
||||||
|
//????????????
|
||||||
|
//????????????
|
||||||
|
ISO_8859_5_CF = KEY_Q, MODIFIERKEY_SHIFT
|
||||||
|
ISO_8859_5_EF = KEY_Q
|
||||||
|
ISO_8859_5_C8 = KEY_W, MODIFIERKEY_SHIFT
|
||||||
|
ISO_8859_5_E8 = KEY_W
|
||||||
|
ISO_8859_5_B5 = KEY_E, MODIFIERKEY_SHIFT
|
||||||
|
ISO_8859_5_D5 = KEY_E
|
||||||
|
ISO_8859_5_C0 = KEY_R, MODIFIERKEY_SHIFT
|
||||||
|
ISO_8859_5_E0 = KEY_R
|
||||||
|
ISO_8859_5_C2 = KEY_Y, MODIFIERKEY_SHIFT
|
||||||
|
ISO_8859_5_E2 = KEY_Y
|
||||||
|
ISO_8859_5_CB = KEY_U, MODIFIERKEY_SHIFT
|
||||||
|
ISO_8859_5_EB = KEY_U
|
||||||
|
ISO_8859_5_C3 = KEY_I, MODIFIERKEY_SHIFT
|
||||||
|
ISO_8859_5_E3 = KEY_I
|
||||||
|
ISO_8859_5_B8 = KEY_O, MODIFIERKEY_SHIFT
|
||||||
|
ISO_8859_5_D8 = KEY_O
|
||||||
|
ISO_8859_5_BE = KEY_P, MODIFIERKEY_SHIFT
|
||||||
|
ISO_8859_5_DE = KEY_P
|
||||||
|
ISO_8859_5_CE = KEY_LEFT_BRACE, MODIFIERKEY_SHIFT
|
||||||
|
ISO_8859_5_EE = KEY_LEFT_BRACE
|
||||||
|
ISO_8859_5_C9 = KEY_RIGHT_BRACE, MODIFIERKEY_SHIFT
|
||||||
|
ISO_8859_5_E9 = KEY_RIGHT_BRACE
|
||||||
|
|
||||||
|
//2nd row
|
||||||
|
//???????????No
|
||||||
|
//???????????~
|
||||||
|
ISO_8859_5_B0 = KEY_A, MODIFIERKEY_SHIFT
|
||||||
|
ISO_8859_5_D0 = KEY_A
|
||||||
|
ISO_8859_5_C1 = KEY_S, MODIFIERKEY_SHIFT
|
||||||
|
ISO_8859_5_E1 = KEY_S
|
||||||
|
ISO_8859_5_B4 = KEY_D, MODIFIERKEY_SHIFT
|
||||||
|
ISO_8859_5_D4 = KEY_D
|
||||||
|
ISO_8859_5_B3 = KEY_G, MODIFIERKEY_SHIFT
|
||||||
|
ISO_8859_5_D3 = KEY_G
|
||||||
|
ISO_8859_5_B9 = KEY_J, MODIFIERKEY_SHIFT
|
||||||
|
ISO_8859_5_D9 = KEY_J
|
||||||
|
ISO_8859_5_BA = KEY_K, MODIFIERKEY_SHIFT
|
||||||
|
ISO_8859_5_DA = KEY_K
|
||||||
|
ISO_8859_5_BB = KEY_L, MODIFIERKEY_SHIFT
|
||||||
|
ISO_8859_5_DB = KEY_L
|
||||||
|
ISO_8859_5_CC = KEY_COLON, MODIFIERKEY_SHIFT
|
||||||
|
ISO_8859_5_EC = KEY_COLON
|
||||||
|
ISO_8859_5_B6 = KEY_QUOTE, MODIFIERKEY_SHIFT
|
||||||
|
ISO_8859_5_D6 = KEY_QUOTE
|
||||||
|
ISO_8859_5_F0 = KEY_BACKSLASH, MODIFIERKEY_SHIFT
|
||||||
|
ISO_8859_5_7E = KEY_BACKSLASH
|
||||||
|
|
||||||
|
//3rd row
|
||||||
|
//???????,./
|
||||||
|
//???????;:?
|
||||||
|
ISO_8859_5_B7 = KEY_Z, MODIFIERKEY_SHIFT
|
||||||
|
ISO_8859_5_D7 = KEY_Z
|
||||||
|
ISO_8859_5_C5 = KEY_X, MODIFIERKEY_SHIFT
|
||||||
|
ISO_8859_5_E5 = KEY_X
|
||||||
|
ISO_8859_5_C6 = KEY_C, MODIFIERKEY_SHIFT
|
||||||
|
ISO_8859_5_E6 = KEY_C
|
||||||
|
ISO_8859_5_B2 = KEY_V, MODIFIERKEY_SHIFT
|
||||||
|
ISO_8859_5_D2 = KEY_V
|
||||||
|
ISO_8859_5_B1 = KEY_B, MODIFIERKEY_SHIFT
|
||||||
|
ISO_8859_5_D1 = KEY_B
|
||||||
|
ISO_8859_5_BD = KEY_N, MODIFIERKEY_SHIFT
|
||||||
|
ISO_8859_5_DD = KEY_N
|
||||||
|
ISO_8859_5_BC = KEY_M, MODIFIERKEY_SHIFT
|
||||||
|
ISO_8859_5_DC = KEY_M
|
||||||
|
ISO_8859_5_2C = KEY_COMMA, MODIFIERKEY_SHIFT
|
||||||
|
ISO_8859_5_3B = KEY_COMMA
|
||||||
|
ISO_8859_5_2E = KEY_PERIOD, MODIFIERKEY_SHIFT
|
||||||
|
ISO_8859_5_3A = KEY_PERIOD
|
||||||
|
ISO_8859_5_2F = KEY_SLASH, MODIFIERKEY_SHIFT
|
||||||
|
ISO_8859_5_3F = KEY_SLASH
|
||||||
7
main.go
7
main.go
|
|
@ -25,7 +25,7 @@ func fatal(v interface{}) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
flag.StringVar(&language, "l", "de", "language (available: be, br, ca, ch, de, dk, es, fi, fr, gb, hr, it, no, pt, ru, si, sv, tr, us)")
|
flag.StringVar(&language, "l", "de", "language (available: be, br, ca, ch, de, dk, es, fi, fr, gb, hr, it, no, pt, si, sv, tr, us)")
|
||||||
flag.StringVar(&inFile, "f", "", "input file")
|
flag.StringVar(&inFile, "f", "", "input file")
|
||||||
flag.StringVar(&outFile, "o", "inject.bin", "output file (use - for stdout)")
|
flag.StringVar(&outFile, "o", "inject.bin", "output file (use - for stdout)")
|
||||||
flag.Parse()
|
flag.Parse()
|
||||||
|
|
@ -45,7 +45,10 @@ func main() {
|
||||||
fatal(err)
|
fatal(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
e := encoder.NewEncoder(out, "de")
|
e, err := encoder.NewEncoder(out, language)
|
||||||
|
if err != nil {
|
||||||
|
fatal(err)
|
||||||
|
}
|
||||||
err = e.Encode(in)
|
err = e.Encode(in)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fatal(err)
|
fatal(err)
|
||||||
|
|
|
||||||
|
|
@ -21,11 +21,9 @@ type Encoder struct {
|
||||||
repeat bool
|
repeat bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewEncoder(w io.Writer, language string) *Encoder {
|
func NewEncoder(w io.Writer, language string) (*Encoder, error) {
|
||||||
if language == "" {
|
err := lang.Exists(language)
|
||||||
language = "de"
|
return &Encoder{w, language, 0, false, 0, false}, err
|
||||||
}
|
|
||||||
return &Encoder{w, language, 0, false, 0, false}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (e *Encoder) Encode(r io.Reader) (err error) {
|
func (e *Encoder) Encode(r io.Reader) (err error) {
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,11 @@ REM Hello World
|
||||||
`)
|
`)
|
||||||
out = new(bytes.Buffer)
|
out = new(bytes.Buffer)
|
||||||
)
|
)
|
||||||
err := NewEncoder(out, "de").Encode(in)
|
e, err := NewEncoder(out, "de")
|
||||||
|
if err != nil {
|
||||||
|
t.Error(err)
|
||||||
|
}
|
||||||
|
err = e.Encode(in)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Error(err)
|
t.Error(err)
|
||||||
}
|
}
|
||||||
|
|
@ -34,7 +38,11 @@ STRING Hello World
|
||||||
0x12, 0x0, 0x2c, 0x0, 0x1a, 0x2, 0x12, 0x0,
|
0x12, 0x0, 0x2c, 0x0, 0x1a, 0x2, 0x12, 0x0,
|
||||||
0x15, 0x0, 0xf, 0x0, 0x7, 0x0}
|
0x15, 0x0, 0xf, 0x0, 0x7, 0x0}
|
||||||
)
|
)
|
||||||
err := NewEncoder(out, "de").Encode(in)
|
e, err := NewEncoder(out, "de")
|
||||||
|
if err != nil {
|
||||||
|
t.Error(err)
|
||||||
|
}
|
||||||
|
err = e.Encode(in)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Error(err)
|
t.Error(err)
|
||||||
}
|
}
|
||||||
|
|
@ -68,7 +76,11 @@ STRING Hello World
|
||||||
0xf, 0x0, 0x12, 0x0, 0x2c, 0x0, 0x1a, 0x2,
|
0xf, 0x0, 0x12, 0x0, 0x2c, 0x0, 0x1a, 0x2,
|
||||||
0x12, 0x0, 0x15, 0x0, 0xf, 0x0, 0x7, 0x0}
|
0x12, 0x0, 0x15, 0x0, 0xf, 0x0, 0x7, 0x0}
|
||||||
)
|
)
|
||||||
err := NewEncoder(out, "de").Encode(in)
|
e, err := NewEncoder(out, "de")
|
||||||
|
if err != nil {
|
||||||
|
t.Error(err)
|
||||||
|
}
|
||||||
|
err = e.Encode(in)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Error(err)
|
t.Error(err)
|
||||||
}
|
}
|
||||||
|
|
@ -77,6 +89,18 @@ STRING Hello World
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestError(t *testing.T) {
|
||||||
|
out := new(bytes.Buffer)
|
||||||
|
_, err := NewEncoder(out, "")
|
||||||
|
if err == nil {
|
||||||
|
t.Error("language '' should not be supported")
|
||||||
|
}
|
||||||
|
_, err = NewEncoder(out, "fizzbuzz")
|
||||||
|
if err == nil {
|
||||||
|
t.Error("language 'fizzbuzz' should not be supported")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func BenchmarkExample(b *testing.B) {
|
func BenchmarkExample(b *testing.B) {
|
||||||
var in = bytes.NewBufferString(`
|
var in = bytes.NewBufferString(`
|
||||||
REM Type Hello World into Windows notepad. Target: Windows 95 and beyond. Author: Darren
|
REM Type Hello World into Windows notepad. Target: Windows 95 and beyond. Author: Darren
|
||||||
|
|
@ -88,7 +112,10 @@ ENTER
|
||||||
DELAY 1000
|
DELAY 1000
|
||||||
STRING Hello World
|
STRING Hello World
|
||||||
`)
|
`)
|
||||||
e := NewEncoder(ioutil.Discard, "de")
|
e, err := NewEncoder(ioutil.Discard, "de")
|
||||||
|
if err != nil {
|
||||||
|
b.Error(err)
|
||||||
|
}
|
||||||
b.ReportAllocs()
|
b.ReportAllocs()
|
||||||
for i := 0; i < b.N; i++ {
|
for i := 0; i < b.N; i++ {
|
||||||
e.Encode(in)
|
e.Encode(in)
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,8 @@
|
||||||
|
|
||||||
package lang
|
package lang
|
||||||
|
|
||||||
|
import "errors"
|
||||||
|
|
||||||
var L = make(map[string]Lang)
|
var L = make(map[string]Lang)
|
||||||
|
|
||||||
type Lang map[string]Key
|
type Lang map[string]Key
|
||||||
|
|
@ -10,3 +12,10 @@ type Key struct {
|
||||||
Key byte
|
Key byte
|
||||||
Mod byte
|
Mod byte
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func Exists(l string) error {
|
||||||
|
if _, ok := L[l]; !ok {
|
||||||
|
return errors.New("language '" + l + "' is not supported")
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,11 +0,0 @@
|
||||||
package lang
|
|
||||||
|
|
||||||
import "git.giftfish.de/ston1th/duckycode/pkg/keys"
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
L["ru"] = ru
|
|
||||||
}
|
|
||||||
|
|
||||||
var ru = Lang{
|
|
||||||
"Binary": Key{keys.K["file"], keys.K["language/ru.properties"]},
|
|
||||||
}
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue