ники

Tema05

Известный
Автор темы
1,471
435
Версия MoonLoader
.026-beta
Подскажите хук для изменения ников над головой игроков.
 
Решение
R1 - 0x70F4E
R3 - 0x74E3F
Длина: 5 байт.
Аргументы:
  1. буффер, куда буде записан ник, после вызова оригинального кода
  2. формат ника
  3. ник
  4. id
Оригинальный код R1: E8 A0 4C 04 00
Оригинальный код R3: E8 4F 2D 05 00
Инструкция: call
Тип вызова оригинального кода (для враппера): __cdecl
Оригинальная функция (тоже для враппера): sprintf

C++:
#include <cstring>

namespace {
    const auto HOOK_ADDR = 0x70F4E; // R1
    const auto HOOK_LEN = 5;
    const auto HOOK_CODE = "\xE8\xA0\x4C\x04\x00"; // R1
    
    auto __cdecl name_hook(const char *buf, const char *fmt, const char *name, const int ID){
        if (!strcmp(name, "Dapo_Show")){
            return sprintf(buf, "Пидарас_Пидарасина {FFFFFFFF}(%d)", ID);
        }...

Tema05

Известный
Автор темы
1,471
435
да

для R3 ноп по адресу 0x1D902 на 6 байт. Для R1 попробуй адрес 0x275C32, но не факт, что это правильный адрес
Очень извиняюсь за глупый вопрос, но что значит 'ноп по адресу 0x1D902 на 6 байт'. Можно пожалуйста кодом.
 

damag

Женюсь на официантке в моем любимом баре
Проверенный
1,152
1,199
Последнее редактирование:
  • Нравится
Реакции: Tema05

Tema05

Известный
Автор темы
1,471
435
C++:
auto samp = (DWORD)GetModuleHandleA("samp");
memset((void*)(samp + 0x1D902), 0x90, 6);
Может я неправильно использую но больше 24 символов он не устанавливает.
Lua:
local memory = require "memory"

function main()
    if not isSampLoaded() or not isSampfuncsLoaded() then return end
    while not isSampAvailable() do wait(0) end
    local samp = getModuleHandle("samp.dll")
    memory.write(samp + 0x275C32, 0x90, 6, true)
    function EmulateRPC(id, nick)
        bs = raknetNewBitStream()
        raknetBitStreamWriteInt16(bs, id)
        raknetBitStreamWriteInt8(bs, #nick)
        raknetBitStreamWriteString(bs, nick)
        raknetBitStreamWriteInt8(bs, 1)
        raknetEmulRpcReceiveBitStream(11, bs)
        raknetDeleteBitStream(bs)
    end
    --22 id это я ввёл руками id ближайшего игрока чтобы на нём протестить.
    EmulateRPC(22, "{3399FF}[LH] {FFFFFF}tes") --тут 24 символа и всё работает
    --EmulateRPC(22, "{3399FF}[LH] {FFFFFF}test")  тут 25 символов и не работает
end
 

SR_team

like pancake
BH Team
4,804
6,475
Может я неправильно использую но больше 24 символов он не устанавливает.
Lua:
local memory = require "memory"

function main()
    if not isSampLoaded() or not isSampfuncsLoaded() then return end
    while not isSampAvailable() do wait(0) end
    local samp = getModuleHandle("samp.dll")
    memory.write(samp + 0x275C32, 0x90, 6, true)
    function EmulateRPC(id, nick)
        bs = raknetNewBitStream()
        raknetBitStreamWriteInt16(bs, id)
        raknetBitStreamWriteInt8(bs, #nick)
        raknetBitStreamWriteString(bs, nick)
        raknetBitStreamWriteInt8(bs, 1)
        raknetEmulRpcReceiveBitStream(11, bs)
        raknetDeleteBitStream(bs)
    end
    --22 id это я ввёл руками id ближайшего игрока чтобы на нём протестить.
    EmulateRPC(22, "{3399FF}[LH] {FFFFFF}tes") --тут 24 символа и всё работает
    --EmulateRPC(22, "{3399FF}[LH] {FFFFFF}test")  тут 25 символов и не работает
end
Я тебе сразу сказал, что для r1 адрес может быть не правильным. В r1 рпц закриптованы. Просто используй хук, который я тебе привел еще во 2 посте
 
  • Нравится
Реакции: Tema05

Tema05

Известный
Автор темы
1,471
435
Я тебе сразу сказал, что для r1 адрес может быть не правильным. В r1 рпц закриптованы. Просто используй хук, который я тебе привел еще во 2 посте
Если бы я знаю как этот хук можно в lua перевести :(