# リバースエンジニアリングとは

完成したソフトウェアや製品を解析して、仕組みや仕様を把握する手法です。実施前に権利・契約と調査範囲を確認し、結果は実際の挙動と比較して検証する必要があります。

## リバースエンジニアリングとは

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

![上段の順方向の開発は、要件、設計、実装、製品の順序です。下段のリバースエンジニアリングは、完成した製品を解析し、設計図に相当する情報を復元する順序です](https://media.marketing.kdotdev-tunnel.org/glossary-reverse-engineering-e080dc4acbbe984ae974563876da3b6d5060d4d66915fee1eed872a887b92854.png)

## リバースエンジニアリングの用途

### 仕様不明の資産の把握

設計書を更新しないまま改修を反復したシステムでは、仕様を誰も把握できなくなることがあります。IPA（Innovation Platform Agency, Japan）の[レガシーシステム刷新ハンドブック](https://www.ipa.go.jp/digital/dx/hjuojm000000eem6-att/000089583.pdf)は、この状態をブラックボックス化として説明し、刷新の前段階として現行システムの概要仕様を復元する手順を提示しています。

### 互換性の確保と相互運用

他社の製品やデータ形式と接続したいが、接続時に送受信する情報や手順であるインターフェースが公開されていない場合は、対象に応じて通信の内容やファイルの構造を調査し、接続用のプログラムを作成します。

### 脆弱性とマルウェアの調査

製品の弱点や不正なプログラムの動作を調査する目的でも利用し、解析には[逆アセンブラ、デコンパイラ、デバッガ](https://csrc.nist.gov/glossary/term/code_analysis)を使用します。逆アセンブラは機械語を人が読解できる形に変換し、デコンパイラは元のソースコードの再構成を試行し、デバッガは実行を一歩ずつ追跡します。

![解析の対象と目的。仕様が不明な既存システムは概要仕様を復元します。接続方法が非公開の製品は接続用プログラムを作成します。製品の弱点や不正なプログラムは、弱点や動作を調査します](https://media.marketing.kdotdev-tunnel.org/glossary-reverse-engineering-1ff76cb928245954d88b485cf46bc4057cfbc345b35474a2e48fe2f5dada1eca.png)

## 解析で分かることと分からないこと

復元できるのは主に、プログラムが何をしているかという処理の仕様です。例えば割引の適用条件や計算式は、コードから確認できる場合があります。なぜその条件を採用したか、今も必要かは、[プログラム解析だけでは確定できません](https://www.ipa.go.jp/digital/dx/hjuojm000000eem6-att/000089583.pdf)。

![コードの解析で分かるのは割引条件や計算式といった処理の仕様。条件を採用した理由と今も必要かは、解析だけでは確定できず、資料や担当者への確認で補完する](https://media.marketing.kdotdev-tunnel.org/glossary-reverse-engineering-41fbfd25d0f0e36d44e7bc19bba531073f8ead75ddcf0baa303adcaf28583180.png)

ソースコードは人が記述したプログラム、実行ファイルは実行可能な形に変換済みのものです。資料やコードの種類により、調査範囲、不確実な点、必要な検証が変化します。

- 設計書が不十分でソースコードがある場合: 処理の流れと条件を直接確認できるが、稼働中の版との一致が不確実で、検証が増加する
- 設計書もソースコードも不十分な場合: 画面、データ、通信内容、担当者への確認から仕様を構築するため、確認できない部分が生じやすい
- 実行ファイルしかない場合: 逆アセンブルやデコンパイルで解析する。[出力の解釈には人の判断が必要](https://technav.ieee.org/topic/reverse-engineering/)で、[不完全な部分を補完するテストの時間も増加する](https://www.ipa.go.jp/digital/dx/hjuojm000000eem6-att/000089583.pdf)

改修の判断に利用する流れの例です。割引の計算を改修するときは、コードから適用条件と計算式を確認し、実際の入力への現行システムの結果と比較します。確認できなかった事項は未確認として記録します。

![コードから条件と計算式を確認し、実際の入力に対する結果と比較します。一致したものは改修の判断に利用し、一致を確認できなかったものは未確認として記録します](https://media.marketing.kdotdev-tunnel.org/glossary-reverse-engineering-6e9ccaf3eebcd6cf503d0bed9d857c2b1e4f475a27fb937aca77738686764d44.png)

## 適法性の見方

以下は一般的な整理です。個別の案件では契約書と権利関係を確認し、弁護士にも相談します。

### 著作権法

プログラムの多くは著作権法の保護対象であり、平成30年の改正前は、解析のための複製や改変が複製権や翻案権の侵害になる可能性がありました。複製権は複製する権利、翻案権は翻訳や変形で改作する権利です。改正で新設された[著作権法第30条の4](https://laws.e-gov.go.jp/law/345AC0000000048)は、思想や感情の享受を目的としない場合に、必要と認められる限度で著作物の利用を許容しています。著作権者の利益を不当に害する場合は対象外です。

プログラムの場合の享受とは、実行を通じて機能の効用を得ることを意味します。文化庁の[Q&A](https://www.bunka.go.jp/seisaku/chosakuken/hokaisei/h30_hokaisei/pdf/r1406693_17.pdf)は、調査解析を目的とする利用は享受を目的としない利用に該当し、第30条の4の対象になるとの見解を示しています。主たる目的が享受でなくても、同時に享受の目的もある場合は適用されないとの見解も示しています。

文化庁の資料は司法判断を拘束しないという注記が、[サイバーセキュリティ関係法令Q&Aハンドブック](https://security-portal.cyber.go.jp/guidance/pdf/law_handbook/law_handbook_3.pdf)のQ25にあります。同ハンドブックは享受目的でないことの立証方法として、解析専用のパソコンと解析の記録を例示しています。

![第30条の4の確認の流れ。機能を利用して効用を得る目的、つまり享受の目的もあるかを確認します。次に、著作権者の利益を不当に害するかを確認します。どちらも該当しない場合は必要な限度で解析し、契約と不正競争防止法は別に確認します。どちらかに該当する場合は、第30条の4の対象外として弁護士に相談します](https://media.marketing.kdotdev-tunnel.org/glossary-reverse-engineering-5baa12101c5c9d487a375d5205f81e067e3d8fed03182b7d35b5103c60eb1b98.png)

第30条の4は[著作権法第50条](https://laws.e-gov.go.jp/law/345AC0000000048)により、公表権、氏名表示権、同一性保持権を総称する著作者人格権に影響しません。改変が当然に許容されるわけではありません。

### 不正競争防止法

[不正競争防止法](https://laws.e-gov.go.jp/law/405AC0000000047)は営業秘密の開示を受けた者が不正の利益を得る目的で使用する行為を不正競争としています。市販品では知的財産高等裁判所の[平成23年7月21日判決](https://www.courts.go.jp/assets/hanrei/hanrei-pdf-81539.pdf)が、市場で流通している製品から容易に取得できる情報は、営業秘密の要件である公然と知られていないものに該当しないと判示しています。

技術的制限手段は、機器が特定の反応をする信号や、特定の変換を必要とする情報を記録・送信する方式で、プログラムの実行や情報の記録などを制限する手段です。営業上用いられる技術的制限手段について、その効果を妨げて利用を可能にする装置、プログラム、役務の提供は、[同法第2条第1項第17号・第18号](https://laws.e-gov.go.jp/law/405AC0000000047)により不正競争に該当する場合があります。ほかの機能を併せて有する装置やプログラムは、回避用途に供する場合に限られます。試験や研究のための提供には同法第19条第1項第10号の適用除外があります。

### 利用許諾契約

利用規約に、逆アセンブルやリバースエンジニアリングを禁止する条項が含まれていることがあります。独占禁止法上違法な条項は[民法第90条により無効となる可能性があります](https://security-portal.cyber.go.jp/guidance/pdf/law_handbook/law_handbook_3.pdf)。一方、著作権法が権利を制限する部分に利用制限を課す条項の効力は、[有効とも無効とも様々な考え方](https://security-portal.cyber.go.jp/guidance/pdf/law_handbook/law_handbook_3.pdf)があり得るため、解析前に該当条項を確認します。

## コストと運用リスク

- 工数: 範囲の拡大で費用と時間が増加するため、[対象を十分に限定することが重要とされる](https://www.ipa.go.jp/digital/dx/hjuojm000000eem6-att/000089583.pdf)
- 人材: 対象の言語、データ構造、通信方式を解読できる技術者が必要で、実行ファイルでは逆アセンブルなどの専門技能も必要
- 検証: 復元が不完全な分、同等に稼働することを確認するテストが増加する
- 実行を伴う解析の安全: マルウェアの実行や本番システムへの試験入力では、対象の管理者と実施範囲を確認し、本番から隔離した環境で行う。NICT（National Institute of Information and Communications Technology）の[調査](https://cynex.nict.go.jp/pdf/library/WP_MAinSO.pdf)が指摘する、誤実行による感染拡大と機密情報の漏えいにも備える。解析用データの準備、機密情報の管理、環境復旧の費用も見積もる
- 維持: 改修のたびに、仕様の更新と業務の責任者による確認の体制が必要で、更新しなければ同じブラックボックスが再発しうる

見積もりには、解析、実際の挙動との比較、仕様書の更新までを含めます。

![見積もりに含める範囲の3つの内訳です。解析には工数、人材、隔離環境が必要です。実際の挙動との比較ではテストが増加します。仕様書の更新には改修のたびの更新体制が必要です](https://media.marketing.kdotdev-tunnel.org/glossary-reverse-engineering-393e723caced8be1c9ccce9c1b57db35105728619fe70fd9d77d3f5fb2e82163.png)

## 解析の範囲と目的の設定

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

![最初に資料と担当者へ確認します。情報の不足、または資料と実装の一致を確認する部分があれば、その部分を解析で補完します。なければ資料と担当者への確認で決定します](https://media.marketing.kdotdev-tunnel.org/glossary-reverse-engineering-d14fd1a21552abc8406b649d2a61e9536733a0857be97f4ce5372553e6b84e92.png)

優先する目的と成果物を決定します。仕様の把握が目的なら、対象機能を詳細に解析し、周辺は依存関係の把握に限定します。

業務上の理由の把握が目的の場合、コード解析だけでは不十分です。処理内容の把握と、資料や担当者への確認は区別します。担当者も資料もないときは理由を不明として記録します。

競合製品の複製が目的の場合は、解析とその後の製品化を区別し、契約と不正競争防止法を確認します。

![解析の目的ごとの進め方。仕様の把握なら対象機能を詳細に解析します。業務上の理由なら、コード解析だけにせず資料と担当者に確認します。競合製品の複製なら、解析と製品化を区別し、契約と不正競争防止法を確認します](https://media.marketing.kdotdev-tunnel.org/glossary-reverse-engineering-da2591b49d3d2d56de0204072f7e7d1e7fd7f92706f297ba301cb7a0e7b3a3d8.png)

## よくある誤解

一律に違法という見方は、調査解析目的の利用を第30条の4の対象と解する[文化庁の解説](https://www.bunka.go.jp/seisaku/chosakuken/hokaisei/h30_hokaisei/pdf/r1406693_17.pdf)と一致しません。

デコンパイラの出力は元のソースコードの近似です。

![元のソースコードを変換して実行ファイルを作成し、デコンパイラで実行ファイルからソースコードの近似を得る](https://media.marketing.kdotdev-tunnel.org/glossary-reverse-engineering-ff20579a7b69ad12c0c9132dd3cd6d0249448d016896898c381c8bb37125a4af.png)
