Skip to content

Commit

Permalink
Closes #1. v1.0.0
Browse files Browse the repository at this point in the history
  • Loading branch information
joanbono committed Feb 25, 2019
1 parent ba76c33 commit 4f0d111
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 7 deletions.
5 changes: 5 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -37,6 +39,9 @@ $ gottern -o 0x36416a37
# Little Endian HEX
$ gottern -o 376a4136
[*] 290
# Big Endian HEX
$ gottern -o 36416a37 -b
[*] 290
```

***
Expand Down
29 changes: 22 additions & 7 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand All @@ -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
Expand All @@ -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))
}
}
Expand All @@ -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")
Expand Down

0 comments on commit 4f0d111

Please sign in to comment.