Вопрос насчет обхода, стринг в шестнадцатеричные значения, загадочный RPC 222

Iskon

Участник
Автор темы
111
19
Версия MoonLoader
.027.0-preview
Всем привет. Недавно начал изучать неактуальные скрипты, по типу обходов для мобильного проекта. Суть скрипта в том, что скрипт дает возможность зайти в аккаунт с ПК. В принципе все понятно и логично, но есть вещи, которыми я задаюсь вопросом.
Весь код обхода(Первый скрипт):
script_name('Mordor Bypass')
script_version('2.2-FINAL')
script_author('ValarDahaelis')
local sampev = require('lib.samp.events')

local dat = {0xDE, 0xC2, 0x17, 0x5, 0x17, 0x17, 0x5, 0x36, 0x34, 0xB1, 0x23, 0xAA, 0x20, 0xA9, 0xA0, 0x97, 0x39, 0xB7, 0x85, 0x36, 0x34, 0xB1, 0x29, 0xA0, 0xA6, 0xA8, 0x17, 0x39, 0xB7, 0x80, 0x29, 0xA1, 0xAA, 0x2B,
                    0xA7, 0x97, 0x39, 0xB7, 0x85, 0x36, 0x34, 0xB1, 0x31, 0x30, 0xB9, 0xB9, 0x97, 0x39, 0xB7, 0x85, 0x36, 0x34, 0xB1, 0x39, 0xB0, 0xB6, 0xB8, 0x27, 0xA7, 0x22, 0x97, 0x39, 0xB7, 0x85, 0x36, 0x34, 0xB1, 0x2A,
                    0x37, 0xBA, 0xB1, 0xB4, 0x29, 0xB2, 0xB7, 0x39, 0xB2, 0xA9, 0xA2, 0x25, 0x97, 0x39, 0xB7, 0x85, 0x36, 0x34, 0xB1, 0x24, 0xB6, 0xB6, 0xA2, 0xB6, 0xBA, 0xB6, 0x30, 0xBA, 0x37, 0xB9, 0x25, 0x27, 0xA7, 0x22,
                    0x97, 0x39, 0xB7, 0x85, 0x36, 0x34, 0xB1, 0x23, 0xAA, 0x20, 0xA9, 0xA0, 0xA7, 0xA7, 0x22, 0x97, 0x39, 0xB7, 0x85, 0x36, 0x34, 0xB1, 0x29, 0xA1, 0xA7, 0xA7, 0x22, 0x97, 0x39, 0xB7, 0x85, 0x36, 0x0}

                    function main()
    while not isSampAvailable() or not isSampfuncsLoaded() do wait(0) end
    local ip, port = sampGetCurrentServerAddress()

    sampAddChatMessage('{BE2D2D}Обход для Mordor RP v2.2-FINAL загружен!', -1)
    local res, id = sampGetPlayerIdByCharHandle(PLAYER_PED)
    while true do
        wait(0)
    end
end


function sampev.onSendClientJoin(version, mod, nickname, challengeResponse, joinAuthKey, clientVer, unknown)
    local xui = raknetNewBitStream()
    sampAddChatMessage('{BE2D2D}[Mordor] {ffffff}Начнаем обходить...', -1)
    raknetBitStreamWriteInt32(xui, 4057)
    raknetBitStreamWriteInt8(xui, 1)
    raknetBitStreamWriteInt8(xui, nickname:len())
    raknetBitStreamWriteString(xui, nickname)
    raknetBitStreamWriteInt32(xui, challengeResponse)
    raknetBitStreamWriteInt8(xui, 43)
    raknetBitStreamWriteString(xui, '10EF75E3F7A702B75F29D501677C33B6B4EFA8CA999')
    raknetBitStreamWriteInt8(xui, clientVer:len())
    raknetBitStreamWriteString(xui, clientVer)
    raknetBitStreamWriteInt8(xui, 12)
    raknetBitStreamWriteString(xui, "sys108rev100")
    raknetSendRpcEx(25, xui, 1, 8, 0, false)
    raknetDeleteBitStream(xui)
    return false
end

-- sys108rev100
function onReceiveRpc(id, bitStream)
    if id == 222 then
        sampAddChatMessage('{BE2D2D}[Mordor] {ffffff}Обходим...', -1)
        local xui = raknetNewBitStream()
        for i = 1, 135 do
            raknetBitStreamWriteInt8(xui, dat[i])
        end
        raknetSendBitStreamEx(xui, 1, 8, 0)
        raknetDeleteBitStream(xui)
        sampAddChatMessage('{BE2D2D}[Mordor] {ffffff}Обошли', -1)
    end
end

function onSendRpc(id, bitStream, priority, reliability, orderingChannel, shiftTs)
    if id == 103 then
        local xui = raknetNewBitStream()
        sampAddChatMessage('{BE2D2D}[Mordor] {ffffff}Ещё раз обходим...', -1)
        raknetBitStreamWriteInt8(xui, 72)
        raknetBitStreamWriteInt32(xui, 388)
        raknetBitStreamWriteInt16(xui, 0)
        raknetSendRpcEx(103, xui, 1, 9, 0, false)
        raknetDeleteBitStream(xui)
        lua_thread.create(function()
            wait(10000)
            sampAddChatMessage('{BE2D2D}[Mordor] {ffffff}Обход v2.2-FINAL сработал!', -1)
            sampAddChatMessage('{BE2D2D}[Mordor] {ffffff}Обход создан ValarDahaelis', -1)
            sampAddChatMessage('{BE2D2D}[Mordor] {ffffff}Официальная тема скрипта: blast.hk/threads/95285', -1)
        end)
        return false
    end
end
Весь кода второго обхода:
require "lib.sampfuncs"
require "lib.moonloader"

local event = require('lib.samp.events')
function main()
    if not isSampfuncsLoaded() or not isSampLoaded() then return end
    while not isSampAvailable() do wait(100) end
    sampAddChatMessage('{000FF}Oбход загружен', -1)
    while true do
    wait(0)
    end
end

function event.onSendClientJoin(version, mod, nickname, challengeResponse, joinAuthKey, clientVer, unknown)
    ip, port = sampGetCurrentServerAddress()
    if ip == "95.181.158.44" or ip == "95.181.158.50" or ip == "95.181.158.47" or ip == "95.181.158.42" or ip:find("mordor") then
        local bs = raknetNewBitStream()
        raknetBitStreamWriteInt32(bs, 4057)
        raknetBitStreamWriteInt8(bs, 1)
        nicknameLen = string.len(nickname)
        raknetBitStreamWriteInt8(bs, nicknameLen)
        raknetBitStreamWriteString(bs, nickname)
        raknetBitStreamWriteInt32(bs, challengeResponse)
        raknetBitStreamWriteInt8(bs, 43)
        raknetBitStreamWriteString(bs, "10EF75E3F7A702B75F29D501677C33B6B4EFA8CA999")
        raknetBitStreamWriteInt8(bs, 5)
        raknetBitStreamWriteString(bs, "0.3.7")
        raknetBitStreamWriteInt8(bs, 12)
        raknetBitStreamWriteInt8(bs, 115)
        raknetBitStreamWriteInt8(bs, 121)
        raknetBitStreamWriteInt8(bs, 115)
        raknetBitStreamWriteInt8(bs, 50)
        raknetBitStreamWriteInt8(bs, 48)
        raknetBitStreamWriteInt8(bs, 48)
        raknetBitStreamWriteInt8(bs, 114)
        raknetBitStreamWriteInt8(bs, 101)
        raknetBitStreamWriteInt8(bs, 118)
        raknetBitStreamWriteInt8(bs, 49)
        raknetBitStreamWriteInt8(bs, 48)
        raknetBitStreamWriteInt8(bs, 48)
        raknetSendRpc(25, bs)
        raknetDeleteBitStream(bs)
        local bs = raknetNewBitStream()
        raknetBitStreamWriteInt8(bs, -34)
        raknetBitStreamWriteInt8(bs, -62)
        raknetBitStreamWriteInt8(bs, 5)
        raknetBitStreamWriteInt8(bs, 54)
        raknetBitStreamWriteInt8(bs, 52)
        raknetBitStreamWriteInt8(bs, -79)
        raknetBitStreamWriteInt8(bs, 41)
        raknetBitStreamWriteInt8(bs, -95)
        raknetBitStreamWriteInt8(bs, -96)
        raknetBitStreamWriteInt8(bs, -73)
        raknetBitStreamWriteInt8(bs, 50)
        raknetBitStreamWriteInt8(bs, 23)
        raknetBitStreamWriteInt8(bs, 57)
        raknetBitStreamWriteInt8(bs, -73)
        raknetBitStreamWriteInt8(bs, -123)
        raknetBitStreamWriteInt8(bs, 54)
        raknetBitStreamWriteInt8(bs, 52)
        raknetBitStreamWriteInt8(bs, -79)
        raknetBitStreamWriteInt8(bs, 49)
        raknetBitStreamWriteInt8(bs, 48)
        raknetBitStreamWriteInt8(bs, -71)
        raknetBitStreamWriteInt8(bs, -71)
        raknetBitStreamWriteInt8(bs, -105)
        raknetBitStreamWriteInt8(bs, 57)
        raknetBitStreamWriteInt8(bs, -73)
        raknetBitStreamWriteInt8(bs, -123)
        raknetBitStreamWriteInt8(bs, 54)
        raknetBitStreamWriteInt8(bs, 52)
        raknetBitStreamWriteInt8(bs, -79)
        raknetBitStreamWriteInt8(bs, 57)
        raknetBitStreamWriteInt8(bs, -80)
        raknetBitStreamWriteInt8(bs, -74)
        raknetBitStreamWriteInt8(bs, -72)
        raknetBitStreamWriteInt8(bs, 23)
        raknetBitStreamWriteInt8(bs, 57)
        raknetBitStreamWriteInt8(bs, -73)
        raknetBitStreamWriteInt8(bs, -123)
        raknetBitStreamWriteInt8(bs, 54)
        raknetBitStreamWriteInt8(bs, 52)
        raknetBitStreamWriteInt8(bs, -79)
        raknetBitStreamWriteInt8(bs, 35)
        raknetBitStreamWriteInt8(bs, -86)
        raknetBitStreamWriteInt8(bs, 32)
        raknetBitStreamWriteInt8(bs, -87)
        raknetBitStreamWriteInt8(bs, -96)
        raknetBitStreamWriteInt8(bs, -105)
        raknetBitStreamWriteInt8(bs, 57)
        raknetBitStreamWriteInt8(bs, -73)
        raknetBitStreamWriteInt8(bs, -123)
        raknetBitStreamWriteInt8(bs, 54)
        raknetBitStreamWriteInt8(bs, 52)
        raknetBitStreamWriteInt8(bs, -79)
        raknetBitStreamWriteInt8(bs, 36)
        raknetBitStreamWriteInt8(bs, -74)
        raknetBitStreamWriteInt8(bs, -74)
        raknetBitStreamWriteInt8(bs, -94)
        raknetBitStreamWriteInt8(bs, -74)
        raknetBitStreamWriteInt8(bs, -70)
        raknetBitStreamWriteInt8(bs, -74)
        raknetBitStreamWriteInt8(bs, 48)
        raknetBitStreamWriteInt8(bs, -70)
        raknetBitStreamWriteInt8(bs, 55)
        raknetBitStreamWriteInt8(bs, -71)
        raknetBitStreamWriteInt8(bs, 37)
        raknetBitStreamWriteInt8(bs, 23)
        raknetBitStreamWriteInt8(bs, 57)
        raknetBitStreamWriteInt8(bs, -73)
        raknetBitStreamWriteInt8(bs, -123)
        raknetBitStreamWriteInt8(bs, 23)
        raknetBitStreamWriteInt8(bs, 23)
        raknetBitStreamWriteInt8(bs, 5)
        raknetBitStreamWriteInt8(bs, 54)
        raknetBitStreamWriteInt8(bs, 52)
        raknetBitStreamWriteInt8(bs, -79)
        raknetBitStreamWriteInt8(bs, 42)
        raknetBitStreamWriteInt8(bs, 55)
        raknetBitStreamWriteInt8(bs, -70)
        raknetBitStreamWriteInt8(bs, -79)
        raknetBitStreamWriteInt8(bs, -76)
        raknetBitStreamWriteInt8(bs, 41)
        raknetBitStreamWriteInt8(bs, -78)
        raknetBitStreamWriteInt8(bs, -73)
        raknetBitStreamWriteInt8(bs, 57)
        raknetBitStreamWriteInt8(bs, -78)
        raknetBitStreamWriteInt8(bs, -87)
        raknetBitStreamWriteInt8(bs, -94)
        raknetBitStreamWriteInt8(bs, 37)
        raknetBitStreamWriteInt8(bs, -105)
        raknetBitStreamWriteInt8(bs, 57)
        raknetBitStreamWriteInt8(bs, -73)
        raknetBitStreamWriteInt8(bs, -123)
        raknetBitStreamWriteInt8(bs, 23)
        raknetSendBitStream(bs)
        sampAddChatMessage(string.format("Oбход сработал"), 0x40FF40)
        return false
    else
        return true
    end
end
function event.onSendClientCheckResponse(type, arg, response)
    if (type == 72) and (ip == "95.181.158.44" or ip == "95.181.158.50" or ip == "95.181.158.47" or ip == "95.181.158.42" or ip:find("mordor")) then
        ip, port = sampGetCurrentServerAddress()
        local bs = raknetNewBitStream()
        raknetBitStreamWriteInt8(bs, 72)
        raknetBitStreamWriteInt32(bs, 388)
        raknetBitStreamWriteInt32(bs, 0)
        raknetSendRpc(103, bs)
        raknetDeleteBitStream(bs)
        return false
    else
        return true
    end
end

Два этих скрипта связывает одно - они отправляют пакет массива шестнадцатеричных значений.

Массив:
local dat = {0xDE, 0xC2, 0x17, 0x5, 0x17, 0x17, 0x5, 0x36, 0x34, 0xB1, 0x23, 0xAA, 0x20, 0xA9, 0xA0, 0x97, 0x39, 0xB7, 0x85, 0x36, 0x34, 0xB1, 0x29, 0xA0, 0xA6, 0xA8, 0x17, 0x39, 0xB7, 0x80, 0x29, 0xA1, 0xAA, 0x2B,
                    0xA7, 0x97, 0x39, 0xB7, 0x85, 0x36, 0x34, 0xB1, 0x31, 0x30, 0xB9, 0xB9, 0x97, 0x39, 0xB7, 0x85, 0x36, 0x34, 0xB1, 0x39, 0xB0, 0xB6, 0xB8, 0x27, 0xA7, 0x22, 0x97, 0x39, 0xB7, 0x85, 0x36, 0x34, 0xB1, 0x2A,
                    0x37, 0xBA, 0xB1, 0xB4, 0x29, 0xB2, 0xB7, 0x39, 0xB2, 0xA9, 0xA2, 0x25, 0x97, 0x39, 0xB7, 0x85, 0x36, 0x34, 0xB1, 0x24, 0xB6, 0xB6, 0xA2, 0xB6, 0xBA, 0xB6, 0x30, 0xBA, 0x37, 0xB9, 0x25, 0x27, 0xA7, 0x22,
                    0x97, 0x39, 0xB7, 0x85, 0x36, 0x34, 0xB1, 0x23, 0xAA, 0x20, 0xA9, 0xA0, 0xA7, 0xA7, 0x22, 0x97, 0x39, 0xB7, 0x85, 0x36, 0x34, 0xB1, 0x29, 0xA1, 0xA7, 0xA7, 0x22, 0x97, 0x39, 0xB7, 0x85, 0x36, 0x0}


--второй обход:

        raknetBitStreamWriteInt8(bs, -34)
        raknetBitStreamWriteInt8(bs, -62)
        raknetBitStreamWriteInt8(bs, 5)
        raknetBitStreamWriteInt8(bs, 54)
        raknetBitStreamWriteInt8(bs, 52)
        raknetBitStreamWriteInt8(bs, -79)
        raknetBitStreamWriteInt8(bs, 41)
        raknetBitStreamWriteInt8(bs, -95)
        raknetBitStreamWriteInt8(bs, -96)
        raknetBitStreamWriteInt8(bs, -73)
        raknetBitStreamWriteInt8(bs, 50)
        raknetBitStreamWriteInt8(bs, 23)
        raknetBitStreamWriteInt8(bs, 57)
        raknetBitStreamWriteInt8(bs, -73)
        raknetBitStreamWriteInt8(bs, -123)
        raknetBitStreamWriteInt8(bs, 54)
        raknetBitStreamWriteInt8(bs, 52)
        raknetBitStreamWriteInt8(bs, -79)
        raknetBitStreamWriteInt8(bs, 49)
        raknetBitStreamWriteInt8(bs, 48)
        raknetBitStreamWriteInt8(bs, -71)
        raknetBitStreamWriteInt8(bs, -71)
        raknetBitStreamWriteInt8(bs, -105)
        raknetBitStreamWriteInt8(bs, 57)
        raknetBitStreamWriteInt8(bs, -73)
        raknetBitStreamWriteInt8(bs, -123)
        raknetBitStreamWriteInt8(bs, 54)
        raknetBitStreamWriteInt8(bs, 52)
        raknetBitStreamWriteInt8(bs, -79)
        raknetBitStreamWriteInt8(bs, 57)
        raknetBitStreamWriteInt8(bs, -80)
        raknetBitStreamWriteInt8(bs, -74)
        raknetBitStreamWriteInt8(bs, -72)
        raknetBitStreamWriteInt8(bs, 23)
        raknetBitStreamWriteInt8(bs, 57)
        raknetBitStreamWriteInt8(bs, -73)
        raknetBitStreamWriteInt8(bs, -123)
        raknetBitStreamWriteInt8(bs, 54)
        raknetBitStreamWriteInt8(bs, 52)
        raknetBitStreamWriteInt8(bs, -79)
        raknetBitStreamWriteInt8(bs, 35)
        raknetBitStreamWriteInt8(bs, -86)
        raknetBitStreamWriteInt8(bs, 32)
        raknetBitStreamWriteInt8(bs, -87)
        raknetBitStreamWriteInt8(bs, -96)
        raknetBitStreamWriteInt8(bs, -105)
        raknetBitStreamWriteInt8(bs, 57)
        raknetBitStreamWriteInt8(bs, -73)
        raknetBitStreamWriteInt8(bs, -123)
        raknetBitStreamWriteInt8(bs, 54)
        raknetBitStreamWriteInt8(bs, 52)
        raknetBitStreamWriteInt8(bs, -79)
        raknetBitStreamWriteInt8(bs, 36)
        raknetBitStreamWriteInt8(bs, -74)
        raknetBitStreamWriteInt8(bs, -74)
        raknetBitStreamWriteInt8(bs, -94)
        raknetBitStreamWriteInt8(bs, -74)
        raknetBitStreamWriteInt8(bs, -70)
        raknetBitStreamWriteInt8(bs, -74)
        raknetBitStreamWriteInt8(bs, 48)
        raknetBitStreamWriteInt8(bs, -70)
        raknetBitStreamWriteInt8(bs, 55)
        raknetBitStreamWriteInt8(bs, -71)
        raknetBitStreamWriteInt8(bs, 37)
        raknetBitStreamWriteInt8(bs, 23)
        raknetBitStreamWriteInt8(bs, 57)
        raknetBitStreamWriteInt8(bs, -73)
        raknetBitStreamWriteInt8(bs, -123)
        raknetBitStreamWriteInt8(bs, 23)
        raknetBitStreamWriteInt8(bs, 23)
        raknetBitStreamWriteInt8(bs, 5)
        raknetBitStreamWriteInt8(bs, 54)
        raknetBitStreamWriteInt8(bs, 52)
        raknetBitStreamWriteInt8(bs, -79)
        raknetBitStreamWriteInt8(bs, 42)
        raknetBitStreamWriteInt8(bs, 55)
        raknetBitStreamWriteInt8(bs, -70)
        raknetBitStreamWriteInt8(bs, -79)
        raknetBitStreamWriteInt8(bs, -76)
        raknetBitStreamWriteInt8(bs, 41)
        raknetBitStreamWriteInt8(bs, -78)
        raknetBitStreamWriteInt8(bs, -73)
        raknetBitStreamWriteInt8(bs, 57)
        raknetBitStreamWriteInt8(bs, -78)
        raknetBitStreamWriteInt8(bs, -87)
        raknetBitStreamWriteInt8(bs, -94)
        raknetBitStreamWriteInt8(bs, 37)
        raknetBitStreamWriteInt8(bs, -105)
        raknetBitStreamWriteInt8(bs, 57)
        raknetBitStreamWriteInt8(bs, -73)
        raknetBitStreamWriteInt8(bs, -123)
        raknetBitStreamWriteInt8(bs, 23)

--разработчик второго обхода решил сделать так, извиняюсь

Я долгое время ломал голову, зачем и почему он решил отправить рандомные цифры, и кажется, я понял, но не до конца.
Как я понял, при авторизации, скрипт подменяет значение joinAuthKey на '10EF75E3F7A702B75F29D501677C33B6B4EFA8CA999'. А массивы - это как раз-таки этот же joinAuthKey, но в шестнад. значении. Но главный вопрос - зачем эти скрипты отправляют эти массивы при попытке обхода? Я для теста убирал логику отправки, и ничего не менялось.
Так же, каким образом человек смог закодировать строку '10EF75E3F7A702B75F29D501677C33B6B4EFA8CA999' в шеснад. значения. Я просмотрел множество сайтов, там нельзя получить именно такой вид значений, как на первом обходе.
Так же при попытке обхода, скрипт подменяет challengeResponse2 на строку 'sys108rev100', что на удивление, дает хоть какие-то результаты. При входе на сервер пишет, что установлен старый клиент, но каким образом эта строка дает серверу понять, что я не с ПК, но у меня установлен старый клиент. Обычно, клиент отправляет одинаковые цифры в challengeResponse2 как в первом challengeResponse, но никак не строку.

Возвращаюсь к вопросу с декодировке шестнад. значений во втором обходе, а именно здесь:

Тест 'sys108rev100' в ASCII:
raknetBitStreamWriteInt8(bs, 115)
raknetBitStreamWriteInt8(bs, 121)
raknetBitStreamWriteInt8(bs, 115)
raknetBitStreamWriteInt8(bs, 49)
raknetBitStreamWriteInt8(bs, 48)
raknetBitStreamWriteInt8(bs, 56)
raknetBitStreamWriteInt8(bs, 114)
raknetBitStreamWriteInt8(bs, 101)
raknetBitStreamWriteInt8(bs, 118)
raknetBitStreamWriteInt8(bs, 49)
raknetBitStreamWriteInt8(bs, 48)
raknetBitStreamWriteInt8(bs, 48)
В этом участке коде я понял, что разработчик обхода решил отправить строку 'sys108rev100' в ASCII. Но не понимаю одного - почему он решил отправить этот РПС пакет именно таким образом, а не обычной строкой, ведь результат - тот же самый. Я проверял.

Предпоследний вопрос, который мне не дает нормально спать:
В первым обходе есть такой интересный участок кода:

onReceiveRpc:
function onReceiveRpc(id, bitStream)
    if id == 222 then
        sampAddChatMessage('{BE2D2D}[Mordor] {ffffff}Обходим...', -1)
        local xui = raknetNewBitStream()
        for i = 1, 135 do
            raknetBitStreamWriteInt8(xui, dat[i])
        end
        raknetSendBitStreamEx(xui, 1, 8, 0)
        raknetDeleteBitStream(xui)
        sampAddChatMessage('{BE2D2D}[Mordor] {ffffff}Обошли', -1)
    end
end

Здесь в принципе все понятно, но я НИГДЕ НЕ НАШЕЛ ИНФОРМАЦИИ ОБ RPC 222. Я обыскал весь интернет от и до, даже в игре проверял, какие RPC пакеты отправляет мне сервер, и этого загадочного 222-го RPC нигде нет. И это не может быть ошибкой разработчика, на то есть 2 причины.

1 = этот обход когда-то работал, пока его не пофиксили;
2 = на форуме есть еще одна тема, где человек принимал этот загадочный RPC. Ссылка

Последний вопрос:
В двух обходах есть такой участок кода:

Участок кода с RPC 103:
function onSendRpc(id, bitStream, priority, reliability, orderingChannel, shiftTs)
    if id == 103 then
        local xui = raknetNewBitStream()
        sampAddChatMessage('{BE2D2D}[Mordor] {ffffff}Ещё раз обходим...', -1)
        raknetBitStreamWriteInt8(xui, 72)
        raknetBitStreamWriteInt32(xui, 388)
        raknetBitStreamWriteInt16(xui, 0)
        raknetSendRpcEx(103, xui, 1, 9, 0, false)
        raknetDeleteBitStream(xui)
        lua_thread.create(function()
            wait(10000)
            sampAddChatMessage('{BE2D2D}[Mordor] {ffffff}Обход v2.2-FINAL сработал!', -1)
            sampAddChatMessage('{BE2D2D}[Mordor] {ffffff}Обход создан ValarDahaelis', -1)
            sampAddChatMessage('{BE2D2D}[Mordor] {ffffff}Официальная тема скрипта: blast.hk/threads/95285', -1)
        end)
        return false
    end
end
В принципе все понятно, человек подменяет битстрим RPC 'ClientCheck'
Но, он записывает значение 388, во второй параметр битСтрима UINT32 address. Зачем и главное почему? Ведь клиент отправляет значение, которое меняется с каждым перезаходом в игру. Проанализировав отправляемые значения, я пришел к выводу, что чем больше прошло с рестарта сервера, тем больше отправляемое значение.
Вот список, который я ввел в течение дня:

Cписок:
-- 72 86376263 0
-- 72 86558730 0
-- 72 86826894 0
-- 72 86847893 0
-- 72 86924920 0
-- 72 86984796 0
-- 72 87039860 0
-- 87039860
-- 72 87353986 0
-- 72 87665592 0
-- 72 88212382 0 0
-- 72 88247980 0 0
-- 72 88267847 0 0
-- 72 91975959 0 0
-- 72 235692928 0 0 | Sat Jan  6 09:24:40 2024
Как вы видите, чем больше времени прошло, тем больше значение. Это какой-то отсчет с рестарта, но в обходах отправляется значение 388. Зачем :/
Пожалуйста, не бейте сильно, что задал столько вопросов, но насчет этого катастрофически мало информации, и я устал гадать(
 
  • Эм
Реакции: atomlin
Решение
"В этом участке коде я понял, что разработчик обхода решил отправить строку'sys108rev100' в ASCII. Но не понимаю одного - почему он решил отправить этот РПС пакет именно таким образом, а не обычной строкой, ведь результат - тот же самый. Я проверял."
>> Нет большой разницы как ты это отправишь, просто так захотел автор

"В принципе все понятно, человек подменяет битстрим RPC 'ClientCheck'
Но, он записывает значение 388, во второй параметр битСтрима UINT32 address. Зачем и главное почему? Ведь клиент отправляет значение, которое меняется с каждым перезаходом в игру. Проанализировав отправляемые значения, я пришел к выводу, что чем больше прошло с рестарта сервера, тем больше отправляемое значение.
"...

waflya

Потрачен
12
1
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Всем привет. Недавно начал изучать неактуальные скрипты, по типу обходов для мобильного проекта. Суть скрипта в том, что скрипт дает возможность зайти в аккаунт с ПК. В принципе все понятно и логично, но есть вещи, которыми я задаюсь вопросом.
Весь код обхода(Первый скрипт):
script_name('Mordor Bypass')
script_version('2.2-FINAL')
script_author('ValarDahaelis')
local sampev = require('lib.samp.events')

local dat = {0xDE, 0xC2, 0x17, 0x5, 0x17, 0x17, 0x5, 0x36, 0x34, 0xB1, 0x23, 0xAA, 0x20, 0xA9, 0xA0, 0x97, 0x39, 0xB7, 0x85, 0x36, 0x34, 0xB1, 0x29, 0xA0, 0xA6, 0xA8, 0x17, 0x39, 0xB7, 0x80, 0x29, 0xA1, 0xAA, 0x2B,
                    0xA7, 0x97, 0x39, 0xB7, 0x85, 0x36, 0x34, 0xB1, 0x31, 0x30, 0xB9, 0xB9, 0x97, 0x39, 0xB7, 0x85, 0x36, 0x34, 0xB1, 0x39, 0xB0, 0xB6, 0xB8, 0x27, 0xA7, 0x22, 0x97, 0x39, 0xB7, 0x85, 0x36, 0x34, 0xB1, 0x2A,
                    0x37, 0xBA, 0xB1, 0xB4, 0x29, 0xB2, 0xB7, 0x39, 0xB2, 0xA9, 0xA2, 0x25, 0x97, 0x39, 0xB7, 0x85, 0x36, 0x34, 0xB1, 0x24, 0xB6, 0xB6, 0xA2, 0xB6, 0xBA, 0xB6, 0x30, 0xBA, 0x37, 0xB9, 0x25, 0x27, 0xA7, 0x22,
                    0x97, 0x39, 0xB7, 0x85, 0x36, 0x34, 0xB1, 0x23, 0xAA, 0x20, 0xA9, 0xA0, 0xA7, 0xA7, 0x22, 0x97, 0x39, 0xB7, 0x85, 0x36, 0x34, 0xB1, 0x29, 0xA1, 0xA7, 0xA7, 0x22, 0x97, 0x39, 0xB7, 0x85, 0x36, 0x0}

                    function main()
    while not isSampAvailable() or not isSampfuncsLoaded() do wait(0) end
    local ip, port = sampGetCurrentServerAddress()

    sampAddChatMessage('{BE2D2D}Обход для Mordor RP v2.2-FINAL загружен!', -1)
    local res, id = sampGetPlayerIdByCharHandle(PLAYER_PED)
    while true do
        wait(0)
    end
end


function sampev.onSendClientJoin(version, mod, nickname, challengeResponse, joinAuthKey, clientVer, unknown)
    local xui = raknetNewBitStream()
    sampAddChatMessage('{BE2D2D}[Mordor] {ffffff}Начнаем обходить...', -1)
    raknetBitStreamWriteInt32(xui, 4057)
    raknetBitStreamWriteInt8(xui, 1)
    raknetBitStreamWriteInt8(xui, nickname:len())
    raknetBitStreamWriteString(xui, nickname)
    raknetBitStreamWriteInt32(xui, challengeResponse)
    raknetBitStreamWriteInt8(xui, 43)
    raknetBitStreamWriteString(xui, '10EF75E3F7A702B75F29D501677C33B6B4EFA8CA999')
    raknetBitStreamWriteInt8(xui, clientVer:len())
    raknetBitStreamWriteString(xui, clientVer)
    raknetBitStreamWriteInt8(xui, 12)
    raknetBitStreamWriteString(xui, "sys108rev100")
    raknetSendRpcEx(25, xui, 1, 8, 0, false)
    raknetDeleteBitStream(xui)
    return false
end

-- sys108rev100
function onReceiveRpc(id, bitStream)
    if id == 222 then
        sampAddChatMessage('{BE2D2D}[Mordor] {ffffff}Обходим...', -1)
        local xui = raknetNewBitStream()
        for i = 1, 135 do
            raknetBitStreamWriteInt8(xui, dat[i])
        end
        raknetSendBitStreamEx(xui, 1, 8, 0)
        raknetDeleteBitStream(xui)
        sampAddChatMessage('{BE2D2D}[Mordor] {ffffff}Обошли', -1)
    end
end

function onSendRpc(id, bitStream, priority, reliability, orderingChannel, shiftTs)
    if id == 103 then
        local xui = raknetNewBitStream()
        sampAddChatMessage('{BE2D2D}[Mordor] {ffffff}Ещё раз обходим...', -1)
        raknetBitStreamWriteInt8(xui, 72)
        raknetBitStreamWriteInt32(xui, 388)
        raknetBitStreamWriteInt16(xui, 0)
        raknetSendRpcEx(103, xui, 1, 9, 0, false)
        raknetDeleteBitStream(xui)
        lua_thread.create(function()
            wait(10000)
            sampAddChatMessage('{BE2D2D}[Mordor] {ffffff}Обход v2.2-FINAL сработал!', -1)
            sampAddChatMessage('{BE2D2D}[Mordor] {ffffff}Обход создан ValarDahaelis', -1)
            sampAddChatMessage('{BE2D2D}[Mordor] {ffffff}Официальная тема скрипта: blast.hk/threads/95285', -1)
        end)
        return false
    end
end
Весь кода второго обхода:
require "lib.sampfuncs"
require "lib.moonloader"

local event = require('lib.samp.events')
function main()
    if not isSampfuncsLoaded() or not isSampLoaded() then return end
    while not isSampAvailable() do wait(100) end
    sampAddChatMessage('{000FF}Oбход загружен', -1)
    while true do
    wait(0)
    end
end

function event.onSendClientJoin(version, mod, nickname, challengeResponse, joinAuthKey, clientVer, unknown)
    ip, port = sampGetCurrentServerAddress()
    if ip == "95.181.158.44" or ip == "95.181.158.50" or ip == "95.181.158.47" or ip == "95.181.158.42" or ip:find("mordor") then
        local bs = raknetNewBitStream()
        raknetBitStreamWriteInt32(bs, 4057)
        raknetBitStreamWriteInt8(bs, 1)
        nicknameLen = string.len(nickname)
        raknetBitStreamWriteInt8(bs, nicknameLen)
        raknetBitStreamWriteString(bs, nickname)
        raknetBitStreamWriteInt32(bs, challengeResponse)
        raknetBitStreamWriteInt8(bs, 43)
        raknetBitStreamWriteString(bs, "10EF75E3F7A702B75F29D501677C33B6B4EFA8CA999")
        raknetBitStreamWriteInt8(bs, 5)
        raknetBitStreamWriteString(bs, "0.3.7")
        raknetBitStreamWriteInt8(bs, 12)
        raknetBitStreamWriteInt8(bs, 115)
        raknetBitStreamWriteInt8(bs, 121)
        raknetBitStreamWriteInt8(bs, 115)
        raknetBitStreamWriteInt8(bs, 50)
        raknetBitStreamWriteInt8(bs, 48)
        raknetBitStreamWriteInt8(bs, 48)
        raknetBitStreamWriteInt8(bs, 114)
        raknetBitStreamWriteInt8(bs, 101)
        raknetBitStreamWriteInt8(bs, 118)
        raknetBitStreamWriteInt8(bs, 49)
        raknetBitStreamWriteInt8(bs, 48)
        raknetBitStreamWriteInt8(bs, 48)
        raknetSendRpc(25, bs)
        raknetDeleteBitStream(bs)
        local bs = raknetNewBitStream()
        raknetBitStreamWriteInt8(bs, -34)
        raknetBitStreamWriteInt8(bs, -62)
        raknetBitStreamWriteInt8(bs, 5)
        raknetBitStreamWriteInt8(bs, 54)
        raknetBitStreamWriteInt8(bs, 52)
        raknetBitStreamWriteInt8(bs, -79)
        raknetBitStreamWriteInt8(bs, 41)
        raknetBitStreamWriteInt8(bs, -95)
        raknetBitStreamWriteInt8(bs, -96)
        raknetBitStreamWriteInt8(bs, -73)
        raknetBitStreamWriteInt8(bs, 50)
        raknetBitStreamWriteInt8(bs, 23)
        raknetBitStreamWriteInt8(bs, 57)
        raknetBitStreamWriteInt8(bs, -73)
        raknetBitStreamWriteInt8(bs, -123)
        raknetBitStreamWriteInt8(bs, 54)
        raknetBitStreamWriteInt8(bs, 52)
        raknetBitStreamWriteInt8(bs, -79)
        raknetBitStreamWriteInt8(bs, 49)
        raknetBitStreamWriteInt8(bs, 48)
        raknetBitStreamWriteInt8(bs, -71)
        raknetBitStreamWriteInt8(bs, -71)
        raknetBitStreamWriteInt8(bs, -105)
        raknetBitStreamWriteInt8(bs, 57)
        raknetBitStreamWriteInt8(bs, -73)
        raknetBitStreamWriteInt8(bs, -123)
        raknetBitStreamWriteInt8(bs, 54)
        raknetBitStreamWriteInt8(bs, 52)
        raknetBitStreamWriteInt8(bs, -79)
        raknetBitStreamWriteInt8(bs, 57)
        raknetBitStreamWriteInt8(bs, -80)
        raknetBitStreamWriteInt8(bs, -74)
        raknetBitStreamWriteInt8(bs, -72)
        raknetBitStreamWriteInt8(bs, 23)
        raknetBitStreamWriteInt8(bs, 57)
        raknetBitStreamWriteInt8(bs, -73)
        raknetBitStreamWriteInt8(bs, -123)
        raknetBitStreamWriteInt8(bs, 54)
        raknetBitStreamWriteInt8(bs, 52)
        raknetBitStreamWriteInt8(bs, -79)
        raknetBitStreamWriteInt8(bs, 35)
        raknetBitStreamWriteInt8(bs, -86)
        raknetBitStreamWriteInt8(bs, 32)
        raknetBitStreamWriteInt8(bs, -87)
        raknetBitStreamWriteInt8(bs, -96)
        raknetBitStreamWriteInt8(bs, -105)
        raknetBitStreamWriteInt8(bs, 57)
        raknetBitStreamWriteInt8(bs, -73)
        raknetBitStreamWriteInt8(bs, -123)
        raknetBitStreamWriteInt8(bs, 54)
        raknetBitStreamWriteInt8(bs, 52)
        raknetBitStreamWriteInt8(bs, -79)
        raknetBitStreamWriteInt8(bs, 36)
        raknetBitStreamWriteInt8(bs, -74)
        raknetBitStreamWriteInt8(bs, -74)
        raknetBitStreamWriteInt8(bs, -94)
        raknetBitStreamWriteInt8(bs, -74)
        raknetBitStreamWriteInt8(bs, -70)
        raknetBitStreamWriteInt8(bs, -74)
        raknetBitStreamWriteInt8(bs, 48)
        raknetBitStreamWriteInt8(bs, -70)
        raknetBitStreamWriteInt8(bs, 55)
        raknetBitStreamWriteInt8(bs, -71)
        raknetBitStreamWriteInt8(bs, 37)
        raknetBitStreamWriteInt8(bs, 23)
        raknetBitStreamWriteInt8(bs, 57)
        raknetBitStreamWriteInt8(bs, -73)
        raknetBitStreamWriteInt8(bs, -123)
        raknetBitStreamWriteInt8(bs, 23)
        raknetBitStreamWriteInt8(bs, 23)
        raknetBitStreamWriteInt8(bs, 5)
        raknetBitStreamWriteInt8(bs, 54)
        raknetBitStreamWriteInt8(bs, 52)
        raknetBitStreamWriteInt8(bs, -79)
        raknetBitStreamWriteInt8(bs, 42)
        raknetBitStreamWriteInt8(bs, 55)
        raknetBitStreamWriteInt8(bs, -70)
        raknetBitStreamWriteInt8(bs, -79)
        raknetBitStreamWriteInt8(bs, -76)
        raknetBitStreamWriteInt8(bs, 41)
        raknetBitStreamWriteInt8(bs, -78)
        raknetBitStreamWriteInt8(bs, -73)
        raknetBitStreamWriteInt8(bs, 57)
        raknetBitStreamWriteInt8(bs, -78)
        raknetBitStreamWriteInt8(bs, -87)
        raknetBitStreamWriteInt8(bs, -94)
        raknetBitStreamWriteInt8(bs, 37)
        raknetBitStreamWriteInt8(bs, -105)
        raknetBitStreamWriteInt8(bs, 57)
        raknetBitStreamWriteInt8(bs, -73)
        raknetBitStreamWriteInt8(bs, -123)
        raknetBitStreamWriteInt8(bs, 23)
        raknetSendBitStream(bs)
        sampAddChatMessage(string.format("Oбход сработал"), 0x40FF40)
        return false
    else
        return true
    end
end
function event.onSendClientCheckResponse(type, arg, response)
    if (type == 72) and (ip == "95.181.158.44" or ip == "95.181.158.50" or ip == "95.181.158.47" or ip == "95.181.158.42" or ip:find("mordor")) then
        ip, port = sampGetCurrentServerAddress()
        local bs = raknetNewBitStream()
        raknetBitStreamWriteInt8(bs, 72)
        raknetBitStreamWriteInt32(bs, 388)
        raknetBitStreamWriteInt32(bs, 0)
        raknetSendRpc(103, bs)
        raknetDeleteBitStream(bs)
        return false
    else
        return true
    end
end

Два этих скрипта связывает одно - они отправляют пакет массива шестнадцатеричных значений.
Массив:
local dat = {0xDE, 0xC2, 0x17, 0x5, 0x17, 0x17, 0x5, 0x36, 0x34, 0xB1, 0x23, 0xAA, 0x20, 0xA9, 0xA0, 0x97, 0x39, 0xB7, 0x85, 0x36, 0x34, 0xB1, 0x29, 0xA0, 0xA6, 0xA8, 0x17, 0x39, 0xB7, 0x80, 0x29, 0xA1, 0xAA, 0x2B,
                    0xA7, 0x97, 0x39, 0xB7, 0x85, 0x36, 0x34, 0xB1, 0x31, 0x30, 0xB9, 0xB9, 0x97, 0x39, 0xB7, 0x85, 0x36, 0x34, 0xB1, 0x39, 0xB0, 0xB6, 0xB8, 0x27, 0xA7, 0x22, 0x97, 0x39, 0xB7, 0x85, 0x36, 0x34, 0xB1, 0x2A,
                    0x37, 0xBA, 0xB1, 0xB4, 0x29, 0xB2, 0xB7, 0x39, 0xB2, 0xA9, 0xA2, 0x25, 0x97, 0x39, 0xB7, 0x85, 0x36, 0x34, 0xB1, 0x24, 0xB6, 0xB6, 0xA2, 0xB6, 0xBA, 0xB6, 0x30, 0xBA, 0x37, 0xB9, 0x25, 0x27, 0xA7, 0x22,
                    0x97, 0x39, 0xB7, 0x85, 0x36, 0x34, 0xB1, 0x23, 0xAA, 0x20, 0xA9, 0xA0, 0xA7, 0xA7, 0x22, 0x97, 0x39, 0xB7, 0x85, 0x36, 0x34, 0xB1, 0x29, 0xA1, 0xA7, 0xA7, 0x22, 0x97, 0x39, 0xB7, 0x85, 0x36, 0x0}


--второй обход:

        raknetBitStreamWriteInt8(bs, -34)
        raknetBitStreamWriteInt8(bs, -62)
        raknetBitStreamWriteInt8(bs, 5)
        raknetBitStreamWriteInt8(bs, 54)
        raknetBitStreamWriteInt8(bs, 52)
        raknetBitStreamWriteInt8(bs, -79)
        raknetBitStreamWriteInt8(bs, 41)
        raknetBitStreamWriteInt8(bs, -95)
        raknetBitStreamWriteInt8(bs, -96)
        raknetBitStreamWriteInt8(bs, -73)
        raknetBitStreamWriteInt8(bs, 50)
        raknetBitStreamWriteInt8(bs, 23)
        raknetBitStreamWriteInt8(bs, 57)
        raknetBitStreamWriteInt8(bs, -73)
        raknetBitStreamWriteInt8(bs, -123)
        raknetBitStreamWriteInt8(bs, 54)
        raknetBitStreamWriteInt8(bs, 52)
        raknetBitStreamWriteInt8(bs, -79)
        raknetBitStreamWriteInt8(bs, 49)
        raknetBitStreamWriteInt8(bs, 48)
        raknetBitStreamWriteInt8(bs, -71)
        raknetBitStreamWriteInt8(bs, -71)
        raknetBitStreamWriteInt8(bs, -105)
        raknetBitStreamWriteInt8(bs, 57)
        raknetBitStreamWriteInt8(bs, -73)
        raknetBitStreamWriteInt8(bs, -123)
        raknetBitStreamWriteInt8(bs, 54)
        raknetBitStreamWriteInt8(bs, 52)
        raknetBitStreamWriteInt8(bs, -79)
        raknetBitStreamWriteInt8(bs, 57)
        raknetBitStreamWriteInt8(bs, -80)
        raknetBitStreamWriteInt8(bs, -74)
        raknetBitStreamWriteInt8(bs, -72)
        raknetBitStreamWriteInt8(bs, 23)
        raknetBitStreamWriteInt8(bs, 57)
        raknetBitStreamWriteInt8(bs, -73)
        raknetBitStreamWriteInt8(bs, -123)
        raknetBitStreamWriteInt8(bs, 54)
        raknetBitStreamWriteInt8(bs, 52)
        raknetBitStreamWriteInt8(bs, -79)
        raknetBitStreamWriteInt8(bs, 35)
        raknetBitStreamWriteInt8(bs, -86)
        raknetBitStreamWriteInt8(bs, 32)
        raknetBitStreamWriteInt8(bs, -87)
        raknetBitStreamWriteInt8(bs, -96)
        raknetBitStreamWriteInt8(bs, -105)
        raknetBitStreamWriteInt8(bs, 57)
        raknetBitStreamWriteInt8(bs, -73)
        raknetBitStreamWriteInt8(bs, -123)
        raknetBitStreamWriteInt8(bs, 54)
        raknetBitStreamWriteInt8(bs, 52)
        raknetBitStreamWriteInt8(bs, -79)
        raknetBitStreamWriteInt8(bs, 36)
        raknetBitStreamWriteInt8(bs, -74)
        raknetBitStreamWriteInt8(bs, -74)
        raknetBitStreamWriteInt8(bs, -94)
        raknetBitStreamWriteInt8(bs, -74)
        raknetBitStreamWriteInt8(bs, -70)
        raknetBitStreamWriteInt8(bs, -74)
        raknetBitStreamWriteInt8(bs, 48)
        raknetBitStreamWriteInt8(bs, -70)
        raknetBitStreamWriteInt8(bs, 55)
        raknetBitStreamWriteInt8(bs, -71)
        raknetBitStreamWriteInt8(bs, 37)
        raknetBitStreamWriteInt8(bs, 23)
        raknetBitStreamWriteInt8(bs, 57)
        raknetBitStreamWriteInt8(bs, -73)
        raknetBitStreamWriteInt8(bs, -123)
        raknetBitStreamWriteInt8(bs, 23)
        raknetBitStreamWriteInt8(bs, 23)
        raknetBitStreamWriteInt8(bs, 5)
        raknetBitStreamWriteInt8(bs, 54)
        raknetBitStreamWriteInt8(bs, 52)
        raknetBitStreamWriteInt8(bs, -79)
        raknetBitStreamWriteInt8(bs, 42)
        raknetBitStreamWriteInt8(bs, 55)
        raknetBitStreamWriteInt8(bs, -70)
        raknetBitStreamWriteInt8(bs, -79)
        raknetBitStreamWriteInt8(bs, -76)
        raknetBitStreamWriteInt8(bs, 41)
        raknetBitStreamWriteInt8(bs, -78)
        raknetBitStreamWriteInt8(bs, -73)
        raknetBitStreamWriteInt8(bs, 57)
        raknetBitStreamWriteInt8(bs, -78)
        raknetBitStreamWriteInt8(bs, -87)
        raknetBitStreamWriteInt8(bs, -94)
        raknetBitStreamWriteInt8(bs, 37)
        raknetBitStreamWriteInt8(bs, -105)
        raknetBitStreamWriteInt8(bs, 57)
        raknetBitStreamWriteInt8(bs, -73)
        raknetBitStreamWriteInt8(bs, -123)
        raknetBitStreamWriteInt8(bs, 23)

--разработчик второго обхода решил сделать так, извиняюсь

Я долгое время ломал голову, зачем и почему он решил отправить рандомные цифры, и кажется, я понял, но не до конца.
Как я понял, при авторизации, скрипт подменяет значение joinAuthKey на '10EF75E3F7A702B75F29D501677C33B6B4EFA8CA999'. А массивы - это как раз-таки этот же joinAuthKey, но в шестнад. значении. Но главный вопрос - зачем эти скрипты отправляют эти массивы при попытке обхода? Я для теста убирал логику отправки, и ничего не менялось.
Так же, каким образом человек смог закодировать строку '10EF75E3F7A702B75F29D501677C33B6B4EFA8CA999' в шеснад. значения. Я просмотрел множество сайтов, там нельзя получить именно такой вид значений, как на первом обходе.
Так же при попытке обхода, скрипт подменяет challengeResponse2 на строку 'sys108rev100', что на удивление, дает хоть какие-то результаты. При входе на сервер пишет, что установлен старый клиент, но каким образом эта строка дает серверу понять, что я не с ПК, но у меня установлен старый клиент. Обычно, клиент отправляет одинаковые цифры в challengeResponse2 как в первом challengeResponse, но никак не строку.

Возвращаюсь к вопросу с декодировке шестнад. значений во втором обходе, а именно здесь:

Тест 'sys108rev100' в ASCII'sys108rev100' в ASCII:
raknetBitStreamWriteInt8(bs, 115)
raknetBitStreamWriteInt8(bs, 121)
raknetBitStreamWriteInt8(bs, 115)
raknetBitStreamWriteInt8(bs, 49)
raknetBitStreamWriteInt8(bs, 48)
raknetBitStreamWriteInt8(bs, 56)
raknetBitStreamWriteInt8(bs, 114)
raknetBitStreamWriteInt8(bs, 101)
raknetBitStreamWriteInt8(bs, 118)
raknetBitStreamWriteInt8(bs, 49)
raknetBitStreamWriteInt8(bs, 48)
raknetBitStreamWriteInt8(bs, 48)
В этом участке коде я понял, что разработчик обхода решил отправить строку 'sys108rev100' в ASCII. Но не понимаю одного - почему он решил отправить этот РПС пакет именно таким образом, а не обычной строкой, ведь результат - тот же самый. Я проверял.

Предпоследний вопрос, который мне не дает нормально спать:
В первым обходе есть такой интересный участок кода:

onReceiveRpc:
function onReceiveRpc(id, bitStream)
    if id == 222 then
        sampAddChatMessage('{BE2D2D}[Mordor] {ffffff}Обходим...', -1)
        local xui = raknetNewBitStream()
        for i = 1, 135 do
            raknetBitStreamWriteInt8(xui, dat[i])
        end
        raknetSendBitStreamEx(xui, 1, 8, 0)
        raknetDeleteBitStream(xui)
        sampAddChatMessage('{BE2D2D}[Mordor] {ffffff}Обошли', -1)
    end
end

Здесь в принципе все понятно, но я НИГДЕ НЕ НАШЕЛ ИНФОРМАЦИИ ОБ RPC 222. Я обыскал весь интернет от и до, даже в игре проверял, какие RPC пакеты отправляет мне сервер, и этого загадочного 222-го RPC нигде нет. И это не может быть ошибкой разработчика, на то есть 2 причины.

1 = этот обход когда-то работал, пока его не пофиксили;
2 = на форуме есть еще одна тема, где человек принимал этот загадочный RPC. Ссылка

Последний вопрос:
В двух обходах есть такой участок кода:

Участок кода с RPC 103:
function onSendRpc(id, bitStream, priority, reliability, orderingChannel, shiftTs)
    if id == 103 then
        local xui = raknetNewBitStream()
        sampAddChatMessage('{BE2D2D}[Mordor] {ffffff}Ещё раз обходим...', -1)
        raknetBitStreamWriteInt8(xui, 72)
        raknetBitStreamWriteInt32(xui, 388)
        raknetBitStreamWriteInt16(xui, 0)
        raknetSendRpcEx(103, xui, 1, 9, 0, false)
        raknetDeleteBitStream(xui)
        lua_thread.create(function()
            wait(10000)
            sampAddChatMessage('{BE2D2D}[Mordor] {ffffff}Обход v2.2-FINAL сработал!', -1)
            sampAddChatMessage('{BE2D2D}[Mordor] {ffffff}Обход создан ValarDahaelis', -1)
            sampAddChatMessage('{BE2D2D}[Mordor] {ffffff}Официальная тема скрипта: blast.hk/threads/95285', -1)
        end)
        return false
    end
end
В принципе все понятно, человек подменяет битстрим RPC 'ClientCheck'
Но, он записывает значение 388, во второй параметр битСтрима UINT32 address. Зачем и главное почему? Ведь клиент отправляет значение, которое меняется с каждым перезаходом в игру. Проанализировав отправляемые значения, я пришел к выводу, что чем больше прошло с рестарта сервера, тем больше отправляемое значение.
Вот список, который я ввел в течение дня:

Cписок:
-- 72 86376263 0
-- 72 86558730 0
-- 72 86826894 0
-- 72 86847893 0
-- 72 86924920 0
-- 72 86984796 0
-- 72 87039860 0
-- 87039860
-- 72 87353986 0
-- 72 87665592 0
-- 72 88212382 0 0
-- 72 88247980 0 0
-- 72 88267847 0 0
-- 72 91975959 0 0
-- 72 235692928 0 0 | Sat Jan  6 09:24:40 2024
Как вы видите, чем больше времени прошло, тем больше значение. Это какой-то отсчет с рестарта, но в обходах отправляется значение 388. Зачем :/
Пожалуйста, не бейте сильно, что задал столько вопросов, но насчет этого катастрофически мало информации, и я устал гадать(
сейчас 222 рпс в мордоре не используется, раньше через него отправлялись байты от сервера клиенту, клиент проводил с ними манипуляции и отправлял ответ в 103 рпс, то есть RPC_ClientCheck, но потом байты в 103 рпс стали динамическими, и смысла от 222 не было, поэтому насколько мне известно больше это рпс в защите не используется, есть только 103, байты в нем особо не менялись
 

atomlin

Известный
587
449
"В этом участке коде я понял, что разработчик обхода решил отправить строку'sys108rev100' в ASCII. Но не понимаю одного - почему он решил отправить этот РПС пакет именно таким образом, а не обычной строкой, ведь результат - тот же самый. Я проверял."
>> Нет большой разницы как ты это отправишь, просто так захотел автор

"В принципе все понятно, человек подменяет битстрим RPC 'ClientCheck'
Но, он записывает значение 388, во второй параметр битСтрима UINT32 address. Зачем и главное почему? Ведь клиент отправляет значение, которое меняется с каждым перезаходом в игру. Проанализировав отправляемые значения, я пришел к выводу, что чем больше прошло с рестарта сервера, тем больше отправляемое значение.
"
>> Клиент мордора отправляет статичное значение

"Здесь в принципе все понятно, но я НИГДЕ НЕ НАШЕЛ ИНФОРМАЦИИ ОБ RPC 222. Я обыскал весь интернет от и до, даже в игре проверял, какие RPC пакеты отправляет мне сервер, и этого загадочного 222-го RPC нигде нет. И это не может быть ошибкой разработчика, на то есть 2 причины."
>> Если нет информации, значит это их кастомный RPC


"Как я понял, при авторизации, скрипт подменяет значение joinAuthKeyна '10EF75E3F7A702B75F29D501677C33B6B4EFA8CA999'. А массивы - это как раз-таки этот же joinAuthKey, но в шестнад. значении."
>> Это не joinAuthKey

"Так же при попытке обхода, скрипт подменяет challengeResponse2 на строку 'sys108rev100', что на удивление, дает хоть какие-то результаты. При входе на сервер пишет, что установлен старый клиент, но каким образом эта строка дает серверу понять, что я не с ПК, но у меня установлен старый клиент. Обычно, клиент отправляет одинаковые цифры в challengeResponse2 как в первом challengeResponse, но никак не строку."
>> samp-mobile обычно не отправляет challengeResponse2. Не совсем понимаю в чём тут вопрос, ведь в этом и заключается защита - изменённая структура clientJoin*a
 
  • Нравится
Реакции: Iskon

waflya

Потрачен
12
1
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
"В этом участке коде я понял, что разработчик обхода решил отправить строку'sys108rev100' в ASCII. Но не понимаю одного - почему он решил отправить этот РПС пакет именно таким образом, а не обычной строкой, ведь результат - тот же самый. Я проверял."
>> Нет большой разницы как ты это отправишь, просто так захотел автор

"В принципе все понятно, человек подменяет битстрим RPC 'ClientCheck'
Но, он записывает значение 388, во второй параметр битСтрима UINT32 address. Зачем и главное почему? Ведь клиент отправляет значение, которое меняется с каждым перезаходом в игру. Проанализировав отправляемые значения, я пришел к выводу, что чем больше прошло с рестарта сервера, тем больше отправляемое значение.
"
>> Клиент мордора отправляет статичное значение

"Здесь в принципе все понятно, но я НИГДЕ НЕ НАШЕЛ ИНФОРМАЦИИ ОБ RPC 222. Я обыскал весь интернет от и до, даже в игре проверял, какие RPC пакеты отправляет мне сервер, и этого загадочного 222-го RPC нигде нет. И это не может быть ошибкой разработчика, на то есть 2 причины."
>> Если нет информации, значит это их кастомный RPC


"Как я понял, при авторизации, скрипт подменяет значение joinAuthKeyна '10EF75E3F7A702B75F29D501677C33B6B4EFA8CA999'. А массивы - это как раз-таки этот же joinAuthKey, но в шестнад. значении."
>> Это не joinAuthKey

"Так же при попытке обхода, скрипт подменяет challengeResponse2 на строку 'sys108rev100', что на удивление, дает хоть какие-то результаты. При входе на сервер пишет, что установлен старый клиент, но каким образом эта строка дает серверу понять, что я не с ПК, но у меня установлен старый клиент. Обычно, клиент отправляет одинаковые цифры в challengeResponse2 как в первом challengeResponse, но никак не строку."
>> samp-mobile обычно не отправляет challengeResponse2. Не совсем понимаю в чём тут вопрос, ведь в этом и заключается защита - изменённая структура clientJoin*a
по факту все так и есть, 222 рпс - их кастом, его нет в обычном сампе что можно понять если зайти на их сервер с раклоггером, возьмем в пример барвиху где в роли 222 рпс выступает рпс 68, в это рпс сервер упаковывает байты и отправляет их клиенту, клиент проводит с ними манипуляции и возвращает серверу хэш-ответ в 83 рпс, также и тут, только здесь в роли 68 рпс 222 а в роли 83 103, но, если сейчас сдампить 103 рпс в мордоре, я не так давно это делал, там нету байта "388" вместо него идут динамические байты которые начинаются от 200