どうも!ひよこSE(@PiyoOct)です。
リバースエンジニアリングって何?
リバースエンジニアリングをひとことでわかりやすく言えば、「動いているプログラム(製品)から仕様と設計を探ること」です。
「リバース(reverse)」の文字通り、「逆」です。ここでいう「逆」は、「システム開発の手順」のこと。
本来のシステム開発の手順は下記の通り。
リバースエンジニアリングは、「逆」の手順をふむので
「ん?それダメなんじゃ?」と思った人はするどいです。まぁ、いろいろと事情はあれど、普通に使われている技術の1つだったりします。
リバースエンジニアリングとは、プログラムから仕様と設計を探ること
リバースエンジニアリングとは、「動いているプログラム(製品)から仕様と設計を探ること」です。
システム開発の手順
リバースエンジニアリングを理解するにあたって、「SEの仕事内容は?わかりやすく4つに分類して文系大学生向けに現役SEが説明」で書いている、システム開発の手順を知っておくとスムーズです。
さらに簡単に書くと、こんな感じ。
- 「ドラクエを作りたい」というのを決めて(要件定義)
- プログラムで「どう実現するのか?」を決める(基本設計・詳細設計)
- ソースコードを書いてプログラム(製品)にする
- テストして、世に製品として出す
リバースエンジニアリングは、逆の手順をふむ
リバースエンジニアリングは、reverseの英語の通り、逆の手順をふみます。
- 世に製品として出されている「ドラクエ」をみて
- ドラクエのプログラムを、ソースコードに戻す(「逆コンパイル」って言ったりする)
- ソースコードを見て、「どう実現されているのか?」の設計を探る
- 「ふむふむ。こうやって『ドラクエ』が作られてるんだな♪」ってなる
というのが、リバースエンジニアリング。
ひとことでまとめると、「動いているプログラム(製品)から仕様と設計を探ること」となります。
リバースエンジニアリングの問題点は、著作権
「ふむふむ。こうやって『ドラクエ』が作られてるんだな♪」って、それ、マズいんじゃないの?
と思った人は、なかなかするどいです。
全くもってその通りであって、早い話が「パクリ」や、「改造」ができてしまいます。
リバースエンジニアリングのパクリや改造は、当然ダメ
ひよこSEは、法律の専門家ではないので、断言はできないけど(大人の言い訳)。下記のように考えています。
- リバースエンジニアリング(プログラムを解析すること)自体は違法でない
- ただ、改造・パクリをして自分のものにしたり、それでお金儲けするのは違法
※参考URL:リバースエンジニアリングは違法?法律上の注意点をわかりやすく解説
ドラクエには、商標権(ロゴ)・著作権(自分が作ったからマネするな)・特許権(その技術使うならカネよこせ)というのがあるので。
どこかの個人なり会社が、ドラクエのプログラムを改造して、あたかも「自社の製品」として販売するのは、当然ながら違法です。
例外は、オプションやカスタマイズを認めている場合
「改造」や「パクリ」は違法と書いたのだけど。これまた、ちょいと難しいのです。
例えば、X社が販売する製品Aというのがあったとして
X社の製品Aを買いたいです。ただ、●●の機能もあると、もっと使いやすいです。
オプション代は、当然払います!
みたいことを言ってくれる会社があったら。X社はよろこんで、オプションをつけます。
ただ、X社だけで、「製品Aのカスタマイズをやりきれないなぁ~。他社に依頼したい」となった場合。
「オプションつけるためにプログラムを変えていいよ」といって、システム開発会社S社に、カスタマイズを外注することもあるわけで。
「X社が認めたカスタマイズは、リバースエンジニアリングをしたうえで他社がやる」というのは、割と普通にあります。
リバースエンジニアリングでプログラムを変える場合は、何でも違法というわけでもなく、販売元が認めている範囲で「カスタマイズ」、つまりは問題なしになると思ってください。
基本情報にはここまで出ないかもだけど、知っておいて損はないです!
「リバースエンジニアリング」と「リエンジニアリング」の混同に注意
一つおせっかいですが、「リバースエンジニアリング」と「リエンジニアリング」の混同に注意してください。
もう、やめてくれよ・・・
混ざりそうな問題が、平成24年春期の基本情報に出ているので(*´ω`)。
「リエンジニアリング」の「リ」は、「Re:ゼロから始める異世界生活」の「リ」ですね~
「リバース」=「逆」、「リ(=Re)」=「もう一回」と覚えておけばよし。
まとめ
リバースエンジニアリングときたら「動いているプログラム(製品)から仕様と設計を探ること」です。
「リバース(reverse)」の文字通り、「システム開発の手順の逆」をやって、「どんなプログラムなのか?」を探りに行きます。
パクリはダメだけど、製品のカスタマイズをしたいときに、プログラムから仕様を探るための技術だと思ってくださいまし(-_-;)。
コメント