【问题标题】:How to work out how game players are cheating?如何判断游戏玩家作弊的方式?
【发布时间】:2019-10-07 23:17:11
【问题描述】:

在问我的问题之前,我必须向您解释我的项目以及我的工作方式。我为游戏制作服务器。这个服务器需要大量的开发,80万行代码。

一个多月后。似乎有些玩家正在使用作弊来破坏玩家的乐趣。

我不得不承认,我很难弄清楚如何为自己辩护。服务器所有者社区受到太多攻击,每个人都在尽力保护自己。

我正在为这个项目使用 Lua、JSON、HTML 和 CSS,99% Lua。

游戏客户端可以控制什么:

客户端可以执行命令,但命令只允许管理员。除非注入他自己的文件做一个新的命令。并且可以在客户端游戏中注入代码(后面解释)。

服务器的作用:

我想,这是我们可以做点什么的地方。所有服务器都安装了大量的模组,所以所有客户端都在下载我所有的模组/客户端脚本来触发我的服务器事件。

发送命令的过程是什么:

  • 客户端可以使用聊天/command [attribut][attribut2]
  • 客户端可以运行客户端的控制台和:命令[attribut][attribut2]

作弊者是如何做到的?

  • 1) 注入器隐藏在内存中,Windows 可执行文件。
  • 2) 他们正在加载客户端文件以使客户端命令调用服务器触发器*。 (因为,是的,不幸的是每个人都使用相同的脚本,所以它是已知的触发器名称)
  • *) 为此,他们打开客户端控制台并在其中写入:“exec c:/filename.lua”)

50% 的作弊脚本被 AHCI 和变量替换混淆,如下所示。

作弊是什么样子的? 我无法在此处发布完整代码>正文限制为 30000 个字符;你输入了 208906。混淆了没有缩进(1 法分)

-一个全局函数:

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

-一个全局变量:

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

【问题讨论】:

    标签: variables lua detection


    【解决方案1】:

    经过更多研究......我来这里也许有一个很好的解决方案。

    我拥有大部分用过的秘籍。所以它们都有全局变量和函数。 所以我搜索了可能有一种方法可以通过在作弊者之前使用和锁定全局变量来锁定全局变量。

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

    因此,注入将失败,因为使用的变量将被锁定。

    我读到了这个:它看起来对我来说是一个很好的解决方案,是的。

    现在我有更精确的问题,请你帮我解决这个问题:

    我不知道很多事情:

    $ cat z.lua

    这来自粘贴的网址。这是什么?

    你能确认一下吗? 在 lua 或 Json 中,有没有办法在使用前锁定变量?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-14
      • 1970-01-01
      • 1970-01-01
      • 2012-03-16
      • 1970-01-01
      相关资源
      最近更新 更多