2

我们有一个使用 Flex 框架的 Adob​​e AIR 应用程序。它最初是为浏览器版本构建的,但现在我们还需要将它用作独立应用程序。使用 Adob​​e AIR 可以做到这一点。

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

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

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

PS:我已经阅读了有关此问题的其他问题,并且无法直接将 HASP 保护与 AIR 一起使用,但有些问题暗示可以通过 ActiveX 容器从 C# 应用程序使用 SWF 应用程序。

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

4

3 回答 3

3

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

我创建了一个包含完整代码和示例 swf的GitHub 项目。

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);
        }
    }
}
于 2013-05-19T10:44:37.227 回答
2

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

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

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

于 2013-05-18T19:03:47.343 回答
-1

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

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

于 2013-05-15T08:17:06.053 回答