/
main.go
78 lines (62 loc) · 1.69 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
package main
import (
"errors"
"flag"
"fmt"
"os"
"time"
b "github.com/noysh22/pdf_breaker/breaker"
unicommon "github.com/unidoc/unidoc/common"
)
const (
argc = 2
defaultTimeout = 2 * time.Minute
)
type argsT struct {
filename string
passMaxLength uint
timeout time.Duration
}
func parseArgs() (*argsT, error) {
const passDefaultLength = 6
if len(os.Args) < argc {
printUsage()
return nil, errors.New("Not enough arguments")
}
args := &argsT{}
flag.StringVar(&args.filename, "f", "", "Filename for the pdf to break")
flag.UintVar(&args.passMaxLength, "l", passDefaultLength, "Max length for the password")
flag.DurationVar(&args.timeout, "t", defaultTimeout, "Timeout for trying cracking the password in minutes")
flag.Parse()
if "" == args.filename {
return nil, errors.New("-f is required")
}
return args, nil
}
func printUsage() {
fmt.Println("====================== USAGE ======================")
fmt.Println("pdf_breaker -f {filename} -l {passMaxLength} -t {timeout}")
fmt.Println("======================== ========================")
}
func main() {
fmt.Println("PDF BREAKER")
unicommon.SetLogger(unicommon.NewConsoleLogger(unicommon.LogLevelDebug))
args, err := parseArgs()
if err != nil {
fmt.Printf("Error: %v\n", err)
return
}
fmt.Printf("filename: %s\nmax length: %d\n", args.filename, args.passMaxLength)
breaker, err := b.NewBreaker(args.filename, args.passMaxLength)
if nil != err {
fmt.Printf("Error: %v\n", err)
return
}
pass, err := breaker.BruteForce(args.timeout)
if nil != err {
fmt.Printf("Error brute forcing: %v\n", err)
return
}
fmt.Printf("PASSWORD CRACKED, Pass is: %s\n", pass)
fmt.Println("Great success")
}