各位,
我们有一个有趣的技术挑战。如何编写一个安全的审计文件来跟踪软件的使用情况,以便许可费用可以基于使用情况,从而使使用较少的人更能负担得起。
具体来说,TickZoom 为对冲基金销售 alpha 生成交易平台,目前该平台的许可费用为 2,000 美元/月,包括支持(很快将增加到两倍以上)。这对机构来说很好,但对个人来说太贵了。个人经常要求更低的价格以换取使用该软件获得的利润的 %,直到他们能够支付固定费用为止。
我们喜欢这个提议。但是我们需要一种可靠的方法来审计平台上实际产生的利润,并通过删除或覆盖审计文件来防止用户“玩弄”它从而报告低于实际的 yield 。
这个应用程序是用 C# 编写的,系统的这一部分被混淆了,至少很难破译代码。
另一个要求是为发生的每笔交易写入文件,以便在用户觉得总费用存在差异时进行更深入的审计。这样,个人交易利润可以与经纪人报表进行比较。
当然,假设文件将被加密。
但是关于如何使其“防篡改”的任何想法?特别是针对简单的删除尝试?
我的第一个猜测是让软件总是需要一个预先存在的审计文件,否则它会拒绝运行。
然后,当我们交付软件时,它会与“空”审计文件一起打包,但实际上,该文件具有某种防篡改验证。
用户可能会尝试“篡改”文件的下一个明显技术是让某人简单地备份原始“空”文件,然后稍后使用它来覆盖审计文件,从而欺骗系统认为这是一个新的开始。
也许这可以通过包含某种“上次更新时间戳”和过期时间来解决。
此外,欢迎完全不同的解决方案想法。在这种情况下,我们可能被迫添加“回拨”功能,以便将交易记录到我们的中央服务器。但这似乎是不利的,并且可能会在关键任务应用程序中增加另一个故障点。一般来说,他们非常不喜欢“电话回家”功能,原因很明显。
真挚地,
韦内克
最佳答案
这是一个想法 - 每当用户退出与软件的 session 时,根据审计日志生成一个哈希值。加密散列,然后将其写入另一个文件,可能隐藏在您的二进制文件中,或写入注册表。
当用户接下来打开应用程序时,读取日志文件,重新生成散列并查看它是否与记录的值匹配。如果没有,请关闭应用程序并显示“审计文件被篡改”错误消息。
不完全是傻瓜证明,但会非常可靠。
另外,check out this question
关于c# - 安全软件许可证使用审计日志,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2130043/