リバースエンジニアリングとは
リバースエンジニアリングは、完成したソフトウェアや製品を解析して、仕組みや仕様を把握する手法です。元の設計文書がない状態で、既存のシステムから設計、構造、機能を抽出する過程とされています。例えば、仕様書がない業務システムの計算規則や他システムとの連携を、プログラムやデータの調査から文書化します。順方向の開発は要件、設計、実装の順に製品を作成します。リバースエンジニアリングは逆に、製品から設計図に相当する情報を復元します。完成した機械を分解して設計図を作成する作業に近く、解析そのものの目的は複製ではなく対象の理解です。用途は仕様が分からなくなった資産の把握、他の製品との接続、脆弱性の調査などです。

リバースエンジニアリングの用途
仕様不明の資産の把握
設計書を更新しないまま改修を反復したシステムでは、仕様を誰も把握できなくなることがあります。IPA(Innovation Platform Agency, Japan)のレガシーシステム刷新ハンドブックは、この状態をブラックボックス化として説明し、刷新の前段階として現行システムの概要仕様を復元する手順を提示しています。
互換性の確保と相互運用
他社の製品やデータ形式と接続したいが、接続時に送受信する情報や手順であるインターフェースが公開されていない場合は、対象に応じて通信の内容やファイルの構造を調査し、接続用のプログラムを作成します。
脆弱性とマルウェアの調査
製品の弱点や不正なプログラムの動作を調査する目的でも利用し、解析には逆アセンブラ、デコンパイラ、デバッガを使用します。逆アセンブラは機械語を人が読解できる形に変換し、デコンパイラは元のソースコードの再構成を試行し、デバッガは実行を一歩ずつ追跡します。

解析で分かることと分からないこと
復元できるのは主に、プログラムが何をしているかという処理の仕様です。例えば割引の適用条件や計算式は、コードから確認できる場合があります。なぜその条件を採用したか、今も必要かは、プログラム解析だけでは確定できません。

ソースコードは人が記述したプログラム、実行ファイルは実行可能な形に変換済みのものです。資料やコードの種類により、調査範囲、不確実な点、必要な検証が変化します。
- 設計書が不十分でソースコードがある場合: 処理の流れと条件を直接確認できるが、稼働中の版との一致が不確実で、検証が増加する
- 設計書もソースコードも不十分な場合: 画面、データ、通信内容、担当者への確認から仕様を構築するため、確認できない部分が生じやすい
- 実行ファイルしかない場合: 逆アセンブルやデコンパイルで解析する。出力の解釈には人の判断が必要で、不完全な部分を補完するテストの時間も増加する
改修の判断に利用する流れの例です。割引の計算を改修するときは、コードから適用条件と計算式を確認し、実際の入力への現行システムの結果と比較します。確認できなかった事項は未確認として記録します。

適法性の見方
以下は一般的な整理です。個別の案件では契約書と権利関係を確認し、弁護士にも相談します。
著作権法
プログラムの多くは著作権法の保護対象であり、平成30年の改正前は、解析のための複製や改変が複製権や翻案権の侵害になる可能性がありました。複製権は複製する権利、翻案権は翻訳や変形で改作する権利です。改正で新設された著作権法第30条の4は、思想や感情の享受を目的としない場合に、必要と認められる限度で著作物の利用を許容しています。著作権者の利益を不当に害する場合は対象外です。
プログラムの場合の享受とは、実行を通じて機能の効用を得ることを意味します。文化庁のQ&Aは、調査解析を目的とする利用は享受を目的としない利用に該当し、第30条の4の対象になるとの見解を示しています。主たる目的が享受でなくても、同時に享受の目的もある場合は適用されないとの見解も示しています。
文化庁の資料は司法判断を拘束しないという注記が、サイバーセキュリティ関係法令Q&AハンドブックのQ25にあります。同ハンドブックは享受目的でないことの立証方法として、解析専用のパソコンと解析の記録を例示しています。

第30条の4は著作権法第50条により、公表権、氏名表示権、同一性保持権を総称する著作者人格権に影響しません。改変が当然に許容されるわけではありません。
不正競争防止法
不正競争防止法は営業秘密の開示を受けた者が不正の利益を得る目的で使用する行為を不正競争としています。市販品では知的財産高等裁判所の平成23年7月21日判決が、市場で流通している製品から容易に取得できる情報は、営業秘密の要件である公然と知られていないものに該当しないと判示しています。
技術的制限手段は、機器が特定の反応をする信号や、特定の変換を必要とする情報を記録・送信する方式で、プログラムの実行や情報の記録などを制限する手段です。営業上用いられる技術的制限手段について、その効果を妨げて利用を可能にする装置、プログラム、役務の提供は、同法第2条第1項第17号・第18号により不正競争に該当する場合があります。ほかの機能を併せて有する装置やプログラムは、回避用途に供する場合に限られます。試験や研究のための提供には同法第19条第1項第10号の適用除外があります。
利用許諾契約
利用規約に、逆アセンブルやリバースエンジニアリングを禁止する条項が含まれていることがあります。独占禁止法上違法な条項は民法第90条により無効となる可能性があります。一方、著作権法が権利を制限する部分に利用制限を課す条項の効力は、有効とも無効とも様々な考え方があり得るため、解析前に該当条項を確認します。
コストと運用リスク
- 工数: 範囲の拡大で費用と時間が増加するため、対象を十分に限定することが重要とされる
- 人材: 対象の言語、データ構造、通信方式を解読できる技術者が必要で、実行ファイルでは逆アセンブルなどの専門技能も必要
- 検証: 復元が不完全な分、同等に稼働することを確認するテストが増加する
- 実行を伴う解析の安全: マルウェアの実行や本番システムへの試験入力では、対象の管理者と実施範囲を確認し、本番から隔離した環境で行う。NICT(National Institute of Information and Communications Technology)の調査が指摘する、誤実行による感染拡大と機密情報の漏えいにも備える。解析用データの準備、機密情報の管理、環境復旧の費用も見積もる
- 維持: 改修のたびに、仕様の更新と業務の責任者による確認の体制が必要で、更新しなければ同じブラックボックスが再発しうる
見積もりには、解析、実際の挙動との比較、仕様書の更新までを含めます。

解析の範囲と目的の設定
既存の資料と担当者への確認を先に行います。そのうえで、判断に必要な情報が不足する部分や、資料と実装の一致を確認する部分を解析で補完します。

優先する目的と成果物を決定します。仕様の把握が目的なら、対象機能を詳細に解析し、周辺は依存関係の把握に限定します。
業務上の理由の把握が目的の場合、コード解析だけでは不十分です。処理内容の把握と、資料や担当者への確認は区別します。担当者も資料もないときは理由を不明として記録します。
競合製品の複製が目的の場合は、解析とその後の製品化を区別し、契約と不正競争防止法を確認します。

よくある誤解
一律に違法という見方は、調査解析目的の利用を第30条の4の対象と解する文化庁の解説と一致しません。
デコンパイラの出力は元のソースコードの近似です。

お問合せ
事業の課題や技術的な悩みなどどんなことでもお聞かせください


