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

kin4stat

mq-team · kin4@naebalovo.team
Всефорумный модератор
2,736
4,741
Как сделать нормальный ноп для RPC? В плане как хранить данные о RPC? В собейте я нихера не понял :D. Я понимаю что нужна структурка RPC, в которой будет ее статус и прочие свойства, но как хранить эти структуры удобно и т.д.?
 

loganhackerdff

Известный
868
519
Как сделать нормальный ноп для RPC? В плане как хранить данные о RPC? В собейте я нихера не понял :D. Я понимаю что нужна структурка RPC, в которой будет ее статус и прочие свойства, но как хранить эти структуры удобно и т.д.?
 

kin4stat

mq-team · kin4@naebalovo.team
Всефорумный модератор
2,736
4,741
Да не, не то. Мне надо в функции приема RPC, проверять, включено ли оно. Примерно продумал такой ход: Массив, в нем индекс = ID RPC. массив типа struct RPC, в котором два поля: std::string name и bool enabled. Мне теперь надо придумать как это заполнять
 

loganhackerdff

Известный
868
519
как через WndProc получить нажатие кнопок на мышке (а именно Средней, X1 и X2)
 

DarkP1xel

Сила воли наше всё.
BH Team
3,635
4,966
как через WndProc получить нажатие кнопок на мышке (а именно Средней, X1 и X2)
 

manukhov

Известный
126
128
Как узнать какой стиль борьбы скольки байтам равен?
И чем отличается #1 от #2?
  • CPed +0x72D = [byte] Стиль борьбы #1
  • CPed +0x72E = [byte] Стиль борьбы #2
Не знаю, кому кроме меня это вообще надо, но в гугле ничего нет и пришлось искать методом тыка, так что пусть будет:

Всего 4-16 байт.

Из интересного:
5 - Бокс
6 - Махи ногами (вроде тхэквондо или чет такое)
7 - захват и удар коленом
15 - Уличный стиль

Остальное - это удары оружием ближнего боя.

Записывать в оба адреса, использовать на ПКМ+F.

Пример использования:
C++:
        DWORD cPed;                                                             //Boxing
        ReadProcessMemory(hProcess, (LPVOID)0xB6F5F0, &cPed, sizeof(cPed), 0);
        BYTE value = 5;
        WriteProcessMemory(hProcess, (LPVOID)(cPed + 0x72D), &value, 4, nullptr);
        WriteProcessMemory(hProcess, (LPVOID)(cPed + 0x72E), &value, 4, nullptr);
 
Последнее редактирование:
  • Нравится
Реакции: kin4stat

kin4stat

mq-team · kin4@naebalovo.team
Всефорумный модератор
2,736
4,741
Не знаю, кому кроме меня это вообще надо, но в гугле ничего нет и пришлось искать методом тыка, так что пусть будет:

Всего 4-16 байт.

Из интересного:
5 - Бокс
6 - Махи ногами (вроде тхэквондо или чет такое)
7 - захват и удар коленом
15 - Уличный стиль

Остальное - это удары оружием ближнего боя.

Записывать в оба адреса, использовать на ПКМ+F.
Сделай для этого код(Любой, экстернал/интернал) и выложи в тему Полезные Функции С++ю
 
Последнее редактирование:
  • Нравится
Реакции: S0meTh1n69

Musaigen

abobusnik
Проверенный
1,586
1,315
Да не, не то. Мне надо в функции приема RPC, проверять, включено ли оно. Примерно продумал такой ход: Массив, в нем индекс = ID RPC. массив типа struct RPC, в котором два поля: std::string name и bool enabled. Мне теперь надо придумать как это заполнять
Используй std::map.
Заполнять через for.
 

manukhov

Известный
126
128
Сделай для этого код(Любой, экстернал/интернал) и выложи в тему Полезные Функции С++ю
Код добавил, а в ту тему не вижу смысла кидать, уж очень примитивно. Кому будет нужно, тот увидит. Это теперь и в гугле и в поиске бх есть.
 

Dark_Knight

Me, me and me.
Друг
4,070
2,086
Используй std::map.
Заполнять через for.
Можно спокойной через vector сделать не напрягаясь и юзать std::find_if для поиска любых значений.
map имеет метод find, но позволит искать по первому элементу пары(sld::pair)
 

manukhov

Известный
126
128
Здравствуйте, опять я со своими цыганскими фокусами по трансформации internal->external, на сей раз Nametag. Подскажите, что неправильно, я так и не нашёл проблему, а работать оно не хочет.

P.S.
1. Интернал точно правильный.
2. Получение адреса samp.dll точно работает
3. Виртал протект делал, не помогает.

Internal:
Idefine SAMP_INFO  0x21A0F8
#define SAMP_SETTINGS  0x3D5
DWORD* pInfo;
BYTE* ThroughWalls;
BYTE* ShowNameTags;
float* fDistance;
    
    
    DWORD SampDLL = (DWORD)GetModuleHandleA("samp.dll");
    if (SampDLL) {
        pInfo = (DWORD*)(SampDLL + SAMP_INFO);
        while (*pInfo == 0) Sleep(1000);
        while (*(DWORD*)(*pInfo + SAMP_SETTINGS) == 0) Sleep(1000);
        ShowNameTags = (BYTE*)(*(DWORD*)(*pInfo + SAMP_SETTINGS) + 0x38);
        ThroughWalls = (BYTE*)(*(DWORD*)(*pInfo + SAMP_SETTINGS) + 0x2F);
        fDistance = (float*)((DWORD*)(*(DWORD*)(*pInfo + SAMP_SETTINGS) + 0x27));
        for (;;)
        {
            do {
                Sleep(100);
            } while (!KeyPressed(VK_MENU) || !KeyPressed(0x32));
            do {
                Sleep(50);
            } while (KeyPressed(0x32));
            gta_showText("okoboga v2 ~g~Activated", 1000, NULL, NULL);
            *ShowNameTags = 1;
            *ThroughWalls = 0;
            *fDistance = 999.0f;
            do {
                Sleep(100);
            } while (!KeyPressed(VK_MENU) || !KeyPressed(0x32));
            do {
                Sleep(50);
            } while (KeyPressed(0x32));
            gta_showText("okoboga v2 ~r~Deactivated", 1000, NULL, NULL);
            *ShowNameTags = 1;
            *ThroughWalls = 1;
            *fDistance = 0.0f;
        }
    }

External (моё):
#define SAMP_INFO  0x21A0F8
#define SAMP_SETTINGS  0x3D5

if (checkBox5->Checked)
    {
        DWORD pInfo;
        BYTE ShowNameTags = 1;
        BYTE ThroughWalls = 0;
        float fDistance = 999.0f;

        ReadProcessMemory(hProcess, (LPVOID)(moduleBase + SAMP_INFO), &pInfo, sizeof(pInfo), nullptr);
        WriteProcessMemory(hProcess, (LPVOID)(pInfo + SAMP_SETTINGS + 0x38), &ShowNameTags, sizeof(ShowNameTags), nullptr);
        WriteProcessMemory(hProcess, (LPVOID)(pInfo + SAMP_SETTINGS + 0x2F), &ThroughWalls, sizeof(ThroughWalls), nullptr);
        WriteProcessMemory(hProcess, (LPVOID)(pInfo + SAMP_SETTINGS + 0x27), &fDistance, sizeof(fDistance), nullptr);
    }
    else
    {
        DWORD pInfo;
        BYTE ShowNameTags = 1;
        BYTE ThroughWalls = 1;
        float fDistance = 0.0f;

        ReadProcessMemory(hProcess, (LPVOID)(moduleBase + SAMP_INFO), &pInfo, sizeof(pInfo), nullptr);
        WriteProcessMemory(hProcess, (LPVOID)(pInfo + SAMP_SETTINGS + 0x38), &ShowNameTags, sizeof(ShowNameTags), nullptr);
        WriteProcessMemory(hProcess, (LPVOID)(pInfo + SAMP_SETTINGS + 0x2F), &ThroughWalls, sizeof(ThroughWalls), nullptr);
        WriteProcessMemory(hProcess, (LPVOID)(pInfo + SAMP_SETTINGS + 0x27), &fDistance, sizeof(fDistance), nullptr);
 

kin4stat

mq-team · kin4@naebalovo.team
Всефорумный модератор
2,736
4,741
Здравствуйте, опять я со своими цыганскими фокусами по трансформации internal->external, на сей раз Nametag. Подскажите, что неправильно, я так и не нашёл проблему, а работать оно не хочет.
Если я все правильно понял, то (DWORD*)(*pInfo + SAMP_SETTINGS)
Преобразует *pInfo+SAMP_SETTINGS в DWORD*, после идет +0x27, а из-за арифметики указателей, это получается 0x27 * 4, и потом идет разыменование.
Возможно ты еще с преобразованиями накосячил, пока с телефонам, не совсем удобно смотреть :D
Также возможно у тебя DWORD задейфанен в 8 байт, а не в 4. Я однажды из-за этого час искал где приколы возникли :D

нашел где ошибка. Вместо
C++:
ReadProcessMemory(hProcess, (LPVOID)(moduleBase + SAMP_INFO), &pInfo, sizeof(pInfo), nullptr);
WriteProcessMemory(hProcess, (LPVOID)(pInfo + SAMP_SETTINGS + 0x38), &ShowNameTags, sizeof(ShowNameTags), nullptr);
WriteProcessMemory(hProcess, (LPVOID)(pInfo + SAMP_SETTINGS + 0x2F), &ThroughWalls, sizeof(ThroughWalls), nullptr);
WriteProcessMemory(hProcess, (LPVOID)(pInfo + SAMP_SETTINGS + 0x27), &fDistance, sizeof(fDistance), nullptr);
Должно быть что-то типа такого:
C++:
ReadProcessMemory(hProcess, (LPVOID)(moduleBase + SAMP_INFO), &pInfo, sizeof(pInfo), nullptr);
DWORD pSettings;
ReadProcessMemory(hProcess, (LPVOID)(pInfo + SAMP_SETTINGS), &pSettings, sizeof(pSettings), NULL);
WriteProcessMemory(hProcess, (LPVOID)(pSettings + 0x38), &ShowNameTags, sizeof(ShowNameTags), nullptr);
WriteProcessMemory(hProcess, (LPVOID)(pSettings + 0x2F), &ThroughWalls, sizeof(ThroughWalls), nullptr);
WriteProcessMemory(hProcess, (LPVOID)(pSettings + 0x27), &fDistance, sizeof(fDistance), nullptr);
 
Последнее редактирование: