Привязка по ип + замена надписей коннекта SAMP

NOOBDEV

Новичок
Автор темы
2
0
Всем привет! Подскажите пожалуйста, пишу 1 плагин и пытаюсь разобраться с чего начать.


Ссылка на готовый проект с плагином ASI: https://www.blast.hk/threads/219800/
Взял за основу его. Что делать дальше не пойму.
Как обратиться к адресам и заменить их на свое, и чтобы игра закрывалась если не совпадает ип
1728826934690.png
Я так понял это момент подключения серверу, как сделать чтобы вместо SAMP Started - писало мой текст, видел украинский исходник асишник, но не получается его запустить
 

whyega52

Гений, миллионер, плейбой, долбаеб
Модератор
2,798
2,659
Всем привет! Подскажите пожалуйста, пишу 1 плагин и пытаюсь разобраться с чего начать.


Ссылка на готовый проект с плагином ASI: https://www.blast.hk/threads/219800/
Взял за основу его. Что делать дальше не пойму.
Как обратиться к адресам и заменить их на свое, и чтобы игра закрывалась если не совпадает ип
Я так понял это момент подключения серверу, как сделать чтобы вместо SAMP Started - писало мой текст, видел украинский исходник асишник, но не получается его запустить
Для начала укажи, под какую версию сампа ты делаешь плагин (можно и под несколько, но если делаешь клиент проекта, то зачастую лучше остановиться на 1, ибо расширение функционала будет боль)
Чтобы заменить надпись в чате, тебе надо найти, где samp.dll берет указатель на эту надпись. На R3 это 0xB7C5 (команда push состоит из 5 байт, первый обозначает саму команду, а остальные адрес строки, поэтому 0xB7C4 + 0x1)
1728827852170.png
Для работы с памятью я буду использовать memwrapper:
C++:
// будем использовать функцию, которая будет копировать строку из плагина в адресное пространство gta_sa.exe
// это поможет в случае выгрузки плагина не крашнуть игру
void write_allocate_string(std::string str, std::uintptr_t address) {
  void* allocAddress =
      VirtualAlloc(nullptr, str.size(), MEM_COMMIT, PAGE_READWRITE);
  memcpy(allocAddress, str.c_str(), str.size());
  // при этом, нам никто не мешает использовать сразу запись по адресу нашей строки, находящейся внутри памяти нашего плагина
  memwrapper::write_memory(address, allocAddress);
}

auto samp_base =
        reinterpret_cast<std::uintptr_t>(GetModuleHandleA("samp.dll"));
write_allocate_string(samp_base + 0xB7C5, "Моя пиздатая надпись1336");

Для проверки на айпи сервера тебе надо ставить хук на какую-то из функций сампа, отвечающую за коннект, к примеру RakClient::Connect (r3: 0x339F0). Для этого можешь использовать библиотеки по типу kthook
 

VanikMelkin

Новичок
9
4
Для начала укажи, под какую версию сампа ты делаешь плагин (можно и под несколько, но если делаешь клиент проекта, то зачастую лучше остановиться на 1, ибо расширение функционала будет боль)
Чтобы заменить надпись в чате, тебе надо найти, где samp.dll берет указатель на эту надпись. На R3 это 0xB7C5 (команда push состоит из 5 байт, первый обозначает саму команду, а остальные адрес строки, поэтому 0xB7C4 + 0x1)Посмотреть вложение 254083 Для работы с памятью я буду использовать memwrapper:
C++:
// будем использовать функцию, которая будет копировать строку из плагина в адресное пространство gta_sa.exe
// это поможет в случае выгрузки плагина не крашнуть игру
void write_allocate_string(std::string str, std::uintptr_t address) {
  void* allocAddress =
      VirtualAlloc(nullptr, str.size(), MEM_COMMIT, PAGE_READWRITE);
  memcpy(allocAddress, str.c_str(), str.size());
  // при этом, нам никто не мешает использовать сразу запись по адресу нашей строки, находящейся внутри памяти нашего плагина
  memwrapper::write_memory(address, allocAddress);
}

auto samp_base =
        reinterpret_cast<std::uintptr_t>(GetModuleHandleA("samp.dll"));
write_allocate_string(samp_base + 0xB7C5, "Моя пиздатая надпись1336");

Для проверки на айпи сервера тебе надо ставить хук на какую-то из функций сампа, отвечающую за коннект, к примеру RakClient::Connect (r3: 0x339F0). Для этого можешь использовать библиотеки по типу kthook
браток, а как еще можно находить адреса ?) оффсеты ?