【症状】どのような症状、現象か?
暗号化して梱包したなでしこの実行ファイルから
ソースが簡単に取り出せてしまう。
【再現方法】サンプルソース、再現手順など
http://www.himanavi.net/cgi/nade-bbs2/cbbs.cgi?mode=one&number=8114&type=8077&space=15&no=0
【要望】どのような解決が望ましいか?
暗号化するのは、見られたくないためであり、
暗号化されたものは、取り出せないよう修正する。
【その他】
特にデラックス版で暗号化したものは、取り出せないように工夫する。
なでしこの実行ファイル生成にパックファイル方式を使っている以上、パックファイル用の暗号化では復号阻止は難しいのではないかと。
ソースコードをパクられたくないという思いは皆さん同じだとは思いますが、コンパイラ型言語ですら逆コンパイルされる時代です。ソースコードを内部に持つインタプリタ型のなでしこに、厳密なソースコード秘匿を求めるのはそもそもお門違いでは?
なでしこは、公式ページで述べられているとおり、「日々の定型処理に」使う「手軽な道具」であるはずです。それを考えれば、厳密なソースコード秘匿は本来の趣旨とは違うと思います。
ソースコード秘匿が可能ならば、それが最善であることは間違いありません。とはいえ、自ら開発に参加するならともかく、ただ要求だけ並べても説得力は無いでしょう。
なでしこはフリーソフトウェアであり、開発者の好意によって提供されているものです。いくらサポートが行われているからといって、早く直せと急かすのはマナー違反ではないかと。冷静に議論しながら、気長に待つべきでしょう。
バグ報告掲示板を見ても分かるとおり、なでしこには未解決の問題があります。個人的には、この問題よりも優先すべき事項があるように思います。
あの、その質問をしたk.kです
その質問を質問掲示板にした理由はひまわりのプログラム板で「exeをhmwになおすやつ」を発見してなでしこではできないのかな?と思って投稿したわけです
最後にそのソースが取り出せる件の結果です
環境
OS windowsVista
なでしこ version1.531~
実行ファイルのなでしこバージョン version1.522~最新
1,version1.522で実験
1.531 エラーが出てくる。(取り出せない)
1.5321 エラーが出てくる。(取り出せない)
1.5322 エラーが出てくる。(取り出せない)
1.5323 エラーが出てくる。(取り出せない)
となりました。
k.k.さん、確認ありがとうございました!
しかし、以下で新しい解析ツールが出ました!
http://nadesiko.g.hatena.ne.jp/periwnkl/
いたちごっこな訳ですが・・・
新しいツールが出るまでは、(普通には)取り出せない訳ですから、
頭をひねって解決できるように頑張ります(笑)
パックファイルであることも問題となっていますので、
ソースの埋め込みのみ別形式にすることも考えられます。
(ただ、ファイルサイズが増えてしまうので、よくないですが・・・)
解析が簡単なのは、暗号化のソース事態が公開されていることが問題であるかもしれません。
デラックス版の暗号化のみ、非公開ソースにするなど、抜本的な解決も考えてみます。
良いアイデアがあれば、教えてください(!)
こんにちは。
対応ご苦労様です。
意見を3つ述べます。
1.暗号化の対応はとても難しいかと思いますし、デラックス版ではない方にはソース暗号化の機能はつけなくて良いのではないでしょうか。
2.そもそも、「誰でも簡単プログラマー」をキャッチフレーズとするなでしこに、暗号化の機能は無くても良いのではないでしょうか
3.「exeをエディタで開くとソースがそのままという状態は避けたい」という程度の要件に対しては、「暗号化」(絶対に解読できなくする)ではなく、「難読化」(カンタンには読めなくする)という形で機能を提供すれば良いのではないでしょうか。
P.S.
ちなみに、対象の記事については、著作権法第百二十条の二あたりにふれているようにも読めます(私の勘違いかもしれませんが)。一度弁護士さんや警察に相談してみていただくことも検討されてはいかがでしょうか。
- デラックス版暗号化の解読対策(@364)(r213)
下記のプログラムに対する隠蔽処理を行いました。
http://nadesiko.g.hatena.ne.jp/periwnkl/
今回の対策は以下の二点です。
・(1)暗号化部分のソースコードを非公開にした
・(2)ユーザーが暗号化されたパックファイルを操作しようとするとエラーがでるように強制修正した
オープンソース版とソースは基本的に同じですが、条件コンパイルで(1)を弾くようにしてあるので、コンパイルできるよう配慮したつもりです。
mrさん、意見ありがとうございます。
> 1.暗号化の対応はとても難しいかと思いますし、デラックス版ではない方にはソース暗号化の機能はつけなくて良いのではないでしょうか。
> 2.そもそも、「誰でも簡単プログラマー」をキャッチフレーズとするなでしこに、暗号化の機能は無くても良いのではないでしょうか
そう思います。
暗号化に関しては、デラックス版を主眼において、作業をしていこうと思っています。
ただ個人的には、暗号→解読のいたちごっことなっていますので、最低限のものができていればいいかなぁとも思いますが、暗号化については、できる範囲で対応したいと思います。
> 3.「exeをエディタで開くとソースがそのままという状態は避けたい」という程度の要件に対しては、「暗号化」(絶対に解読できなくする)ではなく、「難読化」(カンタンには読めなくする)という形で機能を提供すれば良いのではないでしょうか。
こちら、良いアイデアですね。難読化としたいと思います。
ありがとうございます!!
ちょっと実験してみました
そのソフト自体を抜き出して
1.5322(フリー版)で実行ファイルにする(プラグインは埋め込まない)そうすれば抜き出せません
何やら白熱しているので。
デラックス版については、暗号化をお願いしたいです。
商用で利用しているので、簡単に複合化できてかつ、そのツールが手軽に手に入る状態では利用できないです。
フリー版については、無償なのでそこまで労力をかける必要があるのかわかりません。
そこは難読化でもいいような気がします。
まぁ、こういう話題が白熱するって事は【なでしこ】ユーザーが増えてきたからですよね。
(そういう一面から見ると、私的にはちょっと嬉しいような。)
こんなページを見つけてしまいました
http://files.periwnkl.com/blog/2009/12-12_01_nadesiko.html
ううむ。。。なんといっていいものやら。。。
とにかく、作成したシェアで公開したいアプリには
体験版をつけないのが一番かと。
どうしてもつけなければならない時には、体験版は体験版でソース自体から
機能を削減するなどしないとならなくてはならないかと思います。
*母艦設計()
母艦→可視 = 偽
母艦→タイトル = "なでしこソースコード抽出器"
メニュー一括作成("なし,file_menu,ファイル(&F),,,
-,open_menu,開く(&O),Ctrl+O,,select_exe
-,-,,,,
-,close_menu,閉じる(&X),,,終了
")
sourceとはTエディタ
source→レイアウト = 全体
source→ファイルドロップ許可 = 真
source→ファイルドロップ時 =~
extract(source→ドロップファイル)
statusとはステータスバー
status→レイアウト = 下
母艦→可視 = 真
*select_exe()
file = ファイル選択("なでしこ実行ファイル|*.exe")
もし、(file != 空)ならば
extract(file)
*extract(exe)
もし、(パックファイル存在(exe) == 偽)ならば
言う("なでしこで作成された実行ファイルではありません")
戻る
status→テキスト = exe
パックファイル分離(exe, "{母艦パス}temp.pac")
パックファイル抽出("{母艦パス}temp.pac", "nadesiko.nako", "{母艦パス}nadesiko.nako")
source→テキスト = 開く("{母艦パス}nadesiko.nako")
// ファイル完全削除("nadesiko.nako")
// ファイル完全削除("temp.pac")
いくら「誰でも簡単プログラマー」をキャッチフレーズとしているからといって、僕は難読化では不十分ではないかと思います。
自分がせっかく感性こめて一生懸命作ったプログラムのソースを、他人が勝手に使われたりしたら、誰だって嫌だと思います。
だから、せめて なでしこ に搭載されている簡易暗号化機能を利用して、複数の暗号化形式やキーで、何度もソースコードを暗号化してはどうでしょうか。
また、実行するときは解読する必要があるので、解読するための部分も同じように暗号化をかけてみてはどうですか?
やはり、それでも何度も復号化していけばいずれソースコードをゲットできますが、何もしないよりはずっと良いと思います。
(#1379)への補足です。
http://www.himanavi.net/cgi/nade-bbs2/cbbs.cgi?mode=all&number=5924&type=0&space=0&no=0#5937
上のページのような方法で、ソースコードの暗号化をしてみてはどうでしょうか。