1
0
Fork 0

removed broken ru language

This commit is contained in:
ston1th 2021-01-14 09:19:40 +01:00
commit 97131cb577
10 changed files with 174 additions and 23 deletions

View file

@ -1,5 +1,5 @@
CC=go
BUILD=build -v
BUILD=build -v -trimpath
GCFLAGS=-gcflags '-e'
LDFLAGS=-ldflags '-s -w'
PROGRAM=duckycode

View file

@ -1,3 +1,13 @@
# 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
View file

@ -1 +1,3 @@
module git.giftfish.de/ston1th/duckycode
go 1.15

View 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

View file

@ -25,7 +25,7 @@ func fatal(v interface{}) {
}
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(&outFile, "o", "inject.bin", "output file (use - for stdout)")
flag.Parse()
@ -45,7 +45,10 @@ func main() {
fatal(err)
}
}
e := encoder.NewEncoder(out, "de")
e, err := encoder.NewEncoder(out, language)
if err != nil {
fatal(err)
}
err = e.Encode(in)
if err != nil {
fatal(err)

View file

@ -21,11 +21,9 @@ type Encoder struct {
repeat bool
}
func NewEncoder(w io.Writer, language string) *Encoder {
if language == "" {
language = "de"
}
return &Encoder{w, language, 0, false, 0, false}
func NewEncoder(w io.Writer, language string) (*Encoder, error) {
err := lang.Exists(language)
return &Encoder{w, language, 0, false, 0, false}, err
}
func (e *Encoder) Encode(r io.Reader) (err error) {

View file

@ -15,7 +15,11 @@ REM Hello World
`)
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 {
t.Error(err)
}
@ -34,7 +38,11 @@ STRING Hello World
0x12, 0x0, 0x2c, 0x0, 0x1a, 0x2, 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 {
t.Error(err)
}
@ -68,7 +76,11 @@ STRING Hello World
0xf, 0x0, 0x12, 0x0, 0x2c, 0x0, 0x1a, 0x2,
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 {
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) {
var in = bytes.NewBufferString(`
REM Type Hello World into Windows notepad. Target: Windows 95 and beyond. Author: Darren
@ -88,7 +112,10 @@ ENTER
DELAY 1000
STRING Hello World
`)
e := NewEncoder(ioutil.Discard, "de")
e, err := NewEncoder(ioutil.Discard, "de")
if err != nil {
b.Error(err)
}
b.ReportAllocs()
for i := 0; i < b.N; i++ {
e.Encode(in)

View file

@ -2,6 +2,8 @@
package lang
import "errors"
var L = make(map[string]Lang)
type Lang map[string]Key
@ -10,3 +12,10 @@ type Key struct {
Key byte
Mod byte
}
func Exists(l string) error {
if _, ok := L[l]; !ok {
return errors.New("language '" + l + "' is not supported")
}
return nil
}

View file

@ -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"]},
}