我们有一个使用Flex Framework的Adobe AIR应用程序。它最初是为浏览器版本构建的,但现在我们还需要将它用作独立应用程序。这可以使用Adobe AIR。
但是我们需要对此应用程序使用IP保护,对于我们的服务器端应用程序,我们使用SafeNet(以前称为Alladin)HASP密钥。相同的密钥可用于加密客户端独立应用程序,但这些密钥支持的语言集非常有限,最简单的是C#(.NET)。
HASP保护的工作原理如下:执行加密二进制文件,解密引擎将检查USB密钥,如果存在,则写入密钥的解密机制会将应用程序解密到内存中并执行它。
所以问题是 - 将SWF / AS文件嵌入C#应用程序的最佳(简单和安全)方法是什么,这些文件也会被加密并受到保护?
PS:我已经阅读了有关此问题的其他问题,并且没有办法直接使用AIR的HASP保护,但有些问题暗示可以通过ActiveX容器使用C#app中的SWF应用程序。PPS:也许这是一个愚蠢的问题,但我没有使用C#的经验,因此我们将不胜感激任何链接,解释,详细说明或示例。
答案 0 :(得分:3)
这会将嵌入式swf资源作为二进制内存流直接加载到表单嵌入式Flash播放器COM对象中(无需创建临时文件)。请注意,SWF的功能将仅限于“标准”Flash Player沙箱,您无法嵌入&以这种方式运行使用desktop / extendedDesktop的AIR swfs。
我创建了一个GitHub Project,其中包含完整代码和示例swf。
1)将AIR应用程序编译为SWF
2)创建一个新的C#Forms项目
3)在解决方案资源管理器中,右键单击“参考”并从COM选项卡添加“ShockWave Flash”
4)在解决方案资源管理器中,右键单击项目并选择“属性”。在新打开的表单中选择“资源”选项卡,然后将SWF添加为资源。
5)从工具箱的“常规”标签中,在表单上删除“ShockWave Flash”组件
6)将以下代码添加到表单中:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Reflection;
using System.Windows.Forms;
using System.Diagnostics;
using System.IO;
namespace SwfRes
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
LoadBinSwf();
}
private void LoadBinSwf()
{
//Assuming your swf is called "Main.swf"
byte[] swf = Properties.Resources.Main;
MemoryStream memStream = new MemoryStream();
BinaryWriter writer = new BinaryWriter(memStream);
writer.Write(8 + swf.Length);
writer.Write(0x55665566);
writer.Write(swf.Length);
writer.Write(swf);
memStream.Seek(0, SeekOrigin.Begin);
axShockwaveFlash1.OcxState = new AxHost.State(memStream, 1, false, null);
}
}
}
答案 1 :(得分:2)
如果您只想使用swf / flex文件加密C#应用程序,则可以将swf文件作为嵌入资源添加到C#应用程序中。这样,您只有一个可执行文件,它将包含swf应用程序。
当您的C#应用程序启动时,您需要获取swf文件并执行它(但似乎您知道该怎么做)。
这是一个关于如何在应用程序中嵌入二进制资源并在执行时提取它们的教程: http://www.dotnetscraps.com/dotnetscraps/post/Insert-any-binary-file-in-C-assembly-and-extract-it-at-runtime.aspx
答案 2 :(得分:-1)
您可以将AIR应用程序编译为本机可执行文件。对于Windows(例如),那是.exe。我想,一旦你为每个平台本地编译了AIR应用程序,就应该很容易从C#中调用/执行AIR应用程序。
本机安装程序(我最后一次使用它)只能通过command line
获得