diff --git a/README.md b/README.md index 202a4af..a97b105 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,8 @@ [![GitHub tag](https://img.shields.io/github/tag/joanbono/gottern.svg)](https://github.com/joanbono/gottern/tags) [![Go Version](https://img.shields.io/badge/go-1.11-blue.svg?logo=go)](https://golang.org/dl/) [![License](https://img.shields.io/badge/license-Apache%202.0-blue.svg)](https://www.apache.org/licenses/LICENSE-2.0) +[![Go Report Card](https://goreportcard.com/badge/github.com/joanbono/gottern)](https://goreportcard.com/report/github.com/joanbono/gottern) + Golang port for Metasploit's `pattern_create` and `pattern_offset`. Based on [`haxpattern`](https://github.com/DharmaOfCode/haxpattern) @@ -37,6 +39,9 @@ $ gottern -o 0x36416a37 # Little Endian HEX $ gottern -o 376a4136 [*] 290 +# Big Endian HEX +$ gottern -o 36416a37 -b +[*] 290 ``` *** diff --git a/main.go b/main.go index b7999c8..bc93d6d 100644 --- a/main.go +++ b/main.go @@ -26,23 +26,33 @@ import ( var offset string var create int +var bigendian bool func init() { flag.IntVar(&create, "c", 0, "pattern_create") flag.StringVar(&offset, "o", "", "pattern_offset") + flag.BoolVar(&bigendian, "b", false, "Big Endian") + + flag.Parse() } +// PatternOffset looks for ASCII string +// inside the pattern func PatternOffset(offset string) { var maxPattern string maxPattern = PatternCreate(20280) i := strings.Index(maxPattern, offset) - if i == -1 { + if i == -1 && bigendian == false { PatternLittleEndian(offset) + } else if i == -1 && bigendian == true { + PatternOffsetHex(offset) } else { println("[*]", i) } } +// PatternLittleEndian changes the offset +// in plain HEX to Little Endian format func PatternLittleEndian(offset string) { var offsetLE string if len(offset) >= 8 { @@ -53,6 +63,9 @@ func PatternLittleEndian(offset string) { } } +// PatterOffsetHex will look for the offset +// in the pattern if starts by 0x or its +// HEX in Little Endian format func PatternOffsetHex(offset string) { var maxPatternHex string var offsetAscii []byte @@ -77,23 +90,25 @@ func PatternOffsetHex(offset string) { } } -func PatternCreate(lenght int) string { +// PatterCreate will just create the Pattern +// with [A-Za-z0-9] +func PatternCreate(length int) string { UpperCase := "ABCDEFGHIJKLMNOPQRSTUVWXYZ" LowerCase := "abcdefghijklmnopqrstuvwxyz" Numbers := "0123456789" var pattern []string - for len(pattern) < lenght { + for len(pattern) < length { for _, A0 := range UpperCase { for _, a0 := range LowerCase { for _, n0 := range Numbers { - if len(pattern) < lenght { + if len(pattern) < length { pattern = append(pattern, string(A0)) } - if len(pattern) < lenght { + if len(pattern) < length { pattern = append(pattern, string(a0)) } - if len(pattern) < lenght { + if len(pattern) < length { pattern = append(pattern, string(n0)) } } @@ -103,8 +118,8 @@ func PatternCreate(lenght int) string { return strings.Join(pattern, "") } +// main function to execute the program func main() { - flag.Parse() if (offset == "" && create == 0) || (offset != "" && create != 0) { println("[i] ./gottern -h for help")