Как понять, как игроки обманывают? - PullRequest
0 голосов
/ 06 октября 2019

Прежде чем задать свой вопрос, я должен объяснить вам мой проект и то, как я работаю. Я делаю сервер для игры. Этот сервер требует большой разработки, 800 тыс. Строк кода.

После более чем одного месяца. Похоже, что некоторые игроки используют чит для уничтожения удовольствия игрока.

Я должен признать, что мне немного трудно понять, как защитить себя от этого. Сообщество владельцев серверов слишком сильно атаковано, и каждый пытается защитить себя, как может.

Я работаю на Lua, JSON, HTML и CSS для этого проекта, 99% Lua.

Что контролирует игровой клиент:

Клиент может выполнять команды, но команды разрешены только администратору. За исключением случаев, если для инъекции его собственного файла сделайте новую команду. И может внедрить код внутри клиентской игры (объясните после).

Что делает сервер:

Я думаю, здесь мы можем что-то сделать. На всех серверах установлены тонны модов, поэтому все клиенты загружают все мои скрипты мод / клиент для запуска событий моих серверов.

Как происходит отправка команды:

  • клиент может использовать чат / команду [attribut] [attribut2]
  • клиент может запустить консоль клиента и: команду [attribut] [attribut2]

Как мошенники это делают?

  • 1) Инжектор скрыт в памяти с исполняемым файлом Windows.
  • 2) Они загружают файл клиента, чтобы заставить команды клиентов вызывать триггеры сервера *. (потому что, да, плохо, что все используют одни и те же сценарии, поэтому известны имена триггеров)
  • *) Для этого они открывают консоль клиента и пишут внутри: "exec c: /filename.lua")

50% чит-скриптов обфусцированы AHCI и заменой переменных, как показано ниже.

Как выглядит чит? Я не могу опубликовать полный код здесь>Тело ограничено до 30000 символов;вы ввели 208906. <> обфусцированный <> без отступа (1 строка) <</p>

-A глобальная функция:

function IllIlllIllIlllIlllIlllIll(IllIlllIllIllIll) if (IllIlllIllIllIll==(((((919 + 636)-636)*3147)/3147)+919))end end)

-A глобальная переменная:

IllIIllIIllIII(IllIIIllIIIIllI(IlIlIlIlIlIlIlIlII,IIIIIIIIllllllllIIIIIIII))()

- глобальная переменная:

Xxxxx5 = {}

- глобальная переменная:

Xxxxx5.debug = true

-Локальная переменная:

local logged = true

Где мне нужна ваша помощь

Я бы хотел обнаружить не впрыск. Но я не имею никакого контроля над этим. Я хотел бы обнаружить одну из этих вещей: (Помните, я могу вводить свои клиентские сценарии lua / Json для выполнения каких-либо действий)

  • , когда кто-то печатает: exec в консоли?
  • когда кто-то использует глобальную переменную / функцию? (так как я получил их "Xxxxx5.debug = true")
  • когда кто-то пытается обнаружить или отсканировать мои триггеры?
  • что-то, о чем я еще не думал?
  • Определить, существует ли функция?

У меня есть глобальная и локальная функция в клиентском скрипте:

local function d(e)
    local f = {}
    local h = GetGameTimer() / 200
    f.r = math.floor(math.sin(h * e + 0) * 127 + 128)
    f.g = math.floor(math.sin(h * e + 2) * 127 + 128)
    f.b = math.floor(math.sin(h * e + 4) * 127 + 128)
    return f
end


function Dt(text, x, y)
    ..stuff
end

Хорошая информация: мне удается сделать хорошую защиту, но она оченьосновные .... Большинство читов используют те же команды, чтобы противостоять. Я просто залатал шордкоты, чтобы получить к ним доступ. Клиент получает удар, если он их использует. Может быть, это решение, если лучше закодировано? Но если игрок находится в чате или на консоли, он больше не работает, поэтому я не понимаю, как он работает, когда игрок находится в этом состоянии. (Ключ отключен)

Почему я прошу помощи?

Я могу заверить, что я разработал все свои скрипты, переработал все свои скачанные скрипты, нашел все другие решения,без посторонней помощи. Я предпочитаю учиться ловить рыбу, чем просить рыбу. Но на этот раз перепробовал много вещей, которые не работают.

Что я пробовал: ни одно из этих условий не сработало:

-- if (_G["Xxxxx.IsMenuOpened"] ~= nil) then
    -- while true do
    -- print = 'Xxxxx'
    -- end
-- end

-- if Xxxxx ~= nil then
    -- setfenv(Xxxxx , nil )
-- end

-- if rawget( _G, Xxxxx) ~= nil then  -- "var" n'est pas déclaré
    -- print 'Xxxxx DETECTER !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'
-- end

-- if rawget( _G, Xxxx) ~= nil then  -- "var" n'est pas déclaré
    -- print 'Xxxxx DETECTER !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'
-- end

-- if (_G["Xxxx.IsAnyMenuOpened"] ~= nil) then
    -- while true do
    -- print = 'Xxxxx'
    -- end
    -- print = 'xxxxx'
-- end

-- if source == '[Xxxx]' or source == 'Xxxxx' then 
    -- while true do
    -- print = 'Xxxxx'
    -- end
    -- print = 'xxxxx'
-- end

-- if (_G["Xxxxx"] ~= nil) then
    -- while true do
    -- print = 'Xxxxx'
    -- end
    -- print = 'xxxxx'
-- end

-- if Xxxxx ~= nil or Lynx8.debug = true or Lynx8.debug = false then
    -- reason2 = 'Xxxxx DETECTE'
    -- TriggerServerEvent("Drop_player" , reason2 )
-- end

-- if Xxxxx.Display() ~= nil then
    -- reason2 = 'Xxxxx DETECTE'
    -- TriggerServerEvent("Drop_player" , reason2 )
-- end

1 Ответ

0 голосов
/ 07 октября 2019

После дополнительных исследований ... Вот, может быть, и хорошее решение.

У меня есть большинство использованных читов в моем распоряжении. Таким образом, все они имеют глобальную переменную и функцию. Поэтому я искал, возможно, есть способ заблокировать глобальную переменную, используя и блокируя их перед читерами.

http://lua -users.org / lists / lua-l / 2003-08 / msg00081.html

Таким образом, внедрение не будет выполнено, поскольку используемая переменная будет заблокирована.

Я прочитал это: И похоже, это хорошее решение для меня, да.

Теперь у меня есть более точные вопросы, можете ли вы помочь мне с этим:

Я не знаю множителей:

$ cat z.lua

Это от вставленного URL. Что это?

Можете ли вы подтвердить? В lua или Json, есть ли способ заблокировать переменную перед использованием?

...