SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

連載記事

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

CodeZine BOOKS(コードジン・ブックス)は、CodeZineの連載からカットアップした、開発現場の課題解決に役立つ書籍シリーズです。

書籍に関する記事を見る

'); googletag.cmd.push(function() { googletag.pubads().addEventListener('slotRenderEnded', function(e) { var ad_id = e.slot.getSlotElementId(); if (ad_id == 'div-gpt-ad-1659428980688-0') { var ad = $('#'+ad_id).find('iframe'); if ($(ad).width() == 728) { var ww = $(window).width(); ww = ww*0.90; var style = document.createElement("style"); document.head.appendChild( style ); var sheet = style.sheet; sheet.insertRule( "#div-gpt-ad-1659428980688-0 iframe {-moz-transform: scale("+ww/728+","+ww/728+");-moz-transform-origin: 0 0;-webkit-transform: scale("+ww/728+","+ww/728+");-webkit-transform-origin: 0 0;-o-transform: scale("+ww/728+","+ww/728+");-o-transform-origin: 0 0;-ms-transform: scale("+ww/728+","+ww/728+");-ms-transform-origin: 0 0;}", 0 ); sheet.insertRule( "#div-gpt-ad-1659428980688-0 div{ height:"+(90*ww/728)+"px;width:"+728+"px;}", 0 ); } else { if ($(window).width() < 340) { var ww = $(window).width(); ww = ww*0.875; var style = document.createElement("style"); document.head.appendChild( style ); var sheet = style.sheet; sheet.insertRule( "#div-gpt-ad-1659428980688-0 iframe {-moz-transform: scale("+ww/320+","+ww/320+");-moz-transform-origin: 0 0;-webkit-transform: scale("+ww/320+","+ww/320+");-webkit-transform-origin: 0 0;-o-transform: scale("+ww/320+","+ww/320+");-o-transform-origin: 0 0;-ms-transform: scale("+ww/320+","+ww/320+");-ms-transform-origin: 0 0;}", 0 ); sheet.insertRule( "#div-gpt-ad-1659428980688-0 div{ height:"+(180*ww/320)+"px;width:"+320+"px;}", 0 ); } } } }); }); } else { document.write('
'); document.write('
'); }
特集記事(AD)

不正な解析から知的財産を守る
.NETアプリ「難読化」再入門

.NETアプリケーション難読化ツール「Dotfuscator」

  • X ポスト
  • このエントリーをはてなブックマークに追加

 逆コンパイルなどの解析技術は日々進歩しています。ソースコードを厳重に管理する必要を感じているなら、バイナリからの解析に無防備であってはなりません。不当な解析による被害を予防するソースコードの「難読化」について紹介します。

  • X ポスト
  • このエントリーをはてなブックマークに追加

ソースコードがないのに、ソースコードが公開されてしまう!?

 もし、開発プロジェクトに対し「実行ファイルには常にソースコードを添付すること」という条件が課せられたとしたら、「なんて非常識な!」と、とまどうプロジェクトリーダーや関係者は多いでしょう。オープンソース・プロジェクトならばともかく、実行ファイルの中にはユーザーの個人情報を処理するコード、IDやパスワードというセンシティブな情報を扱う部分、時間をかけて開発した高度な分析ロジックなどがあり、ソースコードが開示されれば保護すべきものが保護できなくなってしまうおそれがあります。

 企業のコンプライアンスや情報セキュリティが重視される昨今では、ソースコードを厳重に管理し、勝手に持ち出したり、逆に個人コンピューターの持ち込みを厳しく制限している企業も少なくありません。特にパッケージソフトやゲームソフトにおけるソースコード保護の重要性は言うまでもないでしょう。

 しかし、.NET Frameworkで開発されたアプリケーションは、ソースコードがなくても、アプリケーション(実行ファイル)から元のソースコードへ、容易に逆コンパイルできてしまいます。.NETでは、「アセンブリ」と呼ばれる構成単位が、相互作用できる情報(メタデータ)を保持しているため、これを使って内部を解析しやすくなっているのです (注1)。

注1

 Javaでも同様です。逆に、C/C++言語用の逆コンパイルツールは存在しますが、それほど高精度ではありません。

逆コンパイラ技術の進歩と脅威

 現在、逆コンパイラの技術がどのように進化しているかを、簡単なプログラムを使って示します。リスト1は、簡単なコンソールアプリケーションを抜粋したものです。

リスト1 ソースコード(抜粋)
static void CalcRank()
{
    Array.Clear(count, 0, MAXNUM);      // 得点別配列をクリア
    for (int i = 0; i < MAXNUM; i++)    // 全員に対し得点別の配列をカウントアップ
        count[score[i]]++;
    int j = 0;                          // 最高点の人の順位(0基準)
    for (int i = MAXSCORE; i >= 0; i--) // 最高点から順に順位づけ
    {
        ptsrank[i] = j;
        j += count[i];
    }
    for (int i = 0; i < MAXNUM; i++)
        rank[i] = ptsrank[score[i]];   // 得点別順位を全員に割り当てる
}

 ここでは、.NET Reflectorという.NET用の逆コンパイラツールを使います 。図1は、リスト1で生成された実行ファイルを逆コンパイルしている様子です。ここではデバッグ情報を持たないReleaseビルド版を扱っていますが、デバッグ情報が残っていれば定数シンボルやローカル変数の名前を含めて、さらに正確な逆コンパイルリストが得られます。しかも、逆コンパイル時には言語を「C#」や「Visual Basic」など好きな言語を選択できます。

図1 .NET Reflectorによる解析画面
図1 .NET Reflectorによる解析画面

 コンパイラは、選んだ言語の文法に沿ってプログラムコードから.NET用のコード(IL、中間言語)を生成します。この変換の仕方を分析し、生成されたコードから元のプログラムを推測するのが逆コンパイラの仕組みです。コード生成のパターン分析は着実に進歩しており、LINQやラムダ式を使う最新版の.NET Frameworkにも対応しています。また、.NET Frameworkが、プログラミングの柔軟性を高めるために、アセンブリ中にさまざまなメタデータを埋め込んでいることも精度の高い解析に役立っています。

 C#やVisual Basicのような言語レベルに復元されてしまうと、プログラムの理解は容易です。とくに「コメントがなくても分かりやすいプログラム」を書いている場合は、ソースコードが公開されているのと似たような状態だと言えます。つまり、開発プロジェクトの中で、ソースコードの持ち出しを厳しく制限していても、知的財産の保護や情報セキュリティの面でリスクにさらされてしまうのです。

 .NET Reflectorの単体版は無料です。開発中のプロジェクトがあれば、手元の実行ファイルで逆コンパイルを試してみてもよいでしょう。おそらく想像以上に正確なソースコードが得られるはずです。

次のページ
難読化による防御

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
特集記事連載記事一覧

もっと読む

この記事の著者

株式会社エージーテック(エージーテック)

弊社エージーテックは、豊富なノウハウと卓越した先見性で、企業のITソリューションをトータルにサポート。世界中で高い評価を集めるソフトウェアやITプロダクツを厳選し提供しています。豊富な経験と実績に裏付けられたローカライズやカスタマーサポート、さらには開発者支援プログラムの充実など積極多彩な事業を展開。ホームページ:http://www.agtech.co.jp/

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/5444 2010/09/30 17:00
" ); }

おすすめ

アクセスランキング

  1. 1
    1/10まで全文無料公開、人気の入門書シリーズ『いきなりプログラミング Androidアプリ開発』
  2. 2
    ガントチャートをWebアプリに組み込める「ガントシート」でプロジェクト管理機能を作成してみよう NEW
  3. 3
    高校生向けの無料Pythonプログラミング講座プラットフォーム「ハイスクールPython」、3月の公開を予定 NEW
  4. 4
    科学技術計算とデータサイエンスを融合したPythonカンファレンス「SciPyDataJapan 2025」が1月25日に開催 NEW
  5. 5
    デスクトップアプリ開発に必要な「Rust」の文法を理解しよう
  1. 6
    "けしからん"精神が切り拓く未来──IPA登氏が語る、技術大国・日本が目指す復活戦略
  2. 7
    アジャイル開発の推進において、必ずしも"すごい人"は必要ない──現場のエンジニアがDevOps推進で実現する組織改革
  3. 8
    テストは増え続ける、でもボトルネックにはできない──テスト効率化の2つのカギを朱峰 錦司氏が解説!
  4. 9
    デスクトップアプリを開発しよう! 「Rust」と「Tauri 2.0」の基本情報と環境整備の仕方を解説
  5. 10
    2025年1月に開催される注目のITエンジニア向けカンファレンス5選

アクセスランキング

  1. 1
    1/10まで全文無料公開、人気の入門書シリーズ『いきなりプログラミング Androidアプリ開発』
  2. 2
    ガントチャートをWebアプリに組み込める「ガントシート」でプロジェクト管理機能を作成してみよう NEW
  3. 3
    高校生向けの無料Pythonプログラミング講座プラットフォーム「ハイスクールPython」、3月の公開を予定 NEW
  4. 4
    科学技術計算とデータサイエンスを融合したPythonカンファレンス「SciPyDataJapan 2025」が1月25日に開催 NEW
  5. 5
    デスクトップアプリ開発に必要な「Rust」の文法を理解しよう
  6. 6
    "けしからん"精神が切り拓く未来──IPA登氏が語る、技術大国・日本が目指す復活戦略
  7. 7
    アジャイル開発の推進において、必ずしも"すごい人"は必要ない──現場のエンジニアがDevOps推進で実現する組織改革
  8. 8
    テストは増え続ける、でもボトルネックにはできない──テスト効率化の2つのカギを朱峰 錦司氏が解説!
  9. 9
    デスクトップアプリを開発しよう! 「Rust」と「Tauri 2.0」の基本情報と環境整備の仕方を解説
  10. 10
    2025年1月に開催される注目のITエンジニア向けカンファレンス5選
  1. 1
    いいエンジニアになるための2つのポイント ──元Google技術者・石原氏が説く「シリコンバレー流ソフトウェア開発術」
  2. 2
    「CUDA」 ~マンガでプログラミング用語解説
  3. 3
    アジャイル開発の推進において、必ずしも"すごい人"は必要ない──現場のエンジニアがDevOps推進で実現する組織改革
  4. 4
    デスクトップアプリを開発しよう! 「Rust」と「Tauri 2.0」の基本情報と環境整備の仕方を解説
  5. 5
    デスクトップアプリ開発に必要な「Rust」の文法を理解しよう
  6. 6
    "けしからん"精神が切り拓く未来──IPA登氏が語る、技術大国・日本が目指す復活戦略
  7. 7
    Google、社内AIエージェント「Google Agentspace」発表
  8. 8
    JavaScriptのWebフレームワーク、「Astro 5.1」リリース
  9. 9
    テストは増え続ける、でもボトルネックにはできない──テスト効率化の2つのカギを朱峰 錦司氏が解説!
  10. 10
    管理職の24.1%、今後管理職を「続けたくない」と回答。理由は「責任やストレス」が最多に

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

メールバックナンバー

アクセスランキング

  1. 1
    1/10まで全文無料公開、人気の入門書シリーズ『いきなりプログラミング Androidアプリ開発』
  2. 2
    ガントチャートをWebアプリに組み込める「ガントシート」でプロジェクト管理機能を作成してみよう NEW
  3. 3
    高校生向けの無料Pythonプログラミング講座プラットフォーム「ハイスクールPython」、3月の公開を予定 NEW
  4. 4
    科学技術計算とデータサイエンスを融合したPythonカンファレンス「SciPyDataJapan 2025」が1月25日に開催 NEW
  5. 5
    デスクトップアプリ開発に必要な「Rust」の文法を理解しよう
  1. 6
    "けしからん"精神が切り拓く未来──IPA登氏が語る、技術大国・日本が目指す復活戦略
  2. 7
    アジャイル開発の推進において、必ずしも"すごい人"は必要ない──現場のエンジニアがDevOps推進で実現する組織改革
  3. 8
    テストは増え続ける、でもボトルネックにはできない──テスト効率化の2つのカギを朱峰 錦司氏が解説!
  4. 9
    デスクトップアプリを開発しよう! 「Rust」と「Tauri 2.0」の基本情報と環境整備の仕方を解説
  5. 10
    2025年1月に開催される注目のITエンジニア向けカンファレンス5選

アクセスランキング

  1. 1
    1/10まで全文無料公開、人気の入門書シリーズ『いきなりプログラミング Androidアプリ開発』
  2. 2
    ガントチャートをWebアプリに組み込める「ガントシート」でプロジェクト管理機能を作成してみよう NEW
  3. 3
    高校生向けの無料Pythonプログラミング講座プラットフォーム「ハイスクールPython」、3月の公開を予定 NEW
  4. 4
    科学技術計算とデータサイエンスを融合したPythonカンファレンス「SciPyDataJapan 2025」が1月25日に開催 NEW
  5. 5
    デスクトップアプリ開発に必要な「Rust」の文法を理解しよう
  6. 6
    "けしからん"精神が切り拓く未来──IPA登氏が語る、技術大国・日本が目指す復活戦略
  7. 7
    アジャイル開発の推進において、必ずしも"すごい人"は必要ない──現場のエンジニアがDevOps推進で実現する組織改革
  8. 8
    テストは増え続ける、でもボトルネックにはできない──テスト効率化の2つのカギを朱峰 錦司氏が解説!
  9. 9
    デスクトップアプリを開発しよう! 「Rust」と「Tauri 2.0」の基本情報と環境整備の仕方を解説
  10. 10
    2025年1月に開催される注目のITエンジニア向けカンファレンス5選
  1. 1
    いいエンジニアになるための2つのポイント ──元Google技術者・石原氏が説く「シリコンバレー流ソフトウェア開発術」
  2. 2
    「CUDA」 ~マンガでプログラミング用語解説
  3. 3
    アジャイル開発の推進において、必ずしも"すごい人"は必要ない──現場のエンジニアがDevOps推進で実現する組織改革
  4. 4
    デスクトップアプリを開発しよう! 「Rust」と「Tauri 2.0」の基本情報と環境整備の仕方を解説
  5. 5
    デスクトップアプリ開発に必要な「Rust」の文法を理解しよう
  6. 6
    "けしからん"精神が切り拓く未来──IPA登氏が語る、技術大国・日本が目指す復活戦略
  7. 7
    Google、社内AIエージェント「Google Agentspace」発表
  8. 8
    JavaScriptのWebフレームワーク、「Astro 5.1」リリース
  9. 9
    テストは増え続ける、でもボトルネックにはできない──テスト効率化の2つのカギを朱峰 錦司氏が解説!
  10. 10
    管理職の24.1%、今後管理職を「続けたくない」と回答。理由は「責任やストレス」が最多に