【问题标题】:Is there a way to envelope Adobe AIR (SWF/Flex) application into C# application to use HASP protection有没有办法将 Adob​​e AIR (SWF/Flex) 应用程序封装到 C# 应用程序中以使用 HASP 保护
【发布时间】:2013-05-19 18:58:07
【问题描述】:

我们有一个使用 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# 的经验,因此任何链接、解释、详细说明或示例将不胜感激。

【问题讨论】:

    标签: c# apache-flex air activex hasp


    【解决方案1】:

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

    我创建了一个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);
            }
        }
    }
    

    【讨论】:

    • 谢谢,很有用。
    【解决方案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

    【讨论】:

    • 这绝对是有价值的答案,我会等待,看看是否会有更多的答案。但是我仍然有一个问题,如果 SWF 文件将在运行时被解包,这是否意味着这些文件被解包到 FS 中?如果是这样,那将是不安全的,因为仍然可以复制这些文件并对其进行反编译...
    • 默认行为是将它们解压到内存中(您将拥有类似byte[] 数组的东西),因此除非您明确选择将其写入磁盘,否则它只会保留在内存中。
    • 但是您应该知道,即使所有内容都保留在内存中,它仍然可以被另一个进程读取然后写入磁盘(这并不简单,但可能)。并且没有太多的解决方法......
    【解决方案3】:

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

    本机安装程序(我上次使用它)只能通过 command line 获得

    【讨论】:

    • 我的问题的答案如何?我知道 AIR 应用程序可以编译为本机桌面应用程序,这不是我所要求的。请重新阅读问题,它是关于将embedding Flex 应用程序转换为 C#,因为 HASP 保护不适用于 AIR。通过系统调用执行外部应用程序绝对不能将保护从一个应用程序传递给另一个应用程序。
    猜你喜欢
    • 2020-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-12
    • 1970-01-01
    • 1970-01-01
    • 2010-10-17
    相关资源
    最近更新 更多