发布
社区首页 >问答首页 >如果声明为无符号字符的向量,则不运行Shellcode。

如果声明为无符号字符的向量,则不运行Shellcode。
EN

Stack Overflow用户
提问于 2022-01-21 23:18:00
回答 1查看 65关注 0票数 0

为什么在本例中没有运行shellcode代码?

例1

代码语言:javascript
代码运行次数:0
复制
    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

代码语言:javascript
代码运行次数:0
复制
    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中运行良好。

EN

回答 1

Stack Overflow用户

发布于 2022-01-30 15:42:04

memcpy接受两个指针,即目标和源。在示例1中,源是临时迭代器的地址,而不是矢量下数组的开始,所以您要复制的不是向量中的数据,而是迭代器的字节。

如果要使用memcpy,则需要使用两个数组或指针将数据复制到缓冲区,或者可以使用迭代器将数据从一个位置复制到另一个位置,但不能同时使用两者。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70816588

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档