システム開発

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

2020年7月15日

リバースエンジニアリング(reverse engineering)

リバースエンジニアリングって何?

リバースエンジニアリング(reverse engineering)とは、出荷された製品や既存のソフトウェアを入手して分解や解析などを行い、プログラムの仕様やソースコードを導き出すことをいいます。

 

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

上記図は、リバースエンジニアリングの例です。既存のソフトウェアを入手して、逆コンパイル(ソースコードに戻す)、そして、ソースコードからプログラムの仕様を導き出しています。

既にあるソフトウェアを再利用することで、新規開発や旧システムの保守などの手助けとなります。

ポイント

リバースエンジニアリングとは、ソフトウェアからソースコードに戻すこと。

リバースエンジニアリングの問題点

リバースエンジニアリングの問題点としては、出荷された製品や既存のソフトウェアのソースコードが解析できることで、技術や製品仕様が流出するという問題があります。

しかし、リバースエンジニアリングされたことを想定し、リバースエンジニアリングされたソースコードを分析・解析することで自社ソフトウェアに脆弱性がないかを確認することができ、適切なセキュリティ対策を取る事もできます。

リバースエンジニアリングの注意点

出荷された製品や既存のソフトウェアからソースコードを入手する手法であるリバースエンジニアリングですが、元となるソフトウェア権利者に許可なく、新規ソフトウェアの開発・販売を行うと、知的財産権(特許権や著作権)の侵害にあたる可能性があるため注意が必要です。

 

ただし、2019年1月の法改正でサイバーセキュリティ確保などを目的としたリバースエンジニアリングについては、合法となっています。

リバースエンジニアリングへの対策

リバースエンジニアリングへの対策には次のような手法があります。

データを難読化する

リバースエンジニアリングへの対策の一つが「難読化」です。

難読化とは「意味のないプログラムコードを挿入する」「曖昧で理解しにくいアルゴリズムにする」なとの方法があり、人間から見たデータの可読性を低下させることが目的です。

データを暗号化する

「データの難読化」よりも高い効果を期待できるのが「データの暗号化」です。ソースコードのファイル自体を暗号化し、解読用の鍵がないと読めないようにするものです。

プログラムが実行される際には一時的に復号され、それ以外のときは暗号化によって守られる形です。

helpful