Именованные Piepes C ++ Server Dll Inject и C# Client - PullRequest
0 голосов
/ 19 апреля 2020

Я не знаю, почему это не работает, я не продвинутый программист или что-то еще, я только начинаю изучать эту функцию, если кто-то может помочь мне решить эту проблему, я оценим ее :))

Ссылка на источник: https://github.com/erfg12/memory.dll/wiki/Using-Named-Pipes?fbclid=IwAR3RQ-LKqIN2efj7QO3fsbScGO3qSp7Q4jmMMfg9K5AwTrpB-DrJhs-QlaU

Ссылка на источник: https://github.com/erfg12/memory.dll/wiki/Make-a-Named-Pipe-DLL- (Cplusplus)

Мой код:

VOID EQTFunctions(const char* func, int len) {
char newText[1024] = { 0 };
strncpy(newText, func, sizeof(func));

wchar_t* DbgTxtMsg = new wchar_t[sizeof(newText)];
mbstowcs(DbgTxtMsg, newText, sizeof(newText));
MessageBox(NULL, (LPCSTR)DbgTxtMsg, NULL, MB_OK); //show a debug message box from within the injected game

char cmd[1024] = { 0 };
strcpy(cmd, newText);
strtok(cmd, " ");

if (strcmp("Normal Attack", cmd) == 0) 
{
    printf("Normal Attack Active");
    ValueAttack = 5;
}
else if (strcmp("Skill Attack", cmd) == 0)
{
    printf("Skill Attack Active");
    ValueAttack = 3;
}
memset(cmd, 0, 1024);
memset(newText, 0, 1024);
return;

}

void OnAttach(HMODULE hModule) {

HANDLE hPipe;
char buffer[1024];
char text[1024];
DWORD dwRead;

std::string myProcID = "\\\\.\\pipe\\EQTPipe";
std::wstring To(myProcID.begin(), myProcID.end());
LPCWSTR a = To.c_str();

MessageBox(NULL, (LPCSTR)a, NULL, MB_OK);

hPipe = CreateNamedPipe((LPCSTR)a,
    PIPE_ACCESS_DUPLEX | PIPE_TYPE_BYTE | PIPE_READMODE_BYTE,
    PIPE_WAIT,
    1,
    1024 * 16,
    1024 * 16,
    NMPWAIT_USE_DEFAULT_WAIT,
    NULL);
while (hPipe != NULL)
{
    if (ConnectNamedPipe(hPipe, NULL) != FALSE)
    {
        while (ReadFile(hPipe, buffer, sizeof(buffer), &dwRead, NULL) != FALSE)
        {
            int i = 0;
            for (; i < strlen(buffer); i++)
            {
                if (isprint(buffer[i]) == false)
                    break;

                text[i] = buffer[i];
            }
            EQTFunctions(text, sizeof(buffer));
            memset(text, 0, sizeof(text));
            memset(buffer, 0, sizeof(buffer));
            dwRead = {};
        }
        FlushFileBuffers(hPipe);
    }
    DisconnectNamedPipe(hPipe);
}

}

  public void NewThreadStartClient(string func)
    {
        using (NamedPipeClientStream pipeStream = new NamedPipeClientStream("EQTPipe"))
        {
            if (!pipeStream.IsConnected)
                pipeStream.Connect();

            using (StreamWriter sw = new StreamWriter(pipeStream))
            {
                if (sw.AutoFlush == false)
                    sw.AutoFlush = true;
                sw.WriteLine(func);
            }
        }
    }

    private void button1_Click_2(object sender, EventArgs e)
    {
        Thread NormalAttackThread = new Thread(() => NewThreadStartClient("Normal Attack"));
        NormalAttackThread.Start();
    }

Я делаю это с помощью Extreme Injector, но когда я нажимаю кнопку, которую не могу получить на сервере, метод инъекции - ThreadHijack

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...