現在、主に.NET環境(C#又はVB)を利用しており、社内の技術者もそれらに関する技術を習得しております。
しかし、.NET環境でコンパイルされたバイナリはご存じのように逆コンパイルが容易にできその点について.NET環境での開発ではなく、C++等でより安全(ここでいう安全とはソースコードの保持を指します)な方法をとるべきだという意見が多数出ています。
たしかにその方が安全ではあると思うのですが、そもそも社内のこれまでの主要な開発は.NET環境で行っており、C++等での開発はほぼおこなっていない為、製品の品質や開発要員の問題も気になるところです。
こういったケースの場合、皆様はどのように対応されているのでしょうか?
(1)やはりC++等.NET以外で開発を行う(一部DLL化も含む)
(2)そもそも逆コンパイル等を行うケースは希だと考え.NET環境で開発を行う
(3)その他の対応
そもそも.NET環境で難読化以外の技術的な対策があればよいのですが・・・
経験に基づくご意見がいただければと思います。
Visual Studio .NET 2003であれば「Dotfuscator Community Edition」という逆コンパイル難読化ツールが提供されています。
これ自体の是非はともかくとして「すべてのコードを隠蔽」する必要は無いのでは?
.NET から外のコードの呼び出しはちと面倒ではあるけど。
そのフリーソフトにおいて「隠蔽すべき重要な項目」がどの程度あるかも
考慮に含めた方がいいと思う。
コメントありがとう御座います。
>>C++等でより安全(ここでいう安全とはソースコードの保持を指します)な方法をとるべきだ
>これ自体の是非はともかくとして「すべてのコードを隠蔽」する必要は無いのでは?
>.NET から外のコードの呼び出しはちと面倒ではあるけど。
そうですね、この点についてはビジネスロジック部分の重要なところや
セキュリティ的に開示すべきでない部分のみDLL化やWebサービス化する方向で
意見はまとまりつつありますね。
社内的に.NETによる開発が一般的になったので、そういった意味では、
受託業務以外の開発での.NETの利用のリスクについて真剣に話し合ういい機会であったと思います。
上記でも述べたように、オープンソース開発でもそうですが、
コードの開示によるプラスの面もあるということも認識しています。
そういった意味で、他の会社の方の対応状況やご経験が伺えればなぁと思った次第です。
.netではなく,c++とc言語を使っています。非常に機密性の高い特許をいくつか含むロジックを組んでいますが
逆アセンブルしても,おそらくロジックは理解できないと思っています。
言い方悪いですが,.net系はC系とかデルファイと違って所詮インタプリタですので機密保持するほどのロジックが書けるとは思えない
,ゆえに隠匿するほど心配する必要はないのではないかと。
開発言語が.NET系であれ、C言語やC++などのネイティブ系であれ、対象となるバイナリがある以上は最終的に解読されることには変わりなく、その差はまさしく「敷居」の差でしかありません。
ノウハウを持った技術者が高機能な逆アセンブラを使えばネイティブアプリでも解読の容易性が高まります。難読化が施されていないコードの場合、C/C++でもソースコードレベルまで再構築できる場合もあります。
ある意味でむしろ何も考えずに作ったネイティブアプリよりも難読化した.NETアプリの方が敷居は高いと思います。
リバースエンジニアリングのされにくさという点では、敷居の高さの順で
難読化ネイティブ>難読化.NET>>>無対策ネイティブ>無対策.NET
といった感じでは。
コメントありがとう御座います。
>言い方悪いですが,.net系はC系とかデルファイと違って所詮インタプリタですので機密保持するほどのロジックが書けるとは思えない
,ゆえに隠匿するほど心配する必要はないのではないかと。
確かにそのご指摘は当たっていると認識しております。
社内で議論になっている部分の大半はビジネス特許的な物であり技術特許ではないのも事実です。
そういった意味では隠匿するレベルかと問われると費用対効果では苦しいのかもしれません。
コメントありがとう御座います。
コメントありがとう御座います。
>クライアントサイドで動作するバイナリを公開する時点でいわゆる「完全な対策」などありえません。
>開発言語が.NET系であれ、C言語やC++などのネイティブ系であれ、対象となるバイナリがある以上は最終的に解読されることには変わりなく、その差はまさしく「敷居」の差でしかありません。
おっしゃる通りだと思います。
>リバースエンジニアリングのされにくさという点では、敷居の高さの順で
>難読化ネイティブ>難読化.NET>>>無対策ネイティブ>無対策.NET
>といった感じでは。
この点は、私の認識と異なっておりました。
バイナリからの逆コンパイルは巷で噂になることはあれどそれほど実用的なものがあるとは思っておりませんでした。
お教えいただいたレベル間であれば難読化を施した.NETアプリも十分に価値のあるものであると考えることができます。
コメントありがとう御座います。