7
7
"path/filepath"
8
8
"strings"
9
9
10
- "github.com/cmepw/221b/encryption/xor"
11
10
"github.com/cmepw/221b/loader"
12
11
"github.com/cmepw/221b/logger"
13
12
)
@@ -16,11 +15,13 @@ var (
16
15
shellPath string
17
16
key string
18
17
output string
18
+ method string
19
19
)
20
20
21
21
var (
22
- ErrMissingShellPath = fmt .Errorf ("missing shellPath argument" )
23
- ErrMissingKey = fmt .Errorf ("missing key argument" )
22
+ ErrMissingShellPath = fmt .Errorf ("missing shellPath argument" )
23
+ ErrMissingKey = fmt .Errorf ("missing key argument" )
24
+ ErrMethodNotSupported = fmt .Errorf ("provided encryption method isn't supported, please choose: 'aes', 'xor'" )
24
25
)
25
26
26
27
var bake = & cobra.Command {
@@ -40,6 +41,12 @@ var bake = &cobra.Command{
40
41
logger .Warn (fmt .Sprintf ("output path set to default: %s" , output ))
41
42
}
42
43
44
+ loader , ok := loader .Method [method ]
45
+ if ! ok {
46
+ logger .Fatal (ErrMethodNotSupported )
47
+ }
48
+
49
+ logger .Info (fmt .Sprintf ("use %s encryption method" , method ))
43
50
logger .Debug (fmt .Sprintf ("baking %s with key %s" , shellPath , key ))
44
51
45
52
logger .Debug (fmt .Sprintf ("reading %s" , shellPath ))
@@ -48,13 +55,16 @@ var bake = &cobra.Command{
48
55
logger .Fatal (err )
49
56
}
50
57
51
- logger .Debug (fmt .Sprintf ("encrypting %s" , shellPath ))
52
- encryptedShell := xor .Encrypt (file , []byte (key ))
58
+ logger .Info (fmt .Sprintf ("encrypting %s" , shellPath ))
53
59
54
- logger .Debug (fmt .Sprintf ("injecting encrypted shell into payload" ))
60
+ encryptedShell , err := loader .Encrypt (file , []byte (key ))
61
+ if err != nil {
62
+ logger .Fatal (err )
63
+ }
64
+
65
+ logger .Info (fmt .Sprintf ("loading encrypted shell into payload" ))
55
66
56
- xorLoader := loader .NewXorLoader ([]byte (key ))
57
- content , err := xorLoader .Load (encryptedShell )
67
+ content , err := loader .Load (encryptedShell , []byte (key ))
58
68
if err != nil {
59
69
logger .Fatal (err )
60
70
}
@@ -64,7 +74,9 @@ var bake = &cobra.Command{
64
74
fmt .Println (string (content ))
65
75
}
66
76
67
- if err := xorLoader .Compile (output , content ); err != nil {
77
+ logger .Info ("compiling binary" )
78
+
79
+ if err := loader .Compile (output , content ); err != nil {
68
80
logger .Fatal (err )
69
81
}
70
82
},
@@ -74,4 +86,5 @@ func init() {
74
86
bake .Flags ().StringVarP (& shellPath , "shellPath" , "s" , "" , "path to the shell scrypt" )
75
87
bake .Flags ().StringVarP (& key , "key" , "k" , "" , "key to use for the xor" )
76
88
bake .Flags ().StringVarP (& output , "output" , "o" , "" , "output path (e.g., /home/bin.exe)" )
89
+ bake .Flags ().StringVarP (& method , "method" , "m" , "xor" , "encryption method" )
77
90
}
0 commit comments