为什么在本例中没有运行shellcode代码?
例1
std::vector<unsigned char> decrypted(encrypted.size());
void *exec = VirtualAlloc(0, decrypted.size(), MEM_COMMIT, PAGE_EXECUTE_READWRITE);
memcpy(exec, &decrypted.front(), decrypted.size());
((void(*)())exec)();
当我输入cout << &decrypted.front()
时,我在控制台中获取有效载荷并添加> out.txt
,然后将有效载荷保存到文本文件中,然后在记事本中查看它,复制它,然后将它与
例2
unsigned char out[] = "\x01\x01\x01\x01\x01"
void *exec = VirtualAlloc(0, sizeof(out), MEM_COMMIT, PAGE_EXECUTE_READWRITE);
memcpy(exec, out, sizeof(out));
((void(*)())exec)();
如果我可以用*decrypted.front()
将外壳代码输出到屏幕上,那么我应该能够将它传递给memcpy
。
示例1中的相同有效载荷在示例2中运行良好。
发布于 2022-01-30 07:42:04
memcpy
接受两个指针,即目标和源。在示例1中,源是临时迭代器的地址,而不是矢量下数组的开始,所以您要复制的不是向量中的数据,而是迭代器的字节。
如果要使用memcpy
,则需要使用两个数组或指针将数据复制到缓冲区,或者可以使用迭代器将数据从一个位置复制到另一个位置,但不能同时使用两者。
https://stackoverflow.com/questions/70816588
复制