mirror of
https://github.com/Ed1s0nZ/CyberStrikeAI.git
synced 2026-06-10 16:23:54 +02:00
49 lines
1.3 KiB
Go
49 lines
1.3 KiB
Go
package c2
|
||
|
||
import (
|
||
"encoding/base64"
|
||
"strings"
|
||
"unicode/utf8"
|
||
|
||
"golang.org/x/text/encoding/simplifiedchinese"
|
||
"golang.org/x/text/transform"
|
||
)
|
||
|
||
// NormalizeConsoleOutput 将 implant/Shell 原始控制台字节转为 UTF-8 文本。
|
||
// osTag 来自会话的 os 字段(如 windows / Windows 10);空值时按 auto 处理。
|
||
func NormalizeConsoleOutput(raw []byte, osTag string) string {
|
||
if len(raw) == 0 {
|
||
return ""
|
||
}
|
||
osTag = strings.ToLower(strings.TrimSpace(osTag))
|
||
isWindows := strings.Contains(osTag, "windows")
|
||
|
||
if utf8.Valid(raw) {
|
||
return string(raw)
|
||
}
|
||
if isWindows {
|
||
if out, _, err := transform.Bytes(simplifiedchinese.GB18030.NewDecoder(), raw); err == nil {
|
||
return string(out)
|
||
}
|
||
}
|
||
// 非 Windows 或解码失败:GB18030 兜底(覆盖 GBK)
|
||
if out, _, err := transform.Bytes(simplifiedchinese.GB18030.NewDecoder(), raw); err == nil {
|
||
return string(out)
|
||
}
|
||
return string(raw)
|
||
}
|
||
|
||
// ResolveTaskResultText 合并 beacon 回传的 Output/OutputB64(及 Error/ErrorB64),按会话 OS 解码。
|
||
func ResolveTaskResultText(plain, b64, sessionOS string) string {
|
||
if strings.TrimSpace(b64) != "" {
|
||
raw, err := base64.StdEncoding.DecodeString(strings.TrimSpace(b64))
|
||
if err == nil {
|
||
return NormalizeConsoleOutput(raw, sessionOS)
|
||
}
|
||
}
|
||
if plain == "" {
|
||
return ""
|
||
}
|
||
return NormalizeConsoleOutput([]byte(plain), sessionOS)
|
||
}
|