我编写了一个程序,它是一个非正式的,独立的应用程序插件。它允许客户获得比供应商拥有的服务更低价格的服务。对于任何类型的服务条款,我的程序都不是非法的,并且当然不是病毒,广告软件或类似的东西。话虽这么说,供应商当然不喜欢我参加比赛,并试图阻止我的应用程序运行。
他已经尝试过一些策略来阻止人们将他的应用程序与他一起运行。如果它被检测到,他会这样做,他的应用程序会抛出一个假的错误。
首先,他通过查找具有正确标题的打开窗口来检查我的程序是否正在运行。我通过在启动时随机化程序标题来反击这一点。
接下来,他查找了正在运行的进程名称。我通过将应用程序自动复制到[随机字符串] .exe然后运行它来反击这一点。
无论如何,我的问题是:他还能做些什么来检测我的程序是否在运行?我知道你可以阅读窗口文本(即状态栏,标签)。我准备通过用图像替换标签来解决这个问题(呃,任何其他方式?)。
但还有什么?你能检测出程序加载了什么.dll吗?如果是这样,可以通过在加载之前随机化dll名称来解决这个问题吗?
我知道可以在内存中获取程序的签名并以这种方式跟踪它(如病毒扫描程序),但是他这样做的机会可能并不好,因为听起来非常先进。
虽然这对他来说有点糟糕,但它很有趣。这就像是一场讨厌的拳头战。
修改 当我说它是一个插件时,那就是我使用的(不正确的)术语。这是一个独立的EXE。我的程序和另一个程序之间的“API”只是将数据输入控件(如文本框等)。
答案 0 :(得分:2)
我觉得有点肮脏回答这个问题,但现在已经很晚了,我正在等待驱动器副本完成......
他可以使用校验和来识别您的可执行文件/ dll。这解决了重命名技巧。
你可以通过在开始时随机修改程序中的位来解决这个问题(例如,更改资源,使用嵌入式版本等等)。
如果我是他,我也会开始寻找网络流量模式;例如,如果您将客户引导到竞争对手,那么您正在从某个地方查找该信息,以便在插件访问黑名单中的网站时终止该进程和/或卸载该库。
如果你把猫和老鼠的游戏放得足够远(例如,如果它被删除就会重新创建你的可执行文件/库),你可能会被防病毒软件标记为病毒。
答案 1 :(得分:2)
不太适合你的竞争对手。
将项目部署为未编译的加密源代码。编写一个解密和部署程序,可以随机化,重命名类,重新安排代码以避免任何特定的签名检测。
然后使用CSharpCodeProvider在客户端计算机上编译代码以编译代码。您可以使用完全随机的函数签名生成随机程序集(我建议使用大型的真实,常见,单词字典而不是完全随机。您可以将它们连接在一起以获得更多乐趣。例如,实时,虚拟,空间,办公室,网络, Utility.Space.Live.Network.dll,Utility.Virtual.Live.dll)。
每个客户端上的每个版本的程序都会有所不同。确保隐藏部署程序。也许它应该在安装自定义版本后自行删除。
答案 2 :(得分:0)
无论如何,我的问题是:他还能做些什么来检测我的程序是否在运行?
答案 3 :(得分:0)
这不是你最后一个问题的答案,而是所描述问题的答案。
如何修复其他应用程序。 找到它在标题中寻找的字符串并更改其中的一些字母。
让您的客户知道问题所在,方法是向他们提供另一个应用程序而非您自己的应用程序。
答案 4 :(得分:-1)