0

我正在尝试制作一个程序,如果某个程序打开,它不会让你继续。在这种特殊情况下,如果 Cheat Engine.exe 打开,您将无法继续。

我认为代码会是这样的:

def openedprogram():
with open('Cheat Engine.exe', 'r') as f:
    print("You have Cheat Engine Open! Close and uninstall it before continuing!")
else:
    continue()

这会出现一些错误,我尝试删除“Else:”,但我收到一条错误消息,提示 Cheat Engine.exe 不是有效目录。任何帮助将不胜感激!谢谢。

4

2 回答 2

1

这几乎是完全不可能做到的(请参阅防病毒和反黑客注入),但您可以在大多数情况下查看进程名称是否显示在进程列表中。

像这样的事情会在此刻激活进程

import os
import psutil # http://code.google.com/p/psutil/
import time

def get_procs():
    while 1:
        procs = psutil.get_process_list()
        procs = sorted(procs, key=lambda proc: proc.name)

        for proc in procs:
            yield proc.name
于 2013-01-28T00:46:50.670 回答
0

您的问题询问一件事(程序“正在运行”),而您的代码检查另一件事(您能否成功打开文件以读取它)并且您的错误消息和您的问题文本正在讨论另一件事(是给定的可执行文件“已安装)。

在您了解这些不同问题之间的区别之前,您不可能编写一个程序来执行您想要的(无论实际上是什么)。

打开文件会告诉您给定名称的文件是否存在于给定位置,并且具有允许您访问它的权限。这对于试图防止在您的程序/游戏运行时使用“作弊”实用程序是没有用的。

通过检查 PATH 以查看“cheat.exe”程序是否在其上的任何位置,您可能会获得一些非常有限的成功。然而,那将是相当蹩脚的。重命名程序并将其保存在不在 PATH 上的某个目录中的智能和教育栏非常低。我认为在 MS Windows 上玩游戏的平均 10 岁儿童可能会在大约五分钟或更短的时间内解决这个难题(破解该策略)(“成就解锁!”)。

诸如“魔兽世界”之类的程序具有相当复杂的“守望者”技术,试图阻止程序(例如“滑翔机”或“Shadowbot”)在《魔兽世界》打开时运行。当然,这样的程序可以安装在任何目录中,使用任何名称,并且可以在运行时在进程列表中重命名它们自己。这些“作弊”程序使用的操作系统工具与调试器使用的基本相同(MacOS X 下的 ptrace 接口以及 MS Windows 下的任何模拟接口)。这些允许像 gdb 和 strace 这样的程序“窥视”另一个程序的地址空间并“戳”到其中的值。因此,他们通过查看程序存储有关用户界面的某些模型信息的位置(基本上是目标所在的位置,

可以想象,“管理员”可以尝试扫描进程表以查找某些签名(类似于防病毒软件),甚至可以尝试使用类似的“调试”界面来查找被禁止程序的痕迹。

然而,如果没有硬件支持(比如臭名昭著的 TPM --- 可信平台模块),这最终不是一款你会赢的游戏,目前商品消费市场(通用 PC 和 Mac、例如)。

但是,嘿,玩得开心。

于 2013-01-28T09:32:04.410 回答