2012-03-14 99 views
1

在Mac OS上,我看到我的应用程序中的所有内容都可以读取(mxml和作为文件)。 事实上,通过应用程序的右键菜单,您可以看到所有应用程序内容以及所有文件。 因此,一家公司分销这样的空气应用是非常危险的。 是否存在保护这些文件的解决方案。保护空气应用程序内容

感谢

+0

如果您已编译为SWF文件,则无法查看源文件(MXML和AS),而无法反编译SWF。 – 2012-03-14 14:30:14

回答

1

虽然有反编译器的负载可以读取所有的代码。有一个人提出了加密解决方案,可能值得一试。 (这是桌面AIR应用程序)

看一看这个帖子:http://forums.adobe.com/message/3510525#3510525

引用文本(在页面的情况下被擦除)

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

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

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

这种方法使得它很难 复制到另一台计算机,虽然,因为我写的,我知道有一些 weeknesses在安全,但让我更难我obv。代码为 。它至少大部分免受盗版。但是,我发现有这个问题 。首先,我使用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事件和 继续上的OnExit事件中使用findmac。exe将返回 每次(我知道)相同的信息当心认为使用本地安装将破坏标准的应用程序更新过程,所以你将不得不自己编写自己的 。我的更新按照与上述相同的方式处理 。这是.bat文件的内容来获取MAC列表

@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

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

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

另一种方法是使用混淆器。混淆器不依赖于加密,也不防止反编译,它们只是使得难以理解被反编译的内容。

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

您可以使用反编译器来查看可以从SWF文件(很多)中获得的内容,然后使用混淆器来查看它们是否符合您的要求。

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