トップ回答者
スクリプトを暗号化して実行することはできますか?

質問
回答
-
回答でなくて申し訳ありませんが、一点確認させてください。
「かんたんに見られることを抑止したい」であり、「少しツールを使えば見られることはあきらめる」ぐらいの要求なのでしょうか?比較対象としてあげられている Windows Script Encoder は、「かんたんに見られることを抑止したい」をかなえていますが、そのツールを知っていれば元に戻すこともかんたんにできるという現実がありますので、「少しツールを使えば見られることはあきらめる」ことが前提となります。
そのスクリプトを実行できる以上、どのように復号しないといけないかをシステムは知っていることになります。つまり、元に戻せる材料はそのシステムに存在するわけですので、それを利用すれば、誰でも復号できます。
ゆえに、暗号化できたとしても、完全に隠すことはできない、採用する技術によって求められる知識・時間は変動するものの、最終的にはアルゴリズムや秘匿したい情報を知ることができるということにご留意ください。
(これは難易度・時間などの差はあれど、exe 形式のアプリケーションであっても同じです)さて、exe に押し込むというアプローチを開発されている方がおられるようですが、どの程度安全なのかまでは確認していません。
http://rkeithhill.wordpress.com/2010/09/21/make-ps1exewrapper/
- 編集済み AzuleanMVP 2014年3月6日 13:50
- 回答としてマーク 牟田口大介Moderator 2014年3月7日 3:01
すべての返信
-
回答でなくて申し訳ありませんが、一点確認させてください。
「かんたんに見られることを抑止したい」であり、「少しツールを使えば見られることはあきらめる」ぐらいの要求なのでしょうか?比較対象としてあげられている Windows Script Encoder は、「かんたんに見られることを抑止したい」をかなえていますが、そのツールを知っていれば元に戻すこともかんたんにできるという現実がありますので、「少しツールを使えば見られることはあきらめる」ことが前提となります。
そのスクリプトを実行できる以上、どのように復号しないといけないかをシステムは知っていることになります。つまり、元に戻せる材料はそのシステムに存在するわけですので、それを利用すれば、誰でも復号できます。
ゆえに、暗号化できたとしても、完全に隠すことはできない、採用する技術によって求められる知識・時間は変動するものの、最終的にはアルゴリズムや秘匿したい情報を知ることができるということにご留意ください。
(これは難易度・時間などの差はあれど、exe 形式のアプリケーションであっても同じです)さて、exe に押し込むというアプローチを開発されている方がおられるようですが、どの程度安全なのかまでは確認していません。
http://rkeithhill.wordpress.com/2010/09/21/make-ps1exewrapper/
- 編集済み AzuleanMVP 2014年3月6日 13:50
- 回答としてマーク 牟田口大介Moderator 2014年3月7日 3:01
-
Azuleanさん
レスありがとうございました。
作ろうとしているスクリプトは社内の特定ユーザー向けなのですが、データベースにアクセス
するため接続文字列、ユーザー、パスワードの情報を設定ファイル(xml)に記述する予定です。
しかし、これらの情報は公開したくないため、設定ファイル上は暗号化文字列として設定し、
スクリプト内部で復号化して使おうとしています。しかし、スクリプトが読める人が見れば
簡単に情報が復元できてしまいます。かといって、Webシステムにするほど大げさなこともしたくない...と、このようなシチュエーションなので、
>「かんたんに見られることを抑止したい」であり、「少しツールを使えば見られること
>はあきらめる」ぐらいの要求なのでしょうか?に対しては、ツールを使えば見られるというレベルは抑止したいです。少なくともパソコン
上級者ぐらいのレベルでは見られないようにし、「暗号解読ハッカーレベルの人間が社内にいれば
その場合はあきらめる」ぐらいの要求です。Windows Script Encoder は、使ったことがなくてよくわかってなかったのですが、
それなりの知識のある人が使えば、元のスクリプトが簡単に復元できてしまうということですね。
これでは非常にマズイです。お教えいただいたリンクも見ましたが、私のレベルでは正直何をやってるんだか、あまりよく
わかりませんでしたm(__)mなんか、あれこれいろんなことを考えるより、素直にC#で書いてEXEにした方が楽な気がしてきました。
-
それなりの知識のある人が使えば、元のスクリプトが簡単に復元できてしまうということですね。
これでは非常にマズイです。(中略)
なんか、あれこれいろんなことを考えるより、素直にC#で書いてEXEにした方が楽な気がしてきました。
先にも書きましたが、exe 形式のアプリケーションであっても難易度・時間の差はあれど、解読可能です。
特に .NET アプリケーションは中間言語である MSIL にコンパイルするだけなのでツールを使って C# コードまで復元することが可能です。
(参考: http://www.atmarkit.co.jp/fdotnet/dotnettips/1055ilspy/ilspy.html ).NET アプリケーションでは難読化というソリューションもありますが、あくまで「難読化」です。
結局はどこまでやるかなのですが、接続情報を保護したいのであれば、Web サービスのようにあるマシンしか接続情報を持たず、クライアントはそのサービスを利用して情報をやりとりするといったことになるのでしょう。
読みづらくする、ツールに対してある程度抵抗力を持たせることはできますが、その気になれば読めます。- 編集済み AzuleanMVP 2014年3月6日 21:40
-
はい、その手の逆コンパイルツールがあることは知っております。
かなり前ですが、Javaのclassファイルをナントカっていうツールで逆コンパイルして解析
したことがありますが結構大変でした。
「そこまでして解析されたら諦めます」ベルでOKです(そんな人は社内にもいないと思いますので)。>結局はどこまでやるかなのですが、接続情報を保護したいのであれば、Web サービスのように
>あるマシンしか接続情報を持たず、クライアントはそのサービスを利用して情報をやりとりする
>といったことになるのでしょう。そうですね。ただ、EXEを逆コンパイルして解析できるぐらいの人の対策のために
Webマシンを立ててサービスを提供するといったような大げさなことはしたくないですね。
提供するのが一部の人たちだけですし、そんな工数もないんです。
EXE解析できるようなレベルの人がいたらWebマシンに不正アクセスして情報を盗み出す方が
よっぽど早いと思いますので、どっちもどっち(トレードオフ)ということになると思います。今回は、シェルスクリプトでやることは諦めたいと思います。