我有一个用AS2编写的adobe flash flash项目,当然我有.fla文件。 此程序具有一种身份验证,可以更改编写代码时使用的参数。这意味着我写了类似的东西:
if (userEnteredPassword == "xyz")
{
//login success logic
}
现在我唯一给用户的是.exe文件。我希望用户能够更改密码。我怎样才能做到这一点?如何在编译时更改上面代码中的“xyz”?我以为我可以散列密码并存储在.exe文件旁边的文件中;并检查散列字符串以进行身份验证。我可以创建一个简单的散列函数。它可能吗?我该如何处理文件?谢谢
答案 0 :(得分:1)
如果您的Flash是用AS2(而不是AS3)编写的,并且您拥有所有ActionScript源代码,则可以使用MTASC编译器,但这可能会很棘手,具体取决于应用程序的编写方式。如果您没有源代码,那么您必须对SWF进行反编译,并且祈祷反编译器将全面解构所有内容。不幸的是(并且谢天谢地),我所看到的那些无法解构可重构的Flash。
答案 1 :(得分: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,并确保没有错误。随后,MTASC可以在没有Flash IDE的情况下更新您的SWF。
因此,假设SWF和密码AS文件位于同一目录中,您的MTASC命令看起来像
mtasc.exe -swf your_swf_file.swf -cp ./ -out your_swf_with_new_password.swf
安全考虑 正如我之前所说,以纯文本形式存储的密码是BAD。稍微的方法是使用单向加密(如MD5)加密密码,然后您需要将加密的用户输入与加密的密码进行比较。这也需要加密库,你需要一些Flash知识才能这样做。
最佳解决方案是让服务器验证密码。您可以进行http调用并让服务器验证密码是否匹配,这样您就不会以任何形式公开密码。这种方法更为复杂。