1

我编写了一个程序,它是一种非官方的、独立的应用程序插件。它允许客户获得比供应商拥有的服务价格更低的替代服务。我的程序不违反任何 TOS,当然也不是病毒、广告软件或类似的东西。话虽如此,供应商当然不高兴我参加他的比赛,并试图阻止我的应用程序运行。

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

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

接下来,他查找正在运行的进程名称。我通过在应用程序以 [random string].exe 启动时复制自身然后运行它来反驳这一点。

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

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

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

尽管他这样做有点蹩脚,但它很有趣。这就像一个书呆子的拳头战斗。

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

4

5 回答 5

2

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

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

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

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

如果你玩猫捉老鼠的游戏足够远(例如,如果它被删除,shell 挂钩可以重新创建你的可执行文件/库),你可能会被防病毒软件标记为病毒。

于 2009-06-19T02:09:28.187 回答
2

你的竞争对手不是很运动。

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

然后在客户端机器上使用 CSharpCodeProvider 编译代码来编译你的代码。您可以生成具有完全随机函数签名的随机程序集(我建议使用一个包含真实、常见单词的大型字典,而不是完全随机的。您可以将它们连接在一起以获得更多乐趣。例如 Live、Virtual、Space、Office、Network、 Utility.Space.Live.Network.dll、Utility.Virtual.Live.dll)。

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

于 2009-06-19T02:34:35.780 回答
0

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

  • 你的程序是EXE还是DLL?
  • 你称它为插件:插入什么?
  • 您的程序是如何启动/启动/运行的?
  • 您的程序如何“插入”?
  • 你的程序和其他程序之间的 API 是什么?
于 2009-06-19T02:20:27.243 回答
0

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

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

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

于 2010-04-09T22:08:28.670 回答
-1

@ryeguy ...最好的防守是好的进攻恕我直言。在禁用你的进程之前,尽你所能禁用他的进程。

于 2009-06-19T02:29:12.530 回答