是否有办法将Adobe AIR (SWF/Flex)应用程序封装到c#应用程序中以使用HASP保护?

本文关键字:应用程序 封装 保护 HASP Adobe AIR Flex SWF 是否 | 更新日期: 2023-09-27 18:13:02

我们有一个使用Flex框架的Adobe AIR应用程序。它最初是为浏览器版本构建的,但现在我们也需要将其作为独立应用程序使用。这可以使用Adobe AIR来实现。

但是我们需要在这个应用程序中使用IP保护,对于我们的服务器端应用程序,我们使用SafeNet(以前的Alladin) HASP密钥。同样的密钥可以用于加密客户端独立应用程序,但是这些密钥支持的语言集非常有限,最简单的是c# (. net)。

HASP保护的工作原理如下:执行加密二进制文件,解密引擎将检查USB密钥,如果存在,写在密钥上的解密机制将把应用程序解密到内存中并执行。

所以问题是-将SWF/AS文件嵌入到c#应用程序中以便这些文件也将被加密并因此受到保护的最佳(简单和安全)方法是什么?

PS:我读过关于这件事的其他问题,没有办法直接使用AIR的HASP保护,但一些问题暗示可以通过ActiveX容器从c#应用程序使用SWF应用程序。

PPS:也许这是一个愚蠢的问题,但我没有c#的经验,因此任何链接,解释,详细的说明或示例将不胜感激。

是否有办法将Adobe AIR (SWF/Flex)应用程序封装到c#应用程序中以使用HASP保护?

这将把嵌入的swf资源作为二进制内存流直接加载到嵌入表单的Flash播放器COM对象中(不创建临时文件)。请注意,SWF的功能将仅限于"标准"Flash Player沙盒,您不能嵌入&以这种方式运行使用desktop/extendedDesktop的AIR swfs

我已经创建了一个GitHub项目与完整的代码和样例swf。

1)将AIR应用程序编译为SWF

创建一个新的c# Forms项目

3)在解决方案资源管理器中,右键单击"参考",并从COM选项卡中添加"ShockWave Flash"

4)在解决方案资源管理器中,右键单击项目并选择"属性"。在新打开的表单中选择"Resources"选项卡,并将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);
        }
    }
}

如果你想让你的c#应用程序与你的swf/flex文件加密,你可以添加swf文件到你的c#应用程序作为一个嵌入式资源。这样,您将只有一个可执行文件,它将包含swf应用程序。

当您的c#应用程序启动时,您需要获取swf文件并执行它(但似乎您知道这里要做什么)。

下面是关于如何在应用程序中嵌入二进制资源并在执行时提取它们的教程:http://www.dotnetscraps.com/dotnetscraps/post/Insert-any-binary-file-in-C-assembly-and-extract-it-at-runtime.aspx

您可以将AIR应用程序编译为本机可执行文件。对于windows(例如),它是。exe。我想,一旦你为每个平台本地编译了AIR应用程序,从c#中调用/执行AIR应用程序应该很容易。

本机安装程序(我上次使用它)只能通过命令行

获得。