利用方法

SECUDRIVE Software Copy Protection(以下SCP)はUSBドングルによる、プログラムの不正利用防止ソリューションです。

下図は、SCPの利用フローです。

利用方式

プログラムを知財として防御するためには、以下の2点を考慮する必要があります。

  • 不正利用
    ライセンスに違反してexe実行形式ファイルを不正にコピーして利用する。
    販売機会の損失により会社の収益を悪化させます。
  • コードハッキング
    exe実行形式ファイルを解析してソースを解読される。
    独自ノウハウが流出し、製品の価値を損ないます。

SCPは、これらのことを防止する機能を提供します。ユーザーはSCPが提供する「API認証」、「難読化」機能を利用目的により以下のように組み合わせて利用できます。

方式 耐不正利用 耐コードハッキング 融通性
難読化のみ

API認証のみ

難読化+API認証

API認証

開発者がプログラムのソースコードにSCPで提供するドングル認証APIを直接追加します。プログラムが実行されるタイミングでドングルをチェックし、認証に成功した場合にのみプログラムが実行されます。この機能は開発者が直接プログラムのソースコードを変更できる場合に利用できます。

しかしこの機能だけを使用する場合、IDA disassemblerやdebuggerのようなコード解析ツールを利用してプログラム内のドングルチェックルーチンをバイパスしてプログラムの不正利用防止機能を解除される可能性があります。

exe実行ファイル暗号化(難読化)

SCPで提供する実行ファイルの暗号化機能を利用してexeファイルを暗号化します。スマートカード技術が適用されたドングルの内部に暗号化キーを保管しているため、USBドングルが無断で複製されたり、暗号化キーが外部へ流出することはありません。よって、IDA disassemblerやdebuggerのようなコード解析ツールを利用したとしても、暗号化された実行ファイルを変更することができません。

以下は、難読化前と後の.NET Reflectorによる解析例です。

<難読化前>

<難読化後>

NETプログラムに対する暗号化に対応

Windows 7 OSに.NETフレームワークが標準搭載されてから.NETプログラムの開発が活発化しています。.NETはjavaのようにMSが提供する仮想マシンで動作するプログラムですが、誰でもexeファイルをdecompileすると、ソースコードを取得することができるため、NETプログラムに対する暗号化の需要が増加しています。SCPはName Obfuscation, String Encryption, Control Flow Obfuscation, Code Encryptionのような機能により.NETで開発されたプログラムコード解析をブロックします。

SCPの.NET実行ファイル保護手順

キーの種類

SCPの実行ファイル保護には、以下の3つのキーを使用します。

  • 公開鍵(PUK):PKIの公開鍵で、暗号化キーを暗号化する際に使用します。
  • 秘密鍵(PVK):PKIの秘密鍵で、暗号化された暗号化キーを復号する際に使用します。
  • 暗号化キー(CK):.NET実行ファイルを暗号化するためのキーです。

開発者がプログラムとドングルを準備する

  1. 開発者はSCPが提供するツールを利用して、RSA 2048ビットアルゴリズムによる公開鍵(PUK)と秘密鍵(PVK)のペアを作成して、ドングルに秘密鍵(PVK)を保存します。ドングルに保存された秘密鍵(PVK)はスマートカード技術により外部へ流出することは絶対にありません。この秘密鍵(PVK)は公開鍵(PUK)で暗号化した暗号化キー(CK)を複合化するために使用されます。
  2. 開発者はAES 256ビット暗号化用として暗号化キー(CK)を作成後、原本の.NETプログラムを暗号化します。暗号化キー(CK)は外部へ流出してはならないため、これを公開鍵(PUK)で暗号化し、暗号化された.NETプログラム (Enveloped .NETプログラム)を最終的に作成します。つまり、暗号化された.NETプログラムには秘密鍵(PVK)と公開鍵(PUK)で暗号化された暗号化キー(ECK)が含まれており、暗号化された暗号化キー(ECK)は公開鍵(PUK)に対応する秘密鍵(PVK)が保存されたトークンがなければ複合化することができません。

ユーザがプログラムを実行

  1. .NETプログラムが実行されると、まずトークンがPCに接続されているか確認します。
  2. トークンの認証は.NETプログラムに含まれる公開鍵(PUK)とトークン内に保存された秘密鍵(PVK)が有効なペアかどうか電子署名方式で検証します。ペアが合わなければトークンの認証は失敗しプログラムは動作しません。
  3. 暗号化された暗号化キー(ECK)をトークンに保存された秘密鍵(PVK)で複合化し、暗号化キー(CK)を生成します。
  4. 暗号化キー(CK)を利用して暗号化された.NETプログラムを複合化し、原本の.NETプログラムをメモリへロードします。
  5. 最終的にプログラムが実行されます。

.NETプログラムの動作検証

C# EXE File Encryption Test Report

以下の.NETアプリケーションプログラムに対してSCPを利用して暗号化後、正常に実行されることを確認しました。

Process Name

Encryption

Execution

SourceForge.NET xps2img

OK

OK

ScpSync

OK

OK

pNote.Net

OK

OK

PictureFilter

OK

OK

3DSPVideoConverter

OK

OK

ChronosoXP

OK

OK

DigicamController

OK

OK

KeyPass

OK

OK

VoiceCommander

OK

OK

NetworkMonitor

OK

OK

CodePlex CCT.NUI

OK

OK

CodeTestBox

OK

OK

CS2HX

OK

OK

HPPatternInSharp

OK

OK

KeyboadMouseHook

OK

OK

JsonCSharpClassGenerator

OK

OK

NFileStorage

OK

OK

 

 

mautic is open source marketing automation