保护Air应用程序内容

时间:2012-03-14 14:24:37

标签: actionscript-3 flex air flash-builder

在Mac Os上,我看到我的应用程序上的所有内容都是可读的(mxml和文件)。 确实在应用程序上使用了正确的clic,您可以看到所有应用程序内容以及所有文件。 因此,公司分发这样的空气应用是非常危险的。 是否存在保护这些文件的解决方案。

由于

2 个答案:

答案 0 :(得分:1)

虽然有很多反编译器可以读取你的所有代码。有一个人想出了加密解决方案,值得一试。 (适用于桌面AIR应用程序)

看一下这篇文章:http://forums.adobe.com/message/3510525#3510525

引用的文字(如果页面被删除)

  

我使用的方法允许您使用加密大部分源代码   每台计算机都独有的密钥。我最初的下载   软件是一个简单的航空应用程序,不包含实际程序。   它更像是一个shell,它首先撤回客户端mac的列表   地址和用户输入的时间创建的激活码   购买这将发送到服务器并记录。激活码   保存到文件客户端。在服务器上的mac地址和   激活密钥用于创建加密密钥。大部分   然后使用该密钥对程序代码进行加密,然后将其分成几部分   并送回客户端。客户将部件重新组合在一起   并保存加密文件。在运行时,shell会找到mac   地址列表和激活密钥,然后使用与服务器相同的方法   获取加密密钥并解密程序文件。运行简单   检查以确保它已加载。对于encyption,我发现了一种aes方法   适用于php和javascript。

     

接下来我使用此代码加载程序

var loader = air.HTMLLoader.createRootWindow(true, options, true, windowBounds);
loader.cacheResponse=false;
loader.placeLoadStringContentInApplicationSandbox=true;
loader.loadString(page);
  

这种方法很难复制   到另一台电脑,虽然我写了它,我知道有一些   安全的一周,但要使我更加努力。贝壳   码。它至少可以防止盗版。但是有问题   有了这个,我找到了。首先我使用networkInfo来获取   Mac地址列表,但在测试Windows XP计算机中失败。   当无线功能关闭时,它没有返回MAC。我没能   在VISTA或7中重新创建它。不确定它是否会发生。不是   在mac计算机上测试。解决这个问题(至少对于Windows来说)。一世   写了一个简单的bat文件,获取MAC列表,然后将其转换为   包含的exe。这会强制您创建本机   安装。用这个

调用exe
var nativeProcessStartupInfo = new air.NativeProcessStartupInfo();
var file = air.File.applicationDirectory.resolvePath("findmac.exe");
nativeProcessStartupInfo.executable = file;
process = new air.NativeProcess();
process.start(nativeProcessStartupInfo);
process.addEventListener(air.ProgressEvent.STANDARD_OUTPUT_DATA, onOutputData);
process.addEventListener(air.ProgressEvent.STANDARD_ERROR_DATA, onErrorData);
process.addEventListener(air.NativeProcessExitEvent.EXIT, onExit);
process.addEventListener(air.IOErrorEvent.STANDARD_OUTPUT_IO_ERROR, onIOError);
process.addEventListener(air.IOErrorEvent.STANDARD_ERROR_IO_ERROR, onIOError);
  

使用array.push和将列表放在onOutputData事件中   使用findmac.exe继续onExit事件将返回   每次(我知道)相同的信息要小心以为使用   本机安装将破坏标准的应用程序更新过程   你必须自己写。我的更新以相同的方式处理   如上。这是获取mac列表的.bat文件的内容

@Echo off
SETLOCAL SET MAC = SET Media  = Connected
FOR /F "Tokens=1-2 Delims=:" %%a in ('ipconfig /all^| FIND "Physical Address"') do @echo %%b ENDLOCAL
  

使用此方法可以在您之前尝试实现它   方法。在运行时,如果没有激活码,请试试我的版本   服务器而不是完整版。

答案 1 :(得分:1)

无法保护100%的代码。毕竟,如果计算机可以运行它,它可以被反编译,无论语言如何。但是,你可以使它变得更加困难。

一种方法是加密swf,如另一个答案中所述。但是所有“攻击者”需要做的就是找到密钥,然后他们就可以解密你所有的swfs。

另一种方法是使用混淆器。混淆器不依赖于加密,也不会阻止反编译,它们只会让人更难理解反编译的内容。

例如,如果你有一个名为saveInvoice()的方法,混淆器会将它重命名为aa1()或类似的东西,所以它会让它难以猜测该函数的功能。它基本上把所有东西都变成了spaguetti代码。

您可以使用反编译器查看可以从SWF文件中获取的内容(很多),并使用混淆器来查看它们是否符合您的期望。

一个例子是http://www.kindi.com/,我不赞成顺便说一句,它只是在谷歌上快速显示。