2

我目前正在开发简单的应用程序(如果相关,在 Actionsript 3 中),我想构建一个基于 XML 文件(将由 PHP 脚本生成)的简单注册系统,这将使我的文件“过期”在某个日期之后。

对我来说,这个系统看起来不错,但我希望专家的意见,以防我遗漏了一些明显的东西——或者我完全错了。

根据我在 stackoverflow 和其他网站上阅读的内容,我提出了以下 XML 结构:

<LICENSE>
     <NAME>Joe Cool</NAME>
     <COMPANY>Doggy Dogdog</COMPANY>
     <APP>Flash Tester</APP>
     <VERSION>1.02</VERSION>
     <EXPIRES>01/10/2012</EXPIRES>
     <SERIAL>e923b5e370cd3cb7ac72c1482d088bd7</SERIAL>
</LICENSE>

<SERIAL> 字段实际上是构成许可证的所有项目的简单 MD5 散列,并添加了“盐”(这是保密的),以防止用户生成自己的 MD5 散列。“解密”许可证如下所示:

Joe Cool - Doggy Dogdog - Flash Tester - 1.02 - salt - 01/10/2012

运行时,我的应用程序将加载 XML 数据,添加“盐”并从中计算 MD5。然后它将生成的 MD5 散列与存储在 XML 中的散列进行比较。不匹配的散列表示篡改 XML 文件。并且可以将来自 XML 的加载日期与当前日期进行比较,以确保应用程序没有过期。

我知道 MD5 不是那么安全,等等,但我并没有用它来保护核筒仓,所以我愿意以安全性换取速度和简单性。我试图在几个在线 MD5 反向查找中反转从源字符串获得的 MD5,但到目前为止它们都失败了。

最后,我知道我必须将“盐”存储在应用程序的某个地方,但我想任何人真正决心对它进行逆向工程都会破坏我无论如何都会安装的任何系统,所以我可以忍受主意。

4

1 回答 1

0

简单地更改计算机时钟以永远使用它不是微不足道的吗?

正如您所提到的,反编译文件、找到盐并生成任意许可证文件也很容易。

但是任何像这样的系统都将是一种“默默无闻的安全”类型的交易,所以除非你想将你的逻辑存储在服务器端,否则这几乎是安全的:)

编辑:我认为打破验证的另一种方法是,如果这是一个 .swf 文件,则将其加载到另一个 swf 文件中,该文件已包含您在其中使用的 md5 类,但已修改,因此它始终返回一个已知值(比如“1”),然后更改 xml 中的许可证密钥以匹配此。

于 2012-01-11T07:49:48.907 回答