Отправка CEF

Wycmpblu

Известный
Автор темы
143
31
Версия MoonLoader
.026-beta
Можно ли как-то при отправке пакета вида:
Код:
miniGame.DebugKeyID|77|79|false
чтобы он заменялся на пакет:
Код:
miniGame.DebugKeyID|79|79|true
и отправлялся вместо первого (то есть чтобы первое число заменялось вторым с true)
надеюсь понятно объяснил😆
 

why ega

РП игрок
Модератор
2,539
2,231
Можно ли как-то при отправке пакета вида:
Код:
miniGame.DebugKeyID|77|79|false
чтобы он заменялся на пакет:
Код:
miniGame.DebugKeyID|79|79|true
и отправлялся вместо первого (то есть чтобы первое число заменялось вторым с true)
надеюсь понятно объяснил😆
Скинь полные данные пакета (байтами)
 

Wycmpblu

Известный
Автор темы
143
31
Скинь полные данные пакета (байтами)
А где их взять? Я это получил с помощью этой библиотеки и демо cef:

Скинь полные данные пакета (байтами)
Помоги пж. Как получить байты отравленного пакета. Я слишком тупой(
 
Последнее редактирование:

why ega

РП игрок
Модератор
2,539
2,231
А где их взять? Я это получил с помощью этой библиотеки и демо cef:


Помоги пж. Как получить байты отравленного пакета. Я слишком тупой(
Lua:
addEventHandler("onSendPacket", function(id, bs)
    local bytes = {}
    local length = raknetBitStreamGetNumberOfBytesUsed()
    for i = 1, length do
        table.insert(bytes, raknetBitStreamReadInt8())
    end
    print("BYTES:", table.concat(bytes, ", "))
end)
 

Wycmpblu

Известный
Автор темы
143
31
что-то похоже на это
Код:
220, 18, 30, 0, 0, 0, 109, 105, 110, 105, 71, 97, 109, 101, 46, 68, 101, 98, 117, 103, 75, 101, 121, 73, 68, 124, 55, 51, 124, 55, 51, 124, 116, 114, 117, 101, 0, 0, 0, 0
Это если тру.
Это если false:
Код:
220, 18, 31, 0, 0, 0, 109, 105, 110, 105, 71, 97, 109, 101, 46, 68, 101, 98, 117, 103, 75, 101, 121, 73, 68, 124, 56, 51, 124, 56, 53, 124, 102, 97, 108, 115, 101, 0, 0, 0, 0
 
Последнее редактирование:

Vintik

Мечтатель
Проверенный
1,467
916
1711037391768.png
То есть мы взяли каждый байт, перевели его в соответствующий этому числовому коду символ и вывели.
Первые 6 символов (220, 18, 30, 0, 0, 0), видимо, всегда одинаковые. Понятия не имею что они означают.
А дальше у нас идёт строка вида: miniGame.DebugKeyID|73|73|true
Ты хочешь, чтобы 1е число заменялось на 2е. А в конце false на true.

Lua:
addEventHandler("onSendPacket", function(id, bs)
    -- читаем по 1 байту
    local bytes = {}
    local length = raknetBitStreamGetNumberOfBytesUsed(bs)
    for i = 1, length do
        table.insert(bytes, raknetBitStreamReadInt8(bs))
    end
    -- если первые 6 байт - наши
    local is_cef = true
    local first_bytes = { 220, 18, 30, 0, 0, 0 }
    for i = 1, 6 do
        if bytes[i] ~= first_bytes[i] then
            is_cef = false
            break
        end
    end
    -- если это CEF RPC
    if is_cef then
        -- у символа "|" числовой код 124
        local start -- символ "|" перед первым числом
        for i = 7, length do
            if bytes[i] == 124 then
                start = i
                break
            end
        end
        local medium -- символ "|" между числами
        for i = start + 1, length do
            if bytes[i] == 124 then
                medium = i
                break
            end
        end
        local our_second_number = {}
        local finish -- символ "|" после второго числа
        for i = medium + 1, length do
            if bytes[i] == 124 then
                finish = i
                break
            else
                table.insert(our_second_number, bytes[i]) -- записываем второе число
            end
        end
        -- а теперь вставляем текст "miniGame.DebugKeyID|" (и первые 6 байт)
        local new_bytes = { 220, 18, 30, 0, 0, 0,  109, 105, 110, 105, 71, 97, 109, 101, 46, 68, 101, 98, 117, 103, 75, 101, 121, 73, 68, 124 }
        -- добавляем к нему второе число
        for i = 1, #our_second_number do
            table.insert(new_bytes, our_second_number[i])
        end
        -- добавляем разделитель между числами "|"
        table.insert(new_bytes, 124)
        -- добавляем второе число еще раз
        for i = 1, #our_second_number do
            table.insert(new_bytes, our_second_number[i])
        end
        -- и наконец добавляем "|true" (там еще в конце 4 нулевых символа)
        local bytes_end = { 124, 116, 114, 117, 101, 0, 0, 0, 0 }
        for i = 1, #bytes_end do
            table.insert(new_bytes, bytes_end[i])
        end
        -- и теперь этот пакет надо отправить
        local new_bs = raknetNewBitStream()
        for i = 1, #new_bytes do
            raknetBitStreamWriteInt8(new_bs, new_bytes[i])
        end
        return { id, new_bs }
    end
end)
Со строкой, конечно, дикий говнокод, но я не умею работать с регулярками(
 
Последнее редактирование:
  • Bug
Реакции: atomlin

atomlin

Известный
579
380
То есть мы взяли каждый байт, перевели его в соответствующий этому числовому коду символ и вывели.
Первые 6 символов (220, 18, 30, 0, 0, 0), видимо, всегда одинаковые. Понятия не имею что они означают.
А дальше у нас идёт строка вида: miniGame.DebugKeyID|73|73|true
Ты хочешь, чтобы 1е число заменялось на 2е. А в конце false на true.

Lua:
addEventHandler("onSendPacket", function(id, bs)
    -- читаем по 1 байту
    local bytes = {}
    local length = raknetBitStreamGetNumberOfBytesUsed(bs)
    for i = 1, length do
        table.insert(bytes, raknetBitStreamReadInt8(bs))
    end
    -- если первые 6 байт - наши
    local is_cef = true
    local first_bytes = { 220, 18, 30, 0, 0, 0 }
    for i = 1, 6 do
        if bytes[i] ~= first_bytes[i] then
            is_cef = false
            break
        end
    end
    -- если это CEF RPC
    if is_cef then
        -- у символа "|" числовой код 124
        local start -- символ "|" перед первым числом
        for i = 7, length do
            if bytes[i] == 124 then
                start = i
                break
            end
        end
        local medium -- символ "|" между числами
        for i = start + 1, length do
            if bytes[i] == 124 then
                medium = i
                break
            end
        end
        local our_second_number = {}
        local finish -- символ "|" после второго числа
        for i = medium + 1, length do
            if bytes[i] == 124 then
                finish = i
                break
            else
                table.insert(our_second_number, bytes[i]) -- записываем второе число
            end
        end
        -- а теперь вставляем текст "miniGame.DebugKeyID|"
        local new_bytes = { 109, 105, 110, 105, 71, 97, 109, 101, 46, 68, 101, 98, 117, 103, 75, 101, 121, 73, 68, 124 }
        -- добавляем к нему второе число
        for i = 1, #our_second_number do
            table.insert(new_bytes, our_second_number[i])
        end
        -- добавляем разделитель между числами "|"
        table.insert(new_bytes, 124)
        -- добавляем второе число еще раз
        for i = 1, #our_second_number do
            table.insert(new_bytes, our_second_number[i])
        end
        -- и наконец добавляем "|true" (там еще в конце 4 нулевых символа)
        local bytes_end = { 124, 116, 114, 117, 101, 0, 0, 0, 0 }
        for i = 1, #bytes_end do
            table.insert(new_bytes, bytes_end[i])
        end
        -- и теперь этот пакет надо отправить
        local new_bs = raknetNewBitStream()
        for i = 1, #new_bytes do
            raknetBitStreamWriteInt8(bs, new_bytes[i])
        end
        return { id, new_bs }
    end
end)
Со строкой, конечно, дикий говнокод, но я не умею работать с регулярками(
Lua:
function onSendPacket(ID, BS)
    if(ID == 220) then
        raknetBitStreamIgnoreBits(BS, 8)
        if(raknetBitStreamReadInt8(BS) == 18) then
            local STRING = raknetBitStreamReadString(BS, raknetBitStreamReadInt32(BS))
            if(STRING:find("miniGame.DebugKeyID|%d+|%d+|false")) then
                local PERFECT_VALUE = STRING:match("miniGame%.DebugKeyID|(%d+)|%d|false")
              
                local BITSTREAM = raknetNewBitStream()
                raknetBitStreamWriteInt8(BITSTREAM, 220)
                raknetBitStreamWriteInt8(BITSTREAM, 18)
                raknetBitStreamWriteInt32(BITSTREAM, string.len(string.format("miniGame.DebugKeyID|%d|%d|true", PERFECT_VALUE)))
                raknetBitStreamWriteString(BITSTREAM, string.format("miniGame.DebugKeyID|%d|%d|true", PERFECT_VALUE))
                raknetBitStreamWriteInt32(BITSTREAM, 0)
                raknetSendBitStreamEx(BITSTREAM, 1, 7, 1)
                raknetDeleteBitStream(BITSTREAM)
              
                return false
            end
        end
    end
end
Ну и лучше использовать готовые решения для перевода decimal to string (https://onlinestringtools.com/convert-decimal-to-string)
 
  • Нравится
Реакции: Vintik

wojciech?

Известный
206
120
Можно ли как-то при отправке пакета вида:
Код:
miniGame.DebugKeyID|77|79|false
чтобы он заменялся на пакет:
Код:
miniGame.DebugKeyID|79|79|true
и отправлялся вместо первого (то есть чтобы первое число заменялось вторым с true)
надеюсь понятно объяснил😆
этот cef обновляется на стороне клиента, то есть при отправке пакетов ты не увидишь изменений, но сервер их засчитает
 

why ega

РП игрок
Модератор
2,539
2,231
Первые 6 символов (220, 18, 30, 0, 0, 0), видимо, всегда одинаковые. Понятия не имею что они означают.
220 - айди пакета
18 - айди события, чтобы удобнее было отличать их на лаунчере
30, 0, 0, 0 - длина строчки
 
  • Нравится
Реакции: Vintik