-2

我有一个用 AS2 编写的 adobe flash 的 flash 项目,当然我有 .fla 文件。该程序具有一种身份验证来更改编写代码时使用的参数。这意味着我写了类似的东西:

if (userEnteredPassword == "xyz")
{
//login success logic
}

现在我给用户的唯一东西就是 .exe 文件。我希望用户能够更改密码。我怎样才能做到这一点?编译时如何更改上述代码中的“xyz”?我想我可以散列密码并存储在 .exe 文件旁边的文件中;并检查哈希字符串以进行身份​​验证。我可以制作一个简单的哈希函数。这可能吗?如何处理文件?谢谢你

4

2 回答 2

1

如果您的 Flash 是用 AS2(而不是 AS3)编写的,并且您拥有所有 ActionScript 源代码,则可以使用MTASC编译器,但这可能会很棘手,具体取决于应用程序的编写方式。如果你没有源代码,你就必须反编译SWF,祈祷反编译器能全面解构一切。不幸的是(谢天谢地),我看到的那些无法解构可重构的 Flash。

于 2013-02-04T16:44:34.230 回答
1

如果没有 FLA 文件,很难为您提供具体的解决方案。我只能给你一句话。您的初始编译仍需要 Flash,您可以轻松获得 60 天的试用期。

解决方案之一是在 AS 类中将此密码外部化,但仍将其与 SWF 一起编译以获得更好的安全性(但不会太多,因为反编译器可以轻松找到密码)。

您需要找到密码编码的区域,假设它是一个带有 ActionScript 块的框架。假设声明就像

if (userEnteredPassword == "xyz")
{
    //login success logic
}

您可以将其重写为

if (userEnteredPassword == appsetting.Settings.password )
{
    //login success logic
}

然后在appsetting文件夹中创建一个 AS 文件 Settings.as :

class appsetting.Settings
{
    public static var password:String = "xyz";
}

将 FLA 编译成 SWF,并确保没有错误。随后,您的 SWF 可能会在没有 Flash IDE 的情况下由 MTASC 更新。

因此,假设 SWF 和密码 AS 文件位于同一目录中,您的 MTASC 命令看起来像

mtasc.exe -swf your_swf_file.swf -cp ./ -out your_swf_with_new_password.swf

安全考虑 正如我之前所说,以纯文本形式存储的密码是错误的。一种轻微的方法是使用单向加密(如 MD5)对密码进行加密,然后您需要将加密的用户输入与加密的密码进行比较。这还需要加密库,您需要一些 Flash 知识才能这样做。

最好的解决方案是让服务器验证密码。您可以进行 http 调用并让服务器验证密码是否匹配,这样您就不会以任何形式公开密码。这种方法涉及更多。

于 2013-02-04T23:41:44.703 回答