【问题标题】:Can i block a program using ASM?我可以使用 ASM 阻止程序吗?
【发布时间】:2015-03-08 14:48:22
【问题描述】:

我尝试了几天来阻止我的游戏的作弊程序,我与几位编码人员交谈,其中一位说我可以使用 ASM 来阻止它。该程序隐藏得很好,我在内存中找不到它,我无法检测到它的扫描过程,所以也许这可能是解决方案?谁能给我一个例子,我如何检测和阻止使用 c++ 和 ASM 的程序?

这是我目前使用内存转储检测和阻止作弊的方法:

void SystemProcessesScan() 
{
HANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

    if(hProcessSnap != INVALID_HANDLE_VALUE)
    {
        PROCESSENTRY32 pe32;
        pe32.dwSize = sizeof(PROCESSENTRY32);

        if(Process32First(hProcessSnap, &pe32))
        {
            do
            {
                HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pe32.th32ProcessID);
                if(hProcess != NULL)
                {
                    if(ScanProcessMemory(hProcess))
                    { 
                        ExitProcess(0);
                    }
                }
            }

            while(Process32Next(hProcessSnap, &pe32));
        }
    }

    CloseHandle(hProcessSnap);
}

bool ScanProcessMemory(HANDLE hProcess) 
{
    for(int i = 0; i < MAX_PROCESS_DUMP; i++)
    {
        char aTmpBuffer[MAX_DUMP_SIZE];
        SIZE_T aBytesRead = 0;
        ReadProcessMemory(hProcess, (LPCVOID)g_ProcessesDumps[i].m_aOffset, (LPVOID)aTmpBuffer, sizeof(aTmpBuffer), &aBytesRead);

        if(memcmp(aTmpBuffer, g_ProcessesDumps[i].m_aMemDump, MAX_DUMP_SIZE) == 0)
        {
            return true;
            break;
        }
    }

    return false;
}

【问题讨论】:

  • 所以,换句话说,你有某种病毒等?不要尝试使用一些 asm 来修复它,然后重新安装所有内容
  • “有人说我可以使用 ASM 阻止它”。这是一个非常模糊的说法。你应该让他或她详细说明这一点。
  • 不知道它是如何隐藏的,你怎么知道如何检测它?这本质上是一场你无法获胜的军备竞赛。寻找症状服务器端?
  • 是的,服务器端它会发送一些非常讨厌的数据包来改变我的游戏,但我不能在那里做任何事情。我的解决方案是在 Clients folder. There is only 1 version of this cheat wich i cannot block, because you have to select the game executable, then press start, after that the cheat dissappears, but in game its 那里检测到它:(
  • 了解作弊程序是如何工作的(以及一般作弊程序是如何工作的),这是您学习如何防止这些事情的唯一方法。只是一个提示,你对一个你无法阻止的作弊的描述,在我看来就像简单的 Dll 注入(或者如果他们很勇敢,纯粹的 asm 注入)。所以你有一些东西可以谷歌搜索。这个问题太宽泛了,恕我直言。

标签: c++ windows assembly anti-cheat


【解决方案1】:

作弊将一个DLL注入你的游戏,听起来它使用手动映射将DLL隐藏在内存中。

检测它的最佳解决方案是查找此 DLL 唯一的字节序列。模式扫描您自己的游戏进程,如果找到签名,请关闭游戏或此时您想做的任何事情。

搜索 C++ 内部模式扫描或签名扫描,有几十个来源经常用于此目的。

由于它是手动映射的,因此您必须扫描所有已提交的内存区域,而不是遍历模块列表。在从地址 0 开始的 while 循环中使用 VirtualQuery() 直到它失败。

【讨论】:

  • 您是否意识到 Windows 上的前 64 K 地址空间不可访问?
猜你喜欢
  • 2014-05-03
  • 1970-01-01
  • 1970-01-01
  • 2010-10-27
  • 2019-04-26
  • 1970-01-01
  • 2019-04-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多