代码之家  ›  专栏  ›  技术社区  ›  ryeguy

如何检测程序正在运行?

  •  1
  • ryeguy  · 技术社区  · 15 年前

    我已经为一个应用程序编写了一个非官方的、独立的插件程序。它允许客户获得比供应商拥有的服务价格更低的服务。我的程序是不合法的,反对任何类型的TOS,而且肯定不是病毒,广告软件,或任何类似的东西。也就是说,供应商当然不高兴我参加他的竞争,并试图阻止我的应用程序运行。

    他已经尝试了一些策略来阻止人们和他一起运行我的应用程序。他这样做,如果检测到,他的应用程序就会抛出一个假错误。

    首先,他通过寻找一个具有正确标题的打开窗口来检查我的程序是否正在运行。我通过在启动时随机化程序标题来解决这个问题。

    接下来,他查找正在运行的进程名。我通过在应用程序以[random string].exe启动时让它自己复制,然后运行它来解决这个问题。

    无论如何,我的问题是:他还能做些什么来检测我的程序是否运行?我知道你可以阅读窗口文本(即状态栏、标签)。我准备用图片代替标签来对付这个问题(啊,还有其他方法吗?).

    但是还有什么?你能检测到程序加载了什么吗?如果是这样,可以通过在加载前随机化DLL名称来解决这个问题吗?

    我知道有可能在内存中获取程序的签名并以这种方式跟踪它(就像病毒扫描程序),但他这样做的可能性可能并不好,因为这听起来相当高级。

    尽管这对他来说有点糟糕,但还是挺有趣的。就像一场无聊的拳赛。

    编辑: 当我说它是一个插件时,这只是我使用的(不正确的)术语。它是一个独立的exe。我的程序和另一个程序之间的“api”是我的,它只是将数据输入控件(如文本框等)。

    5 回复  |  直到 14 年前
        1
  •  2
  •   Shea    15 年前

    回答这个我觉得有点不好意思,但已经晚了,我正在等一份拷贝完成,所以……

    他可以使用校验和来标识您的可执行文件/dll。这就绕过了重命名技巧。

    您可以通过在程序启动时随机修改程序中的位来解决这个问题(例如,更改资源、使用嵌入的版本等)。

    如果我是他,我也会开始寻找网络流量的模式;例如,如果你将客户引向竞争对手,你会从某个地方寻找信息,因此如果一个插件访问黑名单上的站点,就会杀死进程和/或卸载库。

    如果你把猫和老鼠的游戏看得够远(例如,如果它被删除,shell钩子会重新创建你的可执行文件/库),你可能会被反病毒软件标记为病毒。

        2
  •  2
  •   GrendleM    15 年前

    你的对手不是很有运动精神。

    将项目部署为未编译的加密源代码。编写一个解密和部署程序,可以随机化、重命名类、重新安排代码以避免任何特定的签名检测。

    然后使用CSharpCodeProvider在客户机上编译代码来编译代码。您可以使用完全随机的函数签名生成随机程序集(我建议使用一个包含实数、常用词的大型字典,而不是完全随机的单词)。您可以将它们连接在一起以获得更多乐趣。例如:实况、虚拟、空间、办公室、网络、实用程序。space.live.network.dll,utility.virtual.live.dll)。

    每个客户机上的程序的每个版本都是不同的。确保隐藏部署程序。也许它应该在安装了您的定制版本之后删除自己。

        3
  •  0
  •   ChrisW    15 年前

    无论如何,我的问题是:他还能做些什么来检测我的程序是否运行?

    • 您的程序是一个exe还是一个dll?
    • 你称之为插件:什么是插件?
    • 您的程序是如何启动/启动/运行的?
    • 你的程序对“插件”做了什么?
    • 你的程序和其他程序之间的API是什么?
        4
  •  0
  •   hultqvist    14 年前

    这不是对最后一个问题的回答,而是对所描述的问题的回答。

    修复另一个应用程序如何? 在标题中找到它要查找的字符串,并更改其中的一些字母。

    通过向客户提供对其他应用程序的修复,而不是您自己的应用程序,让他们知道问题所在。

        5
  •  -1
  •   Nippysaurus    15 年前

    雷伊盖伊…最好的防守是一个好的进攻。尽你所能在禁用你的进程之前禁用它。