2013-05-11 4 views
2

Flex 프레임 워크를 사용하는 Adobe AIR 응용 프로그램이 있습니다. 처음에는 브라우저 버전 용으로 제작되었지만 이제는 독립 실행 형 응용 프로그램으로 사용해야합니다. 이것은 Adobe AIR를 사용하여 수행 할 수 있습니다.HASP 보호를 사용하기 위해 Adobe AIR (SWF/Flex) 응용 프로그램을 C# 응용 프로그램으로 압축하는 방법이 있습니까?

그러나 우리는 SafeNet (이전의 Alladin) HASP 키를 사용하는 서버 측 앱을 위해이 애플리케이션에서 IP 보호를 사용해야합니다. 동일한 키가 클라이언트 독립 실행 형 응용 프로그램을 암호화하는 데 사용될 수 있지만 이러한 키가 지원하는 언어 집합은 매우 제한되어 있으며 가장 쉬운 방법은 C# (.NET)입니다.

HASP 보호는 다음과 같이 작동합니다. 암호화 된 바이너리를 실행하면 암호 해독 엔진이 USB 키를 확인하고 키가 있으면 해독 메커니즘이 앱을 메모리로 해독하고 실행합니다.

SWF/AS 파일을 C# 응용 프로그램에 임베드하는 가장 쉽고 안전한 방법은 무엇일까? 그래서이 파일도 암호화되어 보호됩니다.

추신 :이 문제와 관련하여 다른 질문을 읽었으며 AIR에서 HASP 보호 기능을 직접 사용할 수있는 방법이 없지만 C# 응용 프로그램의 SWF 응용 프로그램을 ActiveX 컨테이너를 통해 사용할 수 있다는 내용이 있습니다.

PPS : 아마도 어리석은 질문 일지 모르지만 C#에 대한 경험이 없으므로 링크, 설명, 자세한 지침 또는 예가 인정 될 것입니다.

답변

2

을 통해서만 가능했던, 당신은 당신의 C#을 SWF 파일을 추가 할 수 있습니다 응용 프로그램을 임베디드 리소스로 사용할 수 있습니다. 그렇게하면 하나의 실행 파일 만 있고 swf 응용 프로그램이 포함됩니다.

C# 응용 프로그램이 시작되면 swf 파일을 가져 와서 실행해야합니다 (하지만 여기서는 무엇을해야하는지 알 것 같습니다). http://www.dotnetscraps.com/dotnetscraps/post/Insert-any-binary-file-in-C-assembly-and-extract-it-at-runtime.aspx

+0

그건 분명히 가치있는 대답입니다. 나는 더 이상의 대답이 있을지 지켜 볼 것입니다. 그러나 런타임에 SWF 파일이 압축 해제되면 FS로 압축 해제된다는 의미입니까? 그렇다면, 그 파일들을 복사하고 디 컴파일하는 것이 여전히 가능하기 때문에 안전하지 않을 것입니다 ... – AlexKey

+0

기본 동작은 그것들을 메모리에 압축 해제하는 것입니다 ('byte []'배열과 같은 것을 가질 것입니다). 디스크에 명시 적으로 쓰기를 선택하지 않으면 메모리에만 남아있게됩니다. – ppetrov

+0

하지만 모든 것이 메모리에 남아 있어도 다른 프로세스에서 읽을 수 있고 디스크에 기록 될 수 있습니다 (그렇게하기는 쉽지 않지만 가능합니다). 그리고 이것에 대한 많은 해결 방법은 없습니다 ... – ppetrov

-1

AIR 응용 프로그램을 기본 실행 파일로 컴파일 할 수 있습니다. 예를 들어 Windows의 경우 .exe입니다. 일단 각 플랫폼 용 AIR 응용 프로그램을 기본적으로 컴파일하면 C# 내에서 AIR 응용 프로그램을 쉽게 호출/실행할 수 있어야합니다. 당신이 원하는 모든 당신의 C# 응용 프로그램이 SWF/플렉스 파일 암호화 얻을 경우

네이티브 설치 (마지막으로 내가 그것을 사용)을 command line

+0

는 방법이다 내 질문에 대한 답변? AIR 응용 프로그램을 네이티브 데스크톱 응용 프로그램으로 컴파일 할 수 있다는 것을 알고 있습니다. HASP 보호 기능이 AIR에서 작동하지 않으므로 C#에 Flex 응용 프로그램을 포함시키는 것이 문제입니다. 시스템 호출을 통해 외부 앱을 실행하면 앱간에 보호 기능을 전달할 수 없습니다. – AlexKey

3

이 잘 형태로 내장 플래시 플레이어에 진 메모리 스트림과 같은 포함 된 SWF 리소스를로드합니다 : 여기

는 응용 프로그램에서 바이너리 자원을 포함하고 실행 시간을 추출하는 방법에 대한 튜토리얼입니다 COM 개체 (임시 파일을 만들지 않고). SWF의 기능은 "표준"Flash Player 샌드 박스로 제한되므로이 방법으로 desktop/extendedDesktop을 사용하는 & AIR swfs를 임베드 할 수는 없습니다.

전 코드와 샘플 swf로 GitHub Project을 만들었습니다.

1)에서 "충격파 플래시"를 "참조"를 마우스 오른쪽 단추로 클릭하고 추가 솔루션 탐색기에서 SWF

2) # 양식이

3

프로젝트 새 C를 생성)로 AIR 응용 프로그램을 컴파일 COM 탭

4) 솔루션 탐색기에서 프로젝트를 마우스 오른쪽 단추로 클릭하고 "속성"을 선택하십시오.새로 열린 양식의 "자원"탭을 선택하고 SWF를 자원으로 추가하십시오. 당신의 도구 상자에서 "일반"탭에서

5 ), 폼에 다음 코드를 추가하여 양식

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); 
     } 
    } 
} 
+0

고마워요. 매우 유용합니다. – AlexKey