2026-04-06 00:20:51 -05:00

171 lines
3.5 KiB
Go

package axscript
import (
"encoding/base64"
"encoding/hex"
"fmt"
"strings"
)
// /---
func bytesToCode(language string, data []byte, varName string) string {
if len(data) == 0 {
return ""
}
switch language {
case "c", "cpp":
var sb strings.Builder
sb.WriteString(fmt.Sprintf("unsigned char %s[] = {\n ", varName))
for i, b := range data {
if i > 0 {
sb.WriteString(", ")
if i%16 == 0 {
sb.WriteString("\n ")
}
}
sb.WriteString(fmt.Sprintf("0x%02x", b))
}
sb.WriteString("\n};\n")
sb.WriteString(fmt.Sprintf("unsigned int %s_len = %d;\n", varName, len(data)))
return sb.String()
case "csharp", "cs":
var sb strings.Builder
sb.WriteString(fmt.Sprintf("byte[] %s = new byte[%d] {\n ", varName, len(data)))
for i, b := range data {
if i > 0 {
sb.WriteString(", ")
if i%16 == 0 {
sb.WriteString("\n ")
}
}
sb.WriteString(fmt.Sprintf("0x%02x", b))
}
sb.WriteString("\n};\n")
return sb.String()
case "python", "py":
var sb strings.Builder
sb.WriteString(fmt.Sprintf("%s = b\"", varName))
for _, b := range data {
sb.WriteString(fmt.Sprintf("\\x%02x", b))
}
sb.WriteString("\"\n")
return sb.String()
case "powershell", "ps":
var sb strings.Builder
sb.WriteString(fmt.Sprintf("[Byte[]] $%s = ", varName))
for i, b := range data {
if i > 0 {
sb.WriteString(",")
}
sb.WriteString(fmt.Sprintf("0x%02x", b))
}
sb.WriteString("\n")
return sb.String()
case "vba", "vbs":
var sb strings.Builder
sb.WriteString(fmt.Sprintf("%s = Array(", varName))
for i, b := range data {
if i > 0 {
sb.WriteString(", ")
if i%16 == 0 {
sb.WriteString("_\n ")
}
}
sb.WriteString(fmt.Sprintf("%d", b))
}
sb.WriteString(")\n")
return sb.String()
case "ruby":
var sb strings.Builder
sb.WriteString(fmt.Sprintf("%s = \"", varName))
for _, b := range data {
sb.WriteString(fmt.Sprintf("\\x%02x", b))
}
sb.WriteString("\"\n")
return sb.String()
default:
return base64.StdEncoding.EncodeToString(data)
}
}
// /---
func encodeData(alg string, data []byte, key string) string {
switch alg {
case "base64":
return base64.StdEncoding.EncodeToString(data)
case "hex":
return hex.EncodeToString(data)
case "xor":
if len(key) == 0 {
return base64.StdEncoding.EncodeToString(data)
}
keyBytes := []byte(key)
result := make([]byte, len(data))
for i := range data {
result[i] = data[i] ^ keyBytes[i%len(keyBytes)]
}
return base64.StdEncoding.EncodeToString(result)
default:
return base64.StdEncoding.EncodeToString(data)
}
}
// /---
func decodeData(alg string, data string, key string) string {
switch alg {
case "base64":
decoded, err := base64.StdEncoding.DecodeString(data)
if err != nil {
return ""
}
return string(decoded)
case "hex":
decoded, err := hex.DecodeString(data)
if err != nil {
return ""
}
return string(decoded)
case "xor":
raw, err := base64.StdEncoding.DecodeString(data)
if err != nil {
return ""
}
if len(key) == 0 {
return string(raw)
}
keyBytes := []byte(key)
result := make([]byte, len(raw))
for i := range raw {
result[i] = raw[i] ^ keyBytes[i%len(keyBytes)]
}
return string(result)
default:
return data
}
}
// /---
func decodeRawData(alg string, rawData []byte, key string) []byte {
switch alg {
case "xor":
if len(key) == 0 {
return rawData
}
keyBytes := []byte(key)
result := make([]byte, len(rawData))
for i := range rawData {
result[i] = rawData[i] ^ keyBytes[i%len(keyBytes)]
}
return result
default:
return rawData
}
}