Windows環境で利用するフリーソフトの開発を企画しており、その開発環境に関して悩んでおります。


現在、主に.NET環境(C#又はVB)を利用しており、社内の技術者もそれらに関する技術を習得しております。

しかし、.NET環境でコンパイルされたバイナリはご存じのように逆コンパイルが容易にできその点について.NET環境での開発ではなく、C++等でより安全(ここでいう安全とはソースコードの保持を指します)な方法をとるべきだという意見が多数出ています。

たしかにその方が安全ではあると思うのですが、そもそも社内のこれまでの主要な開発は.NET環境で行っており、C++等での開発はほぼおこなっていない為、製品の品質や開発要員の問題も気になるところです。

こういったケースの場合、皆様はどのように対応されているのでしょうか?

(1)やはりC++等.NET以外で開発を行う(一部DLL化も含む)
(2)そもそも逆コンパイル等を行うケースは希だと考え.NET環境で開発を行う
(3)その他の対応

そもそも.NET環境で難読化以外の技術的な対策があればよいのですが・・・

経験に基づくご意見がいただければと思います。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2010/01/13 03:03:47
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答4件)

id:mattn No.1

回答回数104ベストアンサー獲得回数23

ポイント15pt

Visual Studio .NET 2003であれば「Dotfuscator Community Edition」という逆コンパイル難読化ツールが提供されています。

id:VB2005

mattn様

ご回答ありがとう御座います。

難読化ツールについては、海外製の物やフリーソフトも含めて理解しております。

今回の課題は、難読化はあくまでも敷居を高くするに過ぎず完全な対策には成り得ないため、

そういった意味で.NETによる開発については議論が分かれているところです。

これまでは受託系が多かった物で、そもそも納品した物は相手方に地位が異転していたため

まったく気にしておりませんでした。

しかし、一般的に公開した場合はこれまでとは異なり、善意によるソースの閲覧と

悪意によるソースの閲覧の両方が考えられ、また、同様に盗用による自社への被害も

想定される為、議論を行っている次第です。

2010/01/06 17:12:07
id:pah00 No.2

回答回数208ベストアンサー獲得回数5

ポイント15pt

難読化ツールをつかえばどうでしょうか?

http://www.atmarkit.co.jp/fdotnet/tools/dotfuscator/dotfuscator_...

id:VB2005

pah00様

ご回答ありがとう御座います。

難読化ツールについては、海外製の物やフリーソフトも含めて理解しております。

今回の課題は、難読化はあくまでも敷居を高くするに過ぎず完全な対策には成り得ないため、

そういった意味で.NETによる開発については議論が分かれているところです。

2010/01/07 10:44:18
id:monamour555 No.3

回答回数12ベストアンサー獲得回数2

ポイント30pt

突き詰めて考えると,バイナリを渡した時点で,手詰まりではないでしょうか.

いわゆるマシン語と.NET ILとの間で,解析の手間が著しく異なるとは思えませんし.

難読化は,興味本位のリバースエンジニアリングに対してはかなり有効だと思いますよ.

心配なら,金はかけたほうがよいです.

Dotfuscator は Community Edition と Professional では難読化のレベルが全然違います.

どうしてもロジックを秘匿したいというのであれば,webサービスを絡めるというのはひとつの手でしょう.

ただし,運用コストは高くなりますが.

id:VB2005

monamour555様

ご回答ありがとう御座います。

>突き詰めて考えると,バイナリを渡した時点で,手詰まりではないでしょうか.

>いわゆるマシン語と.NET ILとの間で,解析の手間が著しく異なるとは思えませんし.

当社でも同様の認識で、一定の効果はあるかもしれませんが、本質的な対策には成り得ないと考えております。

>Dotfuscator は Community Edition と Professional では難読化のレベルが全然違います.

これは知りませんでした。

当社で利用しているものは確かチーム開発にも対応したエディションでしたのでProfessionalレベルの機能は

問題なく利用できたと認識しております。

情報ありがとう御座います。

>どうしてもロジックを秘匿したいというのであれば,webサービスを絡めるというのはひとつの手でしょう.

>ただし,運用コストは高くなりますが.

そうなんですよね。

かけるコストと、守るべき物(技術情報や潜在市場等)のバランスを如何に正確に読みバランスをとるかという

転につきないのだと思っています。

参考になりました。

2010/01/07 10:48:59
id:yamauchi45 No.4

回答回数12ベストアンサー獲得回数0

ポイント30pt

そうですね。配布しようと思うと.NETだとやはり何かしら難読化になるのだと思います。

まだ、企画時点ということなのですよね。会社の規模や、やり方、作ろうとしているものにも依存するのだとは思いますが、企画時点でこのことを考えるのではなくて、コアな部分だけでもいっそ設計して作りにいってしまってはどうでしょうか。

一部のDLL化やサービス化をするにしても、だいたいそうすべき部分は分かっているのだろうと思います。得意な.NET環境でまず作りに行って、あとからそれをビジネスにする場合にどうするか考えてもよいような気がします。(Googleだって、その資産をどうやってビジネスにするかは、最後に考えたはずです。)

ある程度意識して設計すれば、あとから変更したり作り直したりする部分も少なくてすみますし、なによりその時点でゼロから作るのではなくなるわけですから。

id:VB2005

yamauchi45様

ご回答ありがとうございます。

>まだ、企画時点ということなのですよね。会社の規模や、やり方、作ろうとしているものにも依存するのだとは思いますが、企画時点でこのことを考えるのではなくて、コアな部分だけでもいっそ設計して作りにいってしまってはどうでしょうか。

おっしゃるとおりですね。

『案ずるより産むが易し』まずは行動して、成長性を考慮しながら一歩ずつ進むのも一つの考え方ですね。

>Googleだって、その資産をどうやってビジネスにするかは、最後に考えたはずです

確かに、彼らに至ってはコンセプトベースで猪突猛進型であるのは否めません。

※それが非常に功を奏しているのも事実ですが。

参考になりましたありがとう御座います。

2010/01/12 10:21:16
  • id:b-wind
    >C++等でより安全(ここでいう安全とはソースコードの保持を指します)な方法をとるべきだ
    これ自体の是非はともかくとして「すべてのコードを隠蔽」する必要は無いのでは?
    .NET から外のコードの呼び出しはちと面倒ではあるけど。

    そのフリーソフトにおいて「隠蔽すべき重要な項目」がどの程度あるかも
    考慮に含めた方がいいと思う。
  • id:VB2005
    b-wind様

    コメントありがとう御座います。

    >>C++等でより安全(ここでいう安全とはソースコードの保持を指します)な方法をとるべきだ
    >これ自体の是非はともかくとして「すべてのコードを隠蔽」する必要は無いのでは?
    >.NET から外のコードの呼び出しはちと面倒ではあるけど。

    そうですね、この点についてはビジネスロジック部分の重要なところや
    セキュリティ的に開示すべきでない部分のみDLL化やWebサービス化する方向で
    意見はまとまりつつありますね。

    社内的に.NETによる開発が一般的になったので、そういった意味では、
    受託業務以外の開発での.NETの利用のリスクについて真剣に話し合ういい機会であったと思います。

    上記でも述べたように、オープンソース開発でもそうですが、
    コードの開示によるプラスの面もあるということも認識しています。

    そういった意味で、他の会社の方の対応状況やご経験が伺えればなぁと思った次第です。
  • id:Excellio
    私は企業向けの製品パッケージを作っています。
    .netではなく,c++とc言語を使っています。非常に機密性の高い特許をいくつか含むロジックを組んでいますが
    逆アセンブルしても,おそらくロジックは理解できないと思っています。

    言い方悪いですが,.net系はC系とかデルファイと違って所詮インタプリタですので機密保持するほどのロジックが書けるとは思えない
    ,ゆえに隠匿するほど心配する必要はないのではないかと。

  • id:ardarim
    クライアントサイドで動作するバイナリを公開する時点でいわゆる「完全な対策」などありえません。
    開発言語が.NET系であれ、C言語やC++などのネイティブ系であれ、対象となるバイナリがある以上は最終的に解読されることには変わりなく、その差はまさしく「敷居」の差でしかありません。

    ノウハウを持った技術者が高機能な逆アセンブラを使えばネイティブアプリでも解読の容易性が高まります。難読化が施されていないコードの場合、C/C++でもソースコードレベルまで再構築できる場合もあります。
    ある意味でむしろ何も考えずに作ったネイティブアプリよりも難読化した.NETアプリの方が敷居は高いと思います。

    リバースエンジニアリングのされにくさという点では、敷居の高さの順で
    難読化ネイティブ>難読化.NET>>>無対策ネイティブ>無対策.NET
    といった感じでは。
  • id:VB2005
    Excellio様

    コメントありがとう御座います。

    >言い方悪いですが,.net系はC系とかデルファイと違って所詮インタプリタですので機密保持するほどのロジックが書けるとは思えない
    ,ゆえに隠匿するほど心配する必要はないのではないかと。

    確かにそのご指摘は当たっていると認識しております。
    社内で議論になっている部分の大半はビジネス特許的な物であり技術特許ではないのも事実です。

    そういった意味では隠匿するレベルかと問われると費用対効果では苦しいのかもしれません。

    コメントありがとう御座います。
  • id:VB2005
    ardarim様

    コメントありがとう御座います。

    >クライアントサイドで動作するバイナリを公開する時点でいわゆる「完全な対策」などありえません。
    >開発言語が.NET系であれ、C言語やC++などのネイティブ系であれ、対象となるバイナリがある以上は最終的に解読されることには変わりなく、その差はまさしく「敷居」の差でしかありません。

    おっしゃる通りだと思います。

    >リバースエンジニアリングのされにくさという点では、敷居の高さの順で
    >難読化ネイティブ>難読化.NET>>>無対策ネイティブ>無対策.NET
    >といった感じでは。

    この点は、私の認識と異なっておりました。
    バイナリからの逆コンパイルは巷で噂になることはあれどそれほど実用的なものがあるとは思っておりませんでした。
    お教えいただいたレベル間であれば難読化を施した.NETアプリも十分に価値のあるものであると考えることができます。

    コメントありがとう御座います。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません