Другое С/С++ Вопрос - Ответ

vmprotect

Известный
394
279
Можно хукнуть метод RakClient, отвечающий за подключение к серверу
C++:
#include "kthook/kthook.hpp"



using RakClientConnect_t = bool(__thiscall*)(void* pRakClient, const char* host, unsigned short serverPort, unsigned short clientPort, unsigned int depreciated, int threadSleepTimer);
kthook::kthook_simple<RakClientConnect_t>(RakClientConnectHook);



bool RakClientConnectHooked(const decltype(RakClientConnectHook)& hook, void* pRakClient, const char* host, unsigned short serverPort, unsigned short clientPort, unsigned int depreciated, int threadSleepTimer)
{
    if (strcmp(host, "127.0.0.1") == 0))
        std::cout << "Ochko anus rvat ebat" << std::endl;
    else
        std::cout << "Ne chunazes" << std::endl;


    return hook.get_trampoline()(pRakClient, host, serverPort, clientPort, depreciated, threadSleepTimer);
}



auto SAMPHandle = reinterpret_cast<std::uintptr_t>(GetModuleHandle("samp.dll"));
RakClientConnectHook.set_cb(&RakClientHooked);
RakClientConnectHook.set_dest(SAMPHandle + 0x339F0); // R3
RakClientConnectHook.install();

Еще к примеру можно хукать какую-нибудь функцию из winsock (получать адрес экпортируемой функции из Ws2_32.dll), но тогда есть вероятность. то функция вызвана не из samp.dll, а например из какого-то плагина
а через rakclient можно создать коннект на другой айпи ?
 

вайега52

Налуашил состояние
Модератор
3,055
3,285
а через rakclient можно создать коннект на другой айпи ?
Если я правильно понимаю, ты хочешь изменить айпи при подключении в сампе?
Тогда ты можешь делать что-то типа такого
1714287161019.png
C++:
using NetGameConnect_t = int(__thiscall*)(std::uintptr_t* netgame);
kthook::kthook_simple<NetGameConnect_t> NetGameConnectHook;



// r3
NetGameConnectHook.set_dest(reinterpret_cast<std::uintptr_t>(GetModuleHandleA("samp.dll")) + 0x85D0);
NetGameConnectHook.set_cb([](const decltype(NetGameConnectHook)& hook, std::uintptr_t* netgame)
{
    char* host = reinterpret_cast<char*>(*netgame + 0x30);
    strcpy(host, "127.0.0.1");

    *reinterpret_cast<int*>(*netgame + 0x235) = 7777;


    return hook.get_trampoline()(netgame);
});
NetGameConnectHook.install();
 

vmprotect

Известный
394
279
Если я правильно понимаю, ты хочешь изменить айпи при подключении в сампе?
Тогда ты можешь делать что-то типа такого
C++:
using NetGameConnect_t = int(__thiscall*)(std::uintptr_t* netgame);
kthook::kthook_simple<NetGameConnect_t> NetGameConnectHook;



// r3
NetGameConnectHook.set_dest(reinterpret_cast<std::uintptr_t>(GetModuleHandleA("samp.dll")) + 0x85D0);
NetGameConnectHook.set_cb([](const decltype(NetGameConnectHook)& hook, std::uintptr_t* netgame)
{
    char* host = reinterpret_cast<char*>(*netgame + 0x30);
    strcpy(host, "127.0.0.1");

    *reinterpret_cast<int*>(*netgame + 0x235) = 7777;


    return hook.get_trampoline()(netgame);
});
NetGameConnectHook.install();
крашит, при попытке подключения
 

yorenov

Участник
65
65
Помогите за нажатием W, asi (псдк + сампапи), альтернатива setGameKeyState ((в луа)).
мои попытки успех не обрели, из под винды тыкать W бяка
 

inexplica

Известный
810
417
C++:
            float distance = bet.Length();
            if (distance >= 10)
            {
                bet.Normalize();
                c.fX += bet.fX * 3;
                c.fY += bet.fY * 3;
                c.fZ += bet.fZ * 3;
                sendVehicle(c);
                AddMessageJumpQ(reinterpret_cast<char*>(distance), 1500, 12, true);
                time = GetTickCount();
            }
выдаёт ошибку: недопустимое преобразование типа.
помогите решить пж
 
  • Клоун
Реакции: F0RQU1N and

F0RQU1N and

Известный
1,292
502
C++:
            float distance = bet.Length();
            if (distance >= 10)
            {
                bet.Normalize();
                c.fX += bet.fX * 3;
                c.fY += bet.fY * 3;
                c.fZ += bet.fZ * 3;
                sendVehicle(c);
                AddMessageJumpQ(reinterpret_cast<char*>(distance), 1500, 12, true);
                time = GetTickCount();
            }
выдаёт ошибку: недопустимое преобразование типа.
помогите решить пж
std::to_string{distance}.c_str()
 
  • Bug
Реакции: inexplica

Smeruxa

smeruxa.ru
Проверенный
1,434
800
Как перевести ImGuiKey в обычную клавишу int?
C++:
if (utils->isKeyPressed(static_cast<int>(gConfig->data["button"].get<ImGuiKey>()), 20))
Я уже по разному пробовал, как и метод GetKeyIndex имгуишный и т д, не знаю что делать
 

Dark_Knight

Me, me and me.
Друг
4,080
2,112
Как перевести ImGuiKey в обычную клавишу int?
C++:
if (utils->isKeyPressed(static_cast<int>(gConfig->data["button"].get<ImGuiKey>()), 20))
Я уже по разному пробовал, как и метод GetKeyIndex имгуишный и т д, не знаю что делать
Ну как бы...
 

0x9

Участник
36
20
помоги пожалуйста, как сделать хук входящих пакетов в SAMP API?
 

Smeruxa

smeruxa.ru
Проверенный
1,434
800
Ну как бы...
Они от 522 (где то так) хранятся, но если вычитать 522, то все равно не тот инт получается, например если Q выбрана, то клавиша, которая получится, если вычесть 522 - это цифра 2