リバースエンジニアリング

リバースエンジニアリング（英:reverse engineering）とは、機械を分解したり、製品の動作を観察したり、ソフトウェアの動作を解析するなどして、製品の構造を分析し、そこから製造方法や動作原理、設計図などの仕様やソースコードなどを調査することを指す。
直訳すれば「逆算作業」といったものになるが、計算機科学の分野では「反転工学」と翻訳されることが多い。
一般的に工業製品の多くは、設計図や仕様書の概略程度しか公表されておらず、詳細な動作の原理などは公表されていない。
また、コンピュータ・プログラムのソースコードも、近年優勢なオープンソース製品では公開されており、広く検証されているものも多いが、プロプライエタリ商品の場合は一部を除き非公開のため、情報セキュリティ上の危険が（仮に）存在していても秘密扱いの場合がほとんどである。そのため、様々な技術や創意工夫が用いられているこれら工業製品についての技術的情報に関しては、公開された文献から入手できない場合が大半であり、時には危険が存在しても「秘密として法的に保護」されていることすらある（各種製造物責任法などにより対抗手段もないでもないが）。
また仮に自社開発した製品であっても、それが古い製品の場合、当時の技術者がすでに退職・死亡してしまっていたり、設計図や仕様書の所在が不明になったり、あるいはそもそも最初から作成されていなかったなどの事情により、十分な情報を得ることが不可能な場合がある。
こういった事情とも絡んで、非公開情報を入手するために、ひいては、より優れた製品の開発のためにも従来の工業製品やソフトウェア製品をリバースエンジニアリングすることによって使用されている技術を分析、調査、確認することは、現場での製品開発において欠かせないプロセスの一つともなっている。
日本の機械メーカーの中には輸入品のリバースエンジニアリングで技術を習得した企業もある。バルダンは当初婦人服メーカーであったが、輸入したミシンが要求を満たさずサポート体制も不十分だったことからリバースエンジニアリングによるコピー品の製造を計画、最終的には時流に合わせ自社設計の工業用自動ミシンメーカーへ転身した。
工業製品（自動車、製造機器など）を分解し、その内部構造や動作原理を探るリバースエンジニアリング自体は、原則的には「合法」行為であり、市販品などの秘密保持契約なしで合法的に入手できる製品・文献・情報について、リバースエンジニアリングを行うことに問題はない。ただし、解析行為によって得た中身そのものについての情報にもとづき、実装をそのまま真似したクローンを作って商業製品とすることには問題がある。従って、解析部門と開発部門を分ける「クリーンルーム手法」により、解析結果の「外側からの情報」だけを元に、再実装を行う。
知的財産権の概念が広まるまではリバースエンジニアリングによるコピー品が公然と販売されていたが、次第に訴訟が起こされるようになり一部の設計を変更することで回避する手段が執られるようになった。
電化製品や電子機器に於いては、動作上必要のない電子部品を意図的に取り付けたり、ダミーのパラメーターを設定するなど、設計をまるごとコピーしたものが製品化された際に容易に識別できる設計が意図的に盛り込まれることもある。
ソフトウェア（コンピュータプログラム）は著作権の保護を受けるものとされている（日本の著作権法では第10条1項9号）。そのうえで、米国判例上はリバースエンジニアリングはフェアユースの保護の範囲であるとされているが、たとえば日本などにはフェアユースがない。
日本ではリバースエンジニアリングは「違法」だと主張する向きもあったが、一例としては、中古ソフト撲滅運動など、BSAと並びプロプライエタリソフトウェア業界側の強硬な最右翼の一角であったACCSが、マルウェア被害などに対し（自分達がその攻撃の矢面に立たされ、手酷い被害を受けた結果として）マルウェアの解析が必要という現実を認識した結果、例えばアンチウイルスソフトを開発するためのコンピュータウイルスの解析を目的としたリバースエンジニアリングも違法となってしまう、といった見解を示すようになった。
現在の日本法での扱いは、著作権の権利制限のひとつとしてリバースエンジニアリングの適法化が検討され答申が出ている、という段階である。
特に、プロプライエタリソフトウェアに関しては、法ではなくライセンスあるいは契約の下で、逆アセンブルなどのリバースエンジニアリングでソースコードの抽出などを禁止する旨が書かれていることがほとんどだが、そのような条項は独占禁止法の見地からも問題があるとも言われている。
バージョン管理システムのBitKeeperは当初開発会社の厚意によりオープンソースや自由ソフトウェアのプロジェクトであれば無償利用できたが、機能制約や商用ツールであることに対してコミュニティからは不満の声が上がった。さらにアンドリュー・トリジェルが無償版には提供されていない機能を自由ソフトウェアで開発したことが会社に発覚し、無償版の提供が停止された。移行先としてオープンソースのシステムであるGitが開発され大きなシェアを得ることとなった。
ものづくりにおけるリバースエンジニアリングとは、製品の先行イメージとして作られたクレイモデルや、既に現物がある製品などの形状データを測定し、それをもとにCADデータを作成する(“起こす”)ことである。
3DCAD、および接触式、非接触式の3次元形状データ測定器が発達するにつれ、こういった方法が急速に普及している。3D CADを活用した製品の事前検討を行う際、CADでは作成しにくいデザインの微妙な変化が織り込まれた製品データや、2D図面しかない製品データを3D化したりする際に活用されている。
上の図は、自動車の開発における、リバースエンジニアリングの一例である。右上の絵から順に、クレイモデル、非接触カメラ撮影式の3次元計測器での形状データ測定、測定結果である点群データの張り合わせ、断面線の作成、3D CAD化、そして実車になる（CADと実車の間は、大きく段階が跳んでいる）。
コンピュータウイルスのオリジナルの作者以外が、コンピュータウイルスを入手した際、リバースエンジニアリングによってソースコードを入手し、本来なかった新しい機能を組み込んだり、特定の企業や組織を攻撃するように改造し再配布するといった事例が後を絶たない（改造されたウイルスは亜種と呼ばれる）。
なお、コンピュータウイルスやその他悪意のあるジョークプログラムのように、著作権者が名乗る可能性のないプログラムに関して、それが（この例では同一性保持権などが）著作権などで保護されるのかどうかという点は法的に議論になりうる。
マイクロソフトなどのサーバをDoS攻撃するMyDoomウイルスは、マイクロソフト側が懸賞金を掛け、2004年5月8日までに犯人逮捕に漕ぎ付けるまでに至ったものの、その後も同ウイルスの亜種発生は続き、同年7月26日にはMyDoom.Oに感染したパソコンから検索エンジンに向けて一斉に検索リクエストが殺到、一時的にGoogle等の主要検索サイトが応答しなくなる事件が発生した。このMyDoom.Oの作者は、偶然入手したコンピュータウイルスのMyDoomに対し、リバースエンジニアリングを行ってソースコードを入手・改造して、再配布を行なったと見られている。
この他にも、市販のソフトウェア製品（基本的にはプロプライエタリなソフトウェア）をリバースエンジニアリングによって解析し、本来ならばライセンスキーをインストール時に入力し、さらにはドングル（ハードウェアプロテクト）を常に接続しておかなければ動作しないソフトウェアを、それらがなくても動作するようにするプログラムを製作・配布する人物が、違法な不正コピーソフトウェアの蔓延を助長している例が挙げられる。
一方で、そういったマルウェアを解析し、危険性を分析する行為もまたリバースエンジニアリングであることに変わりはない。