【问题标题】:Pointers against cheat反对作弊的指针
【发布时间】:2012-08-07 16:23:57
【问题描述】:

我如何保护我的 分子类 变量值,例如 键长NH3 的反转概率 免受作弊引擎用户(没有减慢多少)?

这是否可以防止外部影响?

class molecule
{
public:
    molecule()
    {
    ...
    }
protected:
    int *bond_length;
    int *probability;
}

这样更安全吗?

class molecule
{
...
private:
    int *bond_length;
    int *probability;
}

如果以上所有内容都容易受到类似作弊引擎的软件的攻击,那么以下是否合乎逻辑?

class molecule
{
public:
    molecule(){... ... ...}
...
...
    //still public
    int *bond_length_fake;
    int *bond_length;
    int *prob_fake;
    int *prob;
}
...
//somewhere in the program
void thread_real_to_fake(void * molecule_parameters)
{
    int bond_length_backup;
    molecule * param=(molecule *)molecule_parameters;
    while(working)
    {
        if((param->bond_length_fake)!=(param->bond_length))
        {
            param->bond_length_fake=param->bond_length;
        }
    }
    _endthread();

}

好的,这可以通过使假货始终与真货相同来保护假货。但是如何保护真实的呢?我可以使用随机指针来获得真正的价值吗?如果是,我该怎么做?

【问题讨论】:

  • “作弊引擎”有点宽泛……你面临什么样的攻击?
  • 还没有攻击。只是准备对抗。就像游戏破解一样。
  • 在客户端计算机上实现安全计算(edit:security)
  • 您似乎混淆了“安全”和“安全”的概念,并试图将“c++ 保护”(即为了安全:防止编程错误)映射到安全(防止故意恶意行为)目的。
  • 所以,忘记公共的、私有的和受保护的。它们不是为了安全。

标签: c++ class


【解决方案1】:

您无法保护您的计算机免受正在运行的软件的影响。如果有人在控制机器,他们可以随意操纵它,这包括修改正在运行的程序的状态。

您可以做的最安全的事情是在单独的、无法访问的服务器上运行程序并通过网络转发 I/O(例如到浏览器窗口)。

编辑: 作为替代方案,您可以将程序的引擎部分作为单独用户运行的服务运行。这提供了一定程度的保护。引擎必须检查提交的用户输入(例如击键)是否以合理的速率进入。这允许您在一定程度上强制执行规则,但不会阻止例如用户通过操纵客户端中的图形渲染来透视墙壁。

【讨论】:

  • 你说如果我使用 java 那么我需要在服务器而不是客户端计算机中计算东西(java servlet vs java applet)。
  • @tuğrulbüyükışık:我是说保护您的程序免受操纵的唯一真正方法是不允许对其运行的机器进行任何访问......这只是一个抽象的原则。
  • 一个人需要什么特权级别才能从另一个正在运行的软件中获取变量?
  • @tuğrulbüyükışık:通常,用户可以从在她自己的所有权下运行的所有进程访问内存,这通常足以做任何事情。您可能能够将您的软件编写为作为不同用户运行并通过接口进行通信的服务,我想...
  • @tuğrulbüyükışık:这取决于操作系统。但是,如果您自己不“拥有”那台其他人将拥有的计算机,那么您也有权更改权限。
猜你喜欢
  • 2015-04-21
  • 2017-01-04
  • 2016-11-04
  • 2019-04-25
  • 1970-01-01
  • 2018-12-03
  • 1970-01-01
  • 2022-08-04
  • 2016-12-20
相关资源
最近更新 更多