【问题标题】:c++ Injected DLL vars getting corruptedc ++注入的DLL vars被破坏
【发布时间】:2013-07-10 14:01:36
【问题描述】:

我目前正试图通过注入 DLL 并绕过几个函数来向基本服务器应用程序添加一些功能,但我遇到了存储的 IP 地址在两次调用之间损坏的问题。

首先我绕过“接受”并解析一些值,然后将它们输入到连接类中并将其添加到列表中。

接受绕行功能:

std::list<Connection*> ConnectionsList;
SOCKET WINAPI MyAccept(SOCKET s, sockaddr *addr, int *addrlen)
{
    ...  
    ConnectionsList.push_back(new Connection(ClientSocket, ipstr));
    ...
}

连接类:

SOCKET s;
char * ipAddress;
char * playerName;
Connection::Connection(SOCKET sock, char * address)
{
    s = sock;
    ipAddress = address;
}

我还绕道了“closesocket”,此时我想从连接列表中删除套接字。如果我在此函数上设置断点,则 IP 地址似乎已损坏。

有人知道为什么会这样吗?

【问题讨论】:

  • s 从 296 变成 292 有关系吗?

标签: c++ corruption dll-injection detours


【解决方案1】:

ipAddress = address; 只会复制指针。如果其他东西改变了它所指向的东西,你就会遇到麻烦。

由于这是 C++,因此使用 std::string 可能是最安全的。

std::string ipAdreess;
...
ipAddress = address;

否则,stdcpy 进入一个足够大的缓冲区。

顺便说一句,什么会从列表中删除所有Connection*

【讨论】:

    【解决方案2】:

    尝试用锁保护您的ConnectionList 等静态/全局变量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-08
      • 1970-01-01
      • 1970-01-01
      • 2021-11-17
      • 1970-01-01
      • 2010-12-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多