该代码主要实现了一个使用 Golang 对二进制文件进行加密、解密和执行的程序,具体功能如下:

  1. 导入必要的包:

    • crypto/aes:用于 AES 加密
    • crypto/cipher:用于创建流密码器
    • crypto/rand:用于生成随机密钥
    • encoding/base64:用于 Base64 编码和解码
    • io/ioutil:用于读取文件
    • reflect:用于动态调用函数
    • time:用于延时
    • unsafe:用于指针操作
    • golang.org/x/sys/windows:用于调用 Windows API 函数
  2. 定义全局变量:

    • kernel32:Windows kernel32.dll 的懒加载库
    • ntdll:Windows ntdll.dll 的懒加载库
    • VirtualAlloc:用于申请内存空间的函数指针
    • RtlMoveMemory:用于将数据复制到内存的函数指针
    • CreateThread:用于创建线程的函数指针
  3. 生成随机密钥函数:

    • generateKey():使用 rand.Read() 生成 32 字节的随机密钥
  4. 加密函数:

    • encrypt(key []byte, data []byte):使用 AES-CTR 模式加密数据,具体步骤如下:
      • 使用 aes.NewCipher() 生成加密块
      • 使用 cipher.NewCTR() 生成流密码器
      • 使用 stream.XORKeyStream() 对数据进行加密
  5. 编码和解码函数:

    • encode(src string):将原始数据加密,并使用 Base64 编码,返回密钥和加密数据字符串
    • decode(src string):将 Base64 解码后的数据使用密钥解密,返回原始数据
  6. 执行 shellcode 函数:

    • exec(charcode []byte)
      • 使用 VirtualAlloc() 申请可执行内存空间
      • 使用 RtlMoveMemory() 将 shellcode 复制到申请的内存空间
      • 使用 CreateThread() 创建线程并执行 shellcode
  7. 读取文件函数:

    • readFile(filename string):使用 ioutil.ReadFile() 读取文件内容
  8. 主函数:

    • 读取 payload.bin 文件内容
    • 对文件内容进行加密和编码
    • 对编码后的数据进行解码,获取 shellcode
    • 使用 reflect 包将 exec 函数转换为 reflect.Value 类型
    • 将 shellcode 作为参数调用 exec 函数,执行 shellcode

代码使用 AES 加密和 Base64 编码对 shellcode 进行保护,并通过 Windows API 函数 VirtualAllocRtlMoveMemoryCreateThread 将 shellcode 注入到内存并执行。这是一种常见的 shellcode 注入技术,需要注意的是,该代码仅用于学习和研究目的,不可用于非法活动。

Golang Shellcode 注入技术详解:加密、解密和执行

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

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