这里的 windows api 使用的声明如下
var ( kernel32 = syscall.MustLoadDLL("kernel32.dll") ntdll = syscall.MustLoadDLL("ntdll.dll") virtualAlloc = kernel32.MustFindProc("VirtualAlloc") RtlCopyMemory = ntdll.MustFindProc("RtlCopyMemory") )这里其实你也可以使用 x/windows 库方便使用。
结果展示64位编译出来 1.73M,通过 upx 压缩后 616kb,32位编译出来会更小
执行试试
监听 payload windows/x64/meterpreter/reverse_tcp ,可以看到成功上线
注意事项可能因为 Golang 版本不一致,这个结构有所更改,请自行考证一下,主要原因是非导出字段,官方是不保证向下兼容性的
依然需要注意位数的差异,比如32位的payload请使用32位编译,64位payload使用64位编译
成果源码成果源码我就不贴出来了,其实也是这些代码组合在一起