Added invalid pattern result
This commit is contained in:
@@ -34,6 +34,3 @@ Author: Samuel Pua (kahkin@gmail.com)
|
|||||||
## Todos
|
## Todos
|
||||||
- Tab completion
|
- Tab completion
|
||||||
> Seriously out of my league for now. Easy to way to it seems to be using external library argcomplete. But I prefer not to use external libraries
|
> Seriously out of my league for now. Easy to way to it seems to be using external library argcomplete. But I prefer not to use external libraries
|
||||||
- Add no search scenario for fuzzPatternSearch
|
|
||||||
> For longer than 4 bytes
|
|
||||||
> For really cannot find
|
|
||||||
|
|||||||
Binary file not shown.
@@ -11,6 +11,8 @@ import (
|
|||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
patternPointer:= kingpin.Arg("search", "Hex(eg '0x42424242') or String to be search").Required().String()
|
patternPointer:= kingpin.Arg("search", "Hex(eg '0x42424242') or String to be search").Required().String()
|
||||||
|
littleEndianPointer:= kingpin.Flag("little-endian", "Assumes the string to be little endian (default)").Default("true").Bool()
|
||||||
|
bigEndianPointer:= kingpin.Flag("big-endian", "Assumes the string to be big endian").Default("false").Bool()
|
||||||
pattLengthPointer:= kingpin.Flag("length", "Pattern length").Short(rune('l')).Int()
|
pattLengthPointer:= kingpin.Flag("length", "Pattern length").Short(rune('l')).Int()
|
||||||
kingpin.Parse()
|
kingpin.Parse()
|
||||||
|
|
||||||
@@ -23,12 +25,14 @@ func main() {
|
|||||||
charsetSmall := "abcdefgjijklmnopqrustuvwxyz"
|
charsetSmall := "abcdefgjijklmnopqrustuvwxyz"
|
||||||
charsetNum := "0123456789"
|
charsetNum := "0123456789"
|
||||||
pattLength := *pattLengthPointer
|
pattLength := *pattLengthPointer
|
||||||
|
littleEndian := *littleEndianPointer
|
||||||
|
bigEndian := *bigEndianPointer
|
||||||
finalPos := 0
|
finalPos := 0
|
||||||
var startPos int
|
var startPos int
|
||||||
|
|
||||||
if len(*patternPointer)<4 {
|
if len(*patternPointer)<4 {
|
||||||
fmt.Println("Input must have at least 4 bytes")
|
fmt.Println("Input must have at least 4 bytes")
|
||||||
os.Exit(0)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (*patternPointer)[:2] == "0x" {
|
if (*patternPointer)[:2] == "0x" {
|
||||||
@@ -36,23 +40,34 @@ func main() {
|
|||||||
fmt.Println("Assumed litle endian")
|
fmt.Println("Assumed litle endian")
|
||||||
fullBytes, _ := hex.DecodeString((*patternPointer)[2:])
|
fullBytes, _ := hex.DecodeString((*patternPointer)[2:])
|
||||||
fullPattern = string(fullBytes)
|
fullPattern = string(fullBytes)
|
||||||
fullPattern = strReverse(fullPattern)
|
|
||||||
} else {
|
} else {
|
||||||
fullPattern = *patternPointer
|
fullPattern = *patternPointer
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(fullPattern)<4 {
|
if len(fullPattern)<4 {
|
||||||
fmt.Println("Input must have at least 4 bytes")
|
fmt.Println("Input must have at least 4 bytes")
|
||||||
os.Exit(0)
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
//change if little endian
|
||||||
|
if !bigEndian && littleEndian {
|
||||||
|
fullPattern = strReverse(fullPattern)
|
||||||
}
|
}
|
||||||
|
|
||||||
pattern = fullPattern[:4]
|
pattern = fullPattern[:4]
|
||||||
|
|
||||||
|
//check if combi is valid
|
||||||
|
bigCheck:=0
|
||||||
for i:=0; i<len(pattern); i++ {
|
for i:=0; i<len(pattern); i++ {
|
||||||
if strings.Contains(charsetCaps, string(pattern[i])) {
|
if strings.Contains(charsetCaps, string(pattern[i])) {
|
||||||
startPos = i
|
startPos = i
|
||||||
|
bigCheck+=1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if bigCheck!=1 {
|
||||||
|
fmt.Println("Your pattern is invalid. Please try again...")
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
|
||||||
//find combi
|
//find combi
|
||||||
combiArr[0]=strings.IndexByte(charsetCaps, pattern[(startPos+0)%4])
|
combiArr[0]=strings.IndexByte(charsetCaps, pattern[(startPos+0)%4])
|
||||||
@@ -60,6 +75,14 @@ func main() {
|
|||||||
combiArr[2]=strings.IndexByte(charsetSmall, pattern[(startPos+2)%4])
|
combiArr[2]=strings.IndexByte(charsetSmall, pattern[(startPos+2)%4])
|
||||||
combiArr[3]=strings.IndexByte(charsetNum, pattern[(startPos+3)%4])
|
combiArr[3]=strings.IndexByte(charsetNum, pattern[(startPos+3)%4])
|
||||||
|
|
||||||
|
//check if combi is valid
|
||||||
|
for _,i := range combiArr {
|
||||||
|
if i<0 {
|
||||||
|
fmt.Println("Your pattern is invalid. Please try again...")
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
finalPos = findPos(combiArr, startPos)
|
finalPos = findPos(combiArr, startPos)
|
||||||
|
|
||||||
if pattLength == 0 {
|
if pattLength == 0 {
|
||||||
|
|||||||
Reference in New Issue
Block a user