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