1
45
“他们看起来不太可能付钱,所以我们的老板希望我们引进定时炸弹。” 一个不称职的商人要求你为一个商业问题实施一个技术解决方案。如果你的客户不愿意付钱,你的老板应该像个成年人一样处理这种情况,而不是像高中黑客那样胡乱摆弄逻辑炸弹。 这是不道德的,可能是非法的,但大部分都是愚蠢的。 |
2
14
我同意将其称为试用版并让其过期的意见。在我们的一个产品Web发布系统中,我们有一个公共页面类,用于检查用户许可证密钥,如果它无效,我们将在所有页面的顶部打印一条消息。消息非常可见,但不会影响程序的工作方式。 为了进行检查,我们在web.config文件中存储了一个“注册密钥”。我们将其与我们计算的密钥进行比较,计算密钥的算法存储在单独的程序集中。如果密钥匹配,我们假设产品已获得许可。 对于我们的使用,我们只向注册密钥计算算法提供客户名称,但您可能需要添加版本号或其他日期。然后,通过计算所提供名称的MD5散列值和一个secred代码(数组中的一些随机字节)来生成注册密钥。 这绝不是简单的,也不是非常可靠的,但它很简单,已经足够我们使用了。 |
3
9
这是我能想到的一些事情
但这些都不是万无一失的…
|
4
6
我真的看不出任何结局会好起来的情况。如果你担心被支付(而且他们可能担心在应用交付之前支付),那么建立某种契约怎么样?他们把这笔钱和双方同意的释放这笔钱的条款放在第三方,然后你继续工作,知道这笔钱已经被留出,直到你完成。 |
5
6
抛开道德问题不谈,如果您担心序列号实现被黑客攻击,为什么不使用X509证书?例如,如果安装了证书服务器的Windows设备,则可以在Internet上显示证书吊销列表。 向每个客户机颁发一个客户机标识证书(如果您向中央服务器提供更新检查,则会有额外的好处—现在您可以使用客户机/服务器HTTPS而不必担心密码)。 如果客户不付款,则吊销证书。在应用程序启动中,只需加载证书并检查其有效性… |
6
6
谢谢你的回复! 我们并没有完全按照任何一个人的建议去做,而是使用了你们中的一些人的想法。 首先,我们不再称之为定时炸弹,而是称之为执照。由于软件目前(可以说)不完整,而且客户还没有支付费用,我们可以称之为过期的测试版本。这(很可能)使我们越过了大部分合法的雷区,并且(正如zsharp指出的那样)如果他们声称产品不合格,如果他们不能使用它,他们就不能真正抱怨。 无论如何,技术实现是这样的: 我们希望有效期隐藏在不会被偶然发现的地方,如果被发现的话,它的形式是不容易修改的。它也必须在某个我们可以确定不会无意中受到影响的地方,即使它在一个我们无法完全控制的服务器上。 因此,我们对到期日期进行了加密,并将其放在应用程序使用的数据库的扩展属性中,给它起了一个适当的误导性名称。 应用程序在启动时检查密钥,如果应用程序未过期,则将静态布尔标志设置为true。站点中的每个页面都会检查此标志,如果该标志为假,则会将用户跳转到错误页面。 我们对这个解决方案很满意,原因如下:
当争论停止时,他们已经付钱给我们,我们又是朋友了,他们的应用程序的下一次升级根本没有签入,确保这个被遗忘的代码不会在几年后意外触发(谢谢,克里斯汀!). |
7
5
他们的网络服务器可以访问互联网吗?除了其他方法外,您可能还希望使用Web服务触发定时炸弹,因为狡猾的系统管理员可能愿意将服务器上的时钟设置回几年后。 |
8
5
需要考虑的几点: 这是否合法?假设你不打算透露这个复活节彩蛋, 除非触发,否则客户决不能知道定时炸弹的存在 “,你可能会遇到一些法律问题…… 如果客户有权访问源代码,那么我无法想象您如何包括他们无法雇佣开发人员删除的任何内容。即使IT人员不是开发人员,也不超出他们雇佣其他开发人员对代码进行反向工程的能力。 最后,坏业…如果你真的在和一个你认为不值得信任的客户合作,那为什么还要和他们合作呢?我希望你能把所有事情都摆在桌面上,在执行工作之前得到客户的充分承诺。如果客户不肯承诺付款,我就走了。 |
9
5
如果客户拥有所有的软件,您就不能完全阻止它。 唯一正确的方法是使应用程序依赖于您所拥有的某个组件,例如,它可能需要在一段时间后激活,或者对Web服务器执行ping操作。 这可以通过获取安装日期并将其用作某种salt/加密密钥并用它加密所有数据来实现。然后您可以将其与安装日期进行比较。如果客户使用它(设置时钟),您将注意到它,因为您有原始安装日期。如果更改日期,也会更改加密密钥,因此无法再解密数据。 还有一种方法可以解决这个问题,但是对于任何基于时间的解决方案,您无论如何都需要将安装日期作为比较的基础,并且您需要确保这个修补程序的安全性,因此可以使用某种加密来保护所有数据。 |
10
4
这听起来像是律师的工作。 除此之外,我将使用一个包含到期日期的简单配置文件。然后在配置文件中存储该日期的RSA加密哈希。如果更新到期日期,则只需更新 加密的哈希也是。应用程序定期读取日期,并使用公共RSA密钥解密哈希,然后检查哈希。如果他们修补日期、加密哈希或公钥,那么应用程序将停止工作。 |
11
4
两个想法: 1)我会在他们付钱之前或者在他们把钱存入托管账户之前,在他们的非现场托管他们的申请。如果他们说它不起作用,也不付钱,那么他们不会介意你在整理协议时关闭访问,是吗?! 2)我们以前也做过类似的工作。我们花了更多的时间来考虑任何可能的“定时炸弹”是如何100%防弹的,这样它就不会在截止日期前或在“断开保险丝”后的某个时间意外爆炸。例如,实际删除代码可能更好,而不是将标志从“试用”更改为“无限使用” |
12
3
不要把你的名字放在你做的任何事情的周围,删除所有已有的注释中有你的名字。如果它是合法的,而且你的名字在程序中,你的老板可以很容易地把你扔到车下,说他与此无关。我会认真考虑遵循这个方向。我知道这是管理层的决定,但如果你做的工作很容易回来咬你。 |
13
3
我不是律师,但我的观点是: 如果他们声称这个程序不起作用,而且不能使用,那么他们以后就不能说它“起作用更小”,并要求你承担损害赔偿责任,除非他们已经为所起的作用支付了部分款项。 在你尝试这里的任何建议之前,我会收到他们的书面投诉。(我想补充一下,“免费试用”路线似乎最安全) |
14
2
如果你想把日期放在服务器上而不是互联网上,那么看起来只有暗箱操作才能保证安全。 不过,这是明智的——您不希望应用程序每次启动时都在互联网上进行检查,当互联网连接不好时就会死掉。 最简单的方法是将程序集中的日期保存为变量。 如果您害怕简单的反编译,请加密它并将密钥存储在程序集中。 如果您想在将来更改日期,请将其存储在db/web.config中(当然是加密的)。 对于加密,您可以使用从base64到公钥加密的任何方法。 显然,这不会妨碍代码的严重反编译…但这对初学者来说是好事。 旁注,“逻辑炸弹”也会提醒你剑鱼吗? |
15
2
故意引入这样的“定时炸弹”当然是违法的。你的老板不是第一个考虑此事的人,也不会是最后一个。他最好的办法是在付款之前停止生产实施。 |
16
2
你可能想警告你的老板,如果他的客户遭受任何金钱损失(包括客户损失),你的公司将承担损失,可能还会受到惩罚,再加上你公司的法律费用。而且,如果公司在诉讼和和解中未能幸免,你将失业。 如果我是你,我会三思而后行。 |
17
1
像这里的很多人一样,我会说不要这样做。我不知道这是不是非法的,但感觉不太对劲。业务必须以信任为基础,公开讨论必须优先于此类计划。 如果必要的话,谈谈你的顾虑,冻结开发——我想他们毕竟想要这个产品! |
18
1
这是相当粗心大意的,但您可以编写一个执行一个程序的计划任务,该程序会盐化所有密码。 它不会破坏任何数据,只要您有权限,就可以禁用计划任务。 另外,如果你想把信息反馈给他们的地方发生了什么事情,那就跟不说一样简单……脱盐…密码。 和其他许多人一样,我对实际执行这一点持保留意见。 |
19
1
我将在您存储在bin目录中的编译dll中实现某种方法。称之为
然后,您应该在该dll中有一个返回true或false的方法:
只需在应用程序启动时检查hastimeexpired()方法(global.ascx??)或在某些代码页上,取决于您希望如何处理过期消息。 当您想关闭定时炸弹或延长时间时,bin目录中的dll很容易替换为新的编译版本。它必须进行反编译,才能确定到期日期,如果他们发现它是如何工作的,就很容易绕过它,但是正如您所说,有问题的管理员可能不会这样做。 除此之外,你真的需要和律师一起工作,但是有时候像这样一个借来的软件的锁比律师更有效,更便宜。 |
20
1
我不能谈法律问题。 从技术上讲,我想你能做到。制作一个密钥对,并使用私钥加密一个有过期日期的文件。您的应用程序将使用一个公钥来解密到期日期为的文件。每次程序运行时,都会突出显示“许可证到期前还剩57天”。这样,他们就会不断地发出警告,说应用程序会停止工作。 至于在到期后破坏任何数据,我不会这样做。我想我会加密数据中需要应用程序解密的一些密钥项。 但是,要绕过一个系统管理员来设置时钟是很困难的。但是,如果它有一个网络连接,你可以让它“打电话回家”,以获得钥匙,如果它不能得到它根本不工作。 |
21
0
将一些逻辑移动到您自己服务器上的WebService。 让客户应用程序依赖于该Web服务。 有一个很好的理由来改变这种逻辑,比如“它是我们的核心业务,所以我们需要控制它”,把这种改变作为程序“新版本”的一部分。 用一个新的部分与客户续签合同,该部分告诉他们如果不付款,您的Web服务将断开连接。 如果他们不想签署合同,他们不想和你做生意,你可以为他们断开网络服务,如果他们签署,他们同意新的条款。 这确实是唯一的方法,如果你想确保他们不能使用它,如果没有支付。否则你就得继续起诉他们或那样的威胁。 |
22
0
技术问题由程序员处理,业务问题由律师处理。你的老板需要使用合适的工具来完成这项工作。 |
23
0
执行防病毒路由,拨打外部电话进行“更新”。如果你没有得到更新,如果他们不付费,应用程序就停止工作,停止给他们更新。 我认为这是解决这个问题的错误方法,但我理解你的工作是按照别人的要求去做。 |
Haim Ohayon · 这些链接之间有什么区别? 2 年前 |