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
|
||||
BUILD=build -v
|
||||
BUILD=build -v -trimpath
|
||||
GCFLAGS=-gcflags '-e'
|
||||
LDFLAGS=-ldflags '-s -w'
|
||||
PROGRAM=duckycode
|
||||
|
|
|
|||
10
README.md
10
README.md
|
|
@ -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
2
go.mod
|
|
@ -1 +1,3 @@
|
|||
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() {
|
||||
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)
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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