如何检测程序是否正在运行?

时间:2009-06-19 01:53:17

标签: c# detection

我编写了一个程序,它是一个非正式的,独立的应用程序插件。它允许客户获得比供应商拥有的服务更低价格的服务。对于任何类型的服务条款,我的程序都不是非法的,并且当然不是病毒,广告软件或类似的东西。话虽这么说,供应商当然不喜欢我参加比赛,并试图阻止我的应用程序运行。

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

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

接下来,他查找了正在运行的进程名称。我通过将应用程序自动复制到[随机字符串] .exe然后运行它来反击这一点。

无论如何,我的问题是:他还能做些什么来检测我的程序是否在运行?我知道你可以阅读窗口文本(即状态栏,标签)。我准备通过用图像替换标签来解决这个问题(呃,任何其他方式?)。

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

我知道可以在内存中获取程序的签名并以这种方式跟踪它(如病毒扫描程序),但是他这样做的机会可能并不好,因为听起来非常先进。

虽然这对他来说有点糟糕,但它很有趣。这就像是一场讨厌的拳头战。

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

5 个答案:

答案 0 :(得分:2)

我觉得有点肮脏回答这个问题,但现在已经很晚了,我正在等待驱动器副本完成......

他可以使用校验和来识别您的可执行文件/ dll。这解决了重命名技巧。

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

如果我是他,我也会开始寻找网络流量模式;例如,如果您将客户引导到竞争对手,那么您正在从某个地方查找该信息,以便在插件访问黑名单中的网站时终止该进程和/或卸载该库。

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

答案 1 :(得分:2)

不太适合你的竞争对手。

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

然后使用CSharpCodeProvider在客户端计算机上编译代码以编译代码。您可以使用完全随机的函数签名生成随机程序集(我建议使用大型的真实,常见,单词字典而不是完全随机。您可以将它们连接在一起以获得更多乐趣。例如,实时,虚拟,空间,办公室,网络, Utility.Space.Live.Network.dll,Utility.Virtual.Live.dll)。

每个客户端上的每个版本的程序都会有所不同。确保隐藏部署程序。也许它应该在安装自定义版本后自行删除。

答案 2 :(得分:0)

  

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

  • 您的程序是EXE还是DLL?
  • 你称之为插件:插入的是什么?
  • 您的程序如何启动/启动/运行?
  • 您的计划如何“插入”?
  • 您的计划与其他计划之间的API是什么?

答案 3 :(得分:0)

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

如何修复其他应用程序。 找到它在标题中寻找的字符串并更改其中的一些字母。

让您的客户知道问题所在,方法是向他们提供另一个应用程序而非您自己的应用程序。

答案 4 :(得分:-1)

@ryeguy ...最好的防守是一个很好的进攻imho。尽可能在禁用你的进程之前禁用他的进程。