• ベストアンサー

perlを難読化、暗号化させたい

ホームページや、普通のフリーソフトのソースは簡単に難読化や暗号化、コンパイルができて、簡単に見ることができなくなりますが、perlのソースを暗号化?難読化させたいのですが、何か、良い方法は無いでしょうか? ご存知の方、教えてください。 宜しくお願い致します。

  • CGI
  • 回答数10
  • ありがとう数19

質問者が選んだベストアンサー

  • ベストアンサー
  • Hasty
  • ベストアンサー率73% (19/26)
回答No.10

私はもうJavaScriptかじり始めてから5年は経つし、こうゆうこともかなり前からやってるので、どれくらいでできるようになるかと聞かれてもアドバイスはちょっと難しいです。 ただ、JavaScriptの勉強やデバッグをするのに、変数とかの値をalertやdocument.writeで表示するってのは必須ですよね。これはその延長なので、今回のコード復号化程度のものなら何ヶ月もはかからないんじゃないかと思います。(復号したコードが理解できるかどうかは別ですよ。)

ayaka19801201
質問者

お礼

回答いただきありがとうございました。 私が思っていたよりも、相当早く習得してとくことができるレベルの難読化だとは全く思っていませんでしたので、とても驚いています。 たくさんの、発見に満ちた回答をいただきありがとうございました!!

その他の回答 (9)

  • Hasty
  • ベストアンサー率73% (19/26)
回答No.9

私は専門家ではないです(No.4では「どんな人」の選択ミスりました)が、あちこちのサイトで調べたり自分でテストしたりして、ある程度の知識はあると思います。 でもこれは暗号を解いた訳じゃなく、そのコードが処理される様子を追ってるだけなので、コツさえ知ってれば簡単にできます。 例えばオークションテンプレートのスクリプトにはevalがあるので、それが実行しようとしている内容を表示してみます。 ただ、evalを単にdocument.writeに置き換えると、内容に < や > が入っていた時にそれがタグとして認識されて表示されないので、それらを&lt;などに置換して表示する関数(escape_print)を作って、それと置き換えます。 function escape_print(text) { text = text.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/\n/g, "<br>"); document.write(text); } そのHTMLを開いたところ、下のように表示されました。 Chart="";et="";et2="";codID=80;for(i=35;i<127;i++){Chart+=String.fromCharCode(i);}Chart+=" !ABCDEFG";for(i=0;i<g.length;i++){ts=(Chart.indexOf(g.charAt(i))-codID%100+100)%100;codID++;if(ts<10){et+="0"+ts;}else{et+=ts;}}for(i=0;i<et.length/6;i++){et2+=String.fromCharCode(parseFloat(et.substr(i*6,6)));}if(location.href.match(et2.substr(et2.length-13,13))){document.write(et2.substr(0,et2.length-13));et2=null;et=null;}else{et2=null;et=null;document.write("M");} これが実行されるはずのコードだったので、これをさっきのコードの下にコピペします。 この中にはdocument.writeが2つあり、そのうち1つ目の方は重要そうなので、document.writeをescape_printに置き換えて表示してみます。 ただ、その部分はif文(URLを見て盗用をチェックしているようです)の中なので、条件に || 1 などと付け加えて強制的に実行させます。 それで表示されたのがNo.8のコードな訳です。 このコードはフォームに入力された文章をコピーライト付きでプレビューさせるもののようですね:-)

ayaka19801201
質問者

お礼

回答いただきありがとうございます。 きっと、分かりやすく説明していただいているのでしょうが、javascriptのスキルが、コピペ+テキトーなので、ちょっと、まだまだ、理解できませんでした。 まだ、javaやperlなど他のプログラムを、ほんの少しだけ触ったことがある程度です。 ところで、こういったことを思いつくようになるには、どの程度、どのくらいの期間javascriptを勉強されたのでしょうか?参考までに、教えていただけると幸いです。

  • Hasty
  • ベストアンサー率73% (19/26)
回答No.8

>例えば、例に挙げた、HTML暗号化・難読化についても、javascriptに精通している人や余程の時間と暇が無い限りあえて解読しようとは思わないと思います。 プレーンテキストで処理されるものをいくら暗号化しても処理の際に復号される訳で、その復号手順を追えば元のソースなんて10分はかからず取り出せます。ですから、 >それだけの力があれば、自分でコードを作成したほうが早い? そんなことは全然ないですよ。 >ですので、ネットを利用している人の大半にとっては、殆ど完璧な暗号化技術となるのではないでしょうか? 確かにそうかもしれませんが、コードを覗き見しようとする人にとって復号できないようになってなければ、何の意味もないと思います。 >ちなみみ、Hasty様の場合、数分とのことですが、実際に解読化をした場合、実際何分で解読できますか? No.4でも書いたんですが、オークションテンプレートで暗号化されているコードは解析済みです。で、解析したコードの中にそれを暗号化したツールのURLが入ってたので参考URLに書いといたんですが・・・ ちなみにその解読も10分はかかってません。 暗号化されていたコードは↓です。 <SCRIPT language="JavaScript"><!-- //copyrightの部分を作成 name = "pia-style"; copyright = "<font size=-1>このフォームは「<b><a href=" + location.href + " target=new>" + name + "</a></b>」で作成されています</font>"; line = "\r\n"; header = '<BR><CENTER><TABLE width=600 cellpadding=0 cellspacing=0><TBODY><TR><TD bgcolor=#a06fd8 width=116>  <B><FONT color=#ffffff size=-1>商品説明 </FONT></B></TD><TD width=478><IMG src=' + 'http://' + location.hostname + '/tr-purple.gif></TD></TR><TR><TD colspan=2 bgcolor=#a06fd8><TABLE width=100%><TBODY><TR><TD bgcolor=#f1f1fd><TABLE border=0><TBODY><TR><TD><FONT color=#f1f1fd size=1>....</FONT></TD><TD width=100%></TD></TR><TR><TD></TD><TD>'; //TITLEが入る footer1 = ''; //商品説明が入る footer2 = '<BR><BR></TD></TR><TR><TD></TD><TD></TD></TR><TR><TD colspan=2 bgcolor=#a06fd8></TD></TR><TR><TD colspan=2 align=center>'; //コピーライトが入る footer3 = '</TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></CENTER><BR><BR><BR><BR>'; function changerbr() { text = form.intext.value; if(text.match(/\r\n/)){ hantei = "\r\n"; //IEなど } else { hantei = "\n"; //Firefoxなど } text = text.split(hantei); len = text.length-1; for(i=0;i<len;i++) { switch(i) { case 0: text[i] = header + text[i] + footer1 + "<BR>"; break; case 1: text[i] = text[i] + "<BR>"; break; default: text[i] = text[i] + "<BR>"; break; } } text = text.join(""); document.form.outtext.value = line + text + footer2 + copyright + footer3 + line + line; document.getElementById("out").innerHTML = text + footer2 + copyright + footer3; } function changer() { text = form.intext.value; if(text.match(/\r\n/)){ hantei = "\r\n"; //IEなど } else { hantei = "\n"; //Firefoxなど } text = text.split(hantei); len = text.length-1; for(i=0;i<len;i++) { switch(i) { case 0: text[i] = header + text[i] + footer1; break; case 1: text[i] = text[i]; break; default: text[i] = text[i]; break; } } text = text.join(""); document.form.outtext.value = line + text + footer2 + copyright + footer3 + line + line; document.getElementById("out").innerHTML = text + footer2 + copyright + footer3; } //--></SCRIPT> <!--CODHTML-Ver.0.5.6 http://www.geocities.jp/hiro00312/source/program/ -->

ayaka19801201
質問者

お礼

回答いただきありがとうございます!! 正直、ここまで鮮やかに複合化できるということに、驚いております。 難読化に意味が無いとは聞いたことがありましたが、私の知る限りかなり難しそうなものでも、ここまで鮮やに複合化してしまえるとは・・・ また、こんなことは、誰にでも、できるものなのでしょうか?職業でプログラマーの方でしょうか?ちょっと、本を読んで勉強した程度の人に複合化できるとは思えないのですが・・・ 私には、かなり、ちんぷんかんぷんな文章だったのですが・・・ 複合化に関する、意識をかえる必要があると痛感いたしました。

noname#15436
noname#15436
回答No.7

蛇足と思いつつ。 google で perl obfuscator を検索すると他にもいくつか見つかりますね。難読化ツール。 処理内容はどれも似たようなもの。

ayaka19801201
質問者

お礼

回答いただきありがとうございます。 私にとっては、蛇足ではありません。貴重な情報源です!! 英語がちんぷんかんぷんですので、ゆっくり、見ることにいたします。 また、もし、こういった類のソフトで、日本語のものや、フリーウェアをご存知でしたら(なるべく、直リンクで)教えてください。ダウンロードの画面にたどりつけないことが多々汗(^_^;) 宜しくお願い致します。

noname#15436
noname#15436
回答No.6

No.5 の補足拝見しました。 No.3 の補足で暗証番号云々の話が出てきたので, 「そんなの処理手順がばれても安全なアルゴリズムを使うのが基本。crypt 関数使えばいいじゃん。」 と思い,補足要求しました。 > 1.フリーソフトや有償のソフトを配布、納品したものを改竄されたくない。自分なりにかなり考えた箇所など、個別的に守りたい場合。 > 2.perlやプログラムの初心者。上級者については、どんな方法を使っても結局は無理だと思います。 ということなので,結局皆さんの回答と同じような方法になってしまいますが, こんなの見つけました。 "iWeb Toolkit: Perl Source Code Obfuscator" http://www.virtualpromote.com/tools/perl-encrypt/ ↑ソースの整形を崩すのと,コメントの削除,変数名の付け替えをやってくれます。 ↓こんな製品も出てるようです。詳細不明。 "Stunnix Perl-obfus" の "Sample output" http://www.stunnix.com/prod/po/sample.shtml ソースを読む立場からすると,コメントはもちろんですが,関数名や変数名が処理内容を推測する重要な手がかりになりますので,これが意味のないものだと結構苦労します。 他に,文字列リテラルも手がかりになりますね。 逆に,マジックナンバが書いてあるとムッとします。 # ソースの'再'整形はツールですぐ出来ちゃいそう。 # あとは意味のないコードをちりばめてソースの行数を増やしたうえ,読む人を撹乱する(笑)。

ayaka19801201
質問者

お礼

回答いただきありがとうございます。 そこまで、すごいコードを書くわけではないのですが、、、それでも、ちょと・・・ という感じです。 >ソースの再形成はあまりに簡単そうなのでちょっとあれですね・・・ >あとは意味のないコードをちりばめてソースの行数を増やしたうえ,読む人を撹乱する 確かに、、、(笑) Stunnix Perl-obfusが、私が求めているものに近いかもしれません。 perl入門者の私が見る限り、読解できませんでした。

noname#15436
noname#15436
回答No.5

どうも目的がよくつかめないです。 (1)何のために暗号化・難読化する必要があるのか。 (2)ソースを読ませたくない相手は誰なのか。 といったことを補足していただければ,解決方法が得られるかもしれません。

ayaka19801201
質問者

補足

1.フリーソフトや有償のソフトを配布、納品したものを改竄されたくない。自分なりにかなり考えた箇所など、個別的に守りたい場合。 2.perlやプログラムの初心者。上級者については、どんな方法を使っても結局は無理だと思います。 例えば、例に挙げた、HTML暗号化・難読化についても、javascriptに精通している人や余程の時間と暇が無い限りあえて解読しようとは思わないと思います。 実際、私が解読しようと試みましたが、かなり面倒で挫折しました。そのため、実際に解読できる人は殆ど居ないと思います。 また、解読する力があれば、自分でもっと良いものを作れるのではないかと・・・

  • Hasty
  • ベストアンサー率73% (19/26)
回答No.4

No.2のものですが・・・ >秀丸エディタの行番号で68行目の、長いjavascriptの部分です。 何の事はない、ただのJavaScriptコードです。 コピペしてちょっといじってやれば、ものの数分で解読できます。 解読したコード中のコメントに、暗号化ツールの提供元が載っていたので載せておきます。(参考URLの「HTML暗号化ツール-CODHTML-」) ま、この通り簡単に解読されてしまうので、気休め程度にしかなりませんが。

参考URL:
http://www.geocities.jp/hiro00312/source/program/
ayaka19801201
質問者

お礼

再三の回答いただきありがとうございます。 例えば、例に挙げた、HTML暗号化・難読化についても、javascriptに精通している人や余程の時間と暇が無い限りあえて解読しようとは思わないと思います。 それだけの力があれば、自分でコードを作成したほうが早い? また、少なくとも、私のスキルでは、1時間あっても無理でした。ですので、ネットを利用している人の大半にとっては、殆ど完璧な暗号化技術となるのではないでしょうか? ちなみみ、Hasty様の場合、数分とのことですが、実際に解読化をした場合、実際何分で解読できますか? もし、お暇がありましたら、チャレンジしていただければと思います。 数分で解けてしまうとは、少なくとも、1時以上試行錯誤して無理だった、私には、にわかには信じがたいのですが・・・ また、実際に解読できてしまうならば、javascript初心者など、この技術を過信している人への警鐘になればと思います。

  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.3

Perlをコンパイルすることができたはず・・・ ただし、サーバもいじらないといけなかったと思います。 Perlで難読化させたいのでしたら、「改行を消す」と言うのが結構オススメ。 ソースを読む気なくしますよ。 あとは、URLエンコードしてしまうとか。 オークションテンプレート> http://pia-style.com/01-now-desing.html この程度でいいのでしたら、単にutf8で保存すればいいだけです。 初心者程度なら読めないでしょう。 コンパイルしても逆コンパイルでソース(と似たもの)ができるわけですし、程度の問題でしょうね。 どの程度まで必要ですか? http://www.google.com/search?hl=ja&lr=lang_ja&ie=UTF-8&oe=UTF-8&q=%E9%9B%A3%E8%AA%AD%E5%8C%96+perl&num=50

ayaka19801201
質問者

補足

回答いただきありがとうございます。 #2と同様の回答になりますが、 http://pia-style.com/01-now-desing.html についてですが、Firefoxで保存して、それを、秀丸エディタでみているのですが、見ることができません。 秀丸エディタの行番号で68行目の、長いjavascriptの部分です。 <script>g="stMvwgyzZ|}l !fBCpEFw$%F')1*+)-/902535F6759;><>??@~BCfEF-HIGKM_NOMQRBTUUWYgZ\\a]_k`brcd#fgBijClm+op:rs=uvAxyE{|H~ AC*DF.#%:&(6)+0,.1/1524D6M5; 6=E;?WbCESFxJGHSJLVMNLPR[SUVVWxYZ4\\]~_`Cbdpeglhigkl6np qsCtv'wyAz|}}~=!AYCD+F##%'2(*6+-B.0>13846979=:<L=>_@A CDeFGjI以下続く コンパイルではなく、(簡単にコンパイルできない)もっとと、複雑に複合化できないものでしょうか? 例えば、低レベルな、暗証番号の部分だけとか、ひとつのサブルーチンだけを複合化できればと思います。

  • Hasty
  • ベストアンサー率73% (19/26)
回答No.2

興味があって覗いてみたんですが・・・ 回答1の補足のリンク先の情報はどれも小手先のもので、全て5分もかからずに解読できてしまいますよ。 オークションテンプレートとやらもソースがutf8なだけで、IEで見ればメモ帳で開くため化けてしまうでしょうが、開くエディタを替えたり、Firefoxなどを使えば普通に見れます。 結局のところ、プレーンテキストで処理されるものを解読させないようにするのは無理です。

ayaka19801201
質問者

お礼

回答いただきありがとうございます。 http://pia-style.com/01-now-desing.html についてですが、Firefoxで保存して、それを、秀丸エディタでみているのですが、見ることができません。 秀丸エディタの行番号で68行目の、長いjavascriptの部分です。 <script>g="stMvwgyzZ|}l !fBCpEFw$%F')1*+)-/902535F6759;><>??@~BCfEF-HIGKM_NOMQRBTUUWYgZ\\a]_k`brcd#fgBijClm+op:rs=uvAxyE{|H~ AC*DF.#%:&(6)+0,.1/1524D6M5; 6=E;?WbCESFxJGHSJLVMNLPR[SUVVWxYZ4\\]~_`Cbdpeglhigkl6np qsCtv'wyAz|}}~=!AYCD+F##%'2(*6+-B.0>13846979=:<L=>_@A CDeFGjI以下続く

回答No.1

>ホームページや・・・・簡単に難読化や暗号化、コンパイルができて、簡単に見ることができなくなりますが えっ? HTMLにいつからそんな機能つきましたか?

ayaka19801201
質問者

補足

回答いただきありがとうございます。 オークションテンプレート> http://pia-style.com/01-now-desing.html のソースは難読化してあります。 もちろん、解除することはできるそうですが、これをソースに変換するのはかなり面倒だと思います。 難読化してあるところは、stMvwgyzZで検索してください。その行が全てです。 もし、簡単に解除できたら教えてください。 また、ご興味がありましたら、 難読化 html > http://www.google.co.jp/search?sourceid=navclient-ff&ie=UTF-8&rls=GGGL,GGGL:2005-09,GGGL:ja&q=%E9%9B%A3%E8%AA%AD%E5%8C%96%E3%80%80html をご覧下さい。

関連するQ&A

  • PHPソースコード簡易暗号化(難読化)「POBS」の使い方。

    PHPソースコード簡易暗号化(難読化)「POBS」の使い方。 PHPソースコードを簡易的に暗号化したくて見つけたのが「POBS」でしたが、セッティング方法がいまいちよくわからず、いまだ使えません。 すでに該当ファイルをダウンロードし、サーバにアップロードし、POBSの画面はブラウザ表示できているのですが・・ どなたかわかる方がいましたら、ご教授くださいませ。 よろしくお願いします。 参考にしていたサイトは以下です。 http://pobs.mywalhalla.net/ http://phpspot.org/blog/archives/2006/01/phpjavascriptpo.html

    • ベストアンサー
    • PHP
  • PHPファイルの暗号化(難読化)方法

    PHPファイルの暗号化(難読化)方法 PHPファイルを暗号化(難読化)する方法を探しています。 現在は、有料の暗号化ツールを使用せずに、 自作で暗号化(難読化)を実施可能かどうかを検討しております。 ファイル全体を暗号化したいのですが、 ファイル内容は、PHPの開始タグ(<?php)、終了タグ(?>)とHTMLタグが混在していて それをbase64_encodeなどを使用し、暗号化をかけた場合、 base64_decodeで復号をかけたデータをブラウザにて実行させたい場合は、 どのようにすればよいか困っています。 eval関数は、phpソースコードを実行するため、 PHPの開始タグ、終了タグをのぞいた、phpコードしか実行できません。 echo関数では、phpソースコードもそのまま出力されます。 PHPの開始タグ、終了タグとHTMLタグ混在していても、 ブラウザ上でphpコードの実行とHTMLタグの出力が実行できる方法はないでしょうか。 ネット上で調べてみましたが、 phpコードのみを暗号化して、eval関数で実行するものしか 発見することができませんでした。 そもそも、ファイル全体を上記のような方法で復号化⇒実行することは無理で、 ファイルの中身を解析し、タグの置き換えや、 eval関数が使用可能な処理とそうでない処理とに分けるようなことになるのでしょうか。 暗号の目的は、ファイルが一見、何を行っているのかわからなく、 そのまま処理を使いまわしできないようにしたいためです。 PHPや暗号化に詳しい人が復号化できてしまうことは、理解しております。 何か方法やアドバイス等、ございましたら、 ご回答頂ければと思います。 phpバージョンは、5.2.14です。 以上、よろしくお願いします。

    • ベストアンサー
    • PHP
  • 難読化ソフト

    VB2010で作ったアプリケーションを難読化するフリーソフトありませんか? あれば教えていただきたいです。

  • Perlの開発環境

    こんにちは。 Javaなどだと、ソースを書いてボタン1つでコンパイル、実行してくれる開発環境があるのですが、Perlにはそのようなものは、ないのですか? フリーソフトの「Perlをはじめよう」という物をインストールしたのですが、HTML出力すると、うまくいかないのです。 そこで、他にボタン1つでブラウザに出力してくれるようなソフトを知っている方がいましたら、回答の方よろしくお願いします。

    • ベストアンサー
    • Perl
  • HTML難読化ツールを探しています。

    現在、HTMLの難読化ツール(無料、または自作も可)を探しています。 フリーソフトを探してみても、JavaScriptやCssの難読化ツールはヒットするのですが、 HTMLファイルの難読化ツールを見つけることができません。 ツールのイメージとしては、コメントの削除・改行コードの削除などを行ってくれるものです。 さらに、欲を言えば、コマンドラインで実行可能なものだと嬉しいです。 もし、ご存じでしたら、ご回答をお願い致します。 使用PC : Windows7

    • ベストアンサー
    • HTML
  • perlで可逆な暗号化

    perlで、どうしてもパスワードをGETで送る必要があります。 通常は、cryptを使用して暗号化するのだと思いますが、 cryptは不可逆なので使用したくありません。 perlを使用して、可逆で、できる限り簡単に暗号化する方法を教えてください。

    • ベストアンサー
    • Perl
  • PHP リソースファイルの暗号化・難読化

    お世話になります。 <img src="">や<video><source src=""></video>等のリソースファイル(src)を暗号化・難読化する方法を探してます。 base64を使った方法を試みました。 しかし、ファイルの容量が大きいと、 読み込みに時間がかかる。・サーバーに負荷がかかる。・ファイル容量並みのメモリ容量を必要とする。 があり諦めました。 <video width="640" height="320" controls="controls"> <source src="data:video/mp4;base64,<?php $file = 'video.mp4'; echo base64_encode(file_get_contents($file)); ?>" type="video/mp4"> </video> 他に良い方法はありませんでしょうか?

    • 締切済み
    • PHP
  • 暗号化(perl)→復号化(php)

    暗号化キーを使用した暗号化→復号化で cgi(perl)で暗号化し、phpで復号化を行おうとしております。 AES暗号を使用したのですが、いろいろ設定を変えて 試みたのですが、うまくいきませんでした。 他に暗号化キーを使用した暗号化の方法がありましたら 教えてください。 暗号化(perl)→復号化(php)で実績のあるモジュールが あれば非常に助かります。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • 古い Perl における制約??

     Perl で記述されたフリーソフトをバージョンアップしたところ、ユーザーさんから「古いバージョンの Perl で動かなくなった」との報告を受けました。  Perl 5.6、Perl 5.8 では問題なく動いているものの、Perl 5.003 がコンパイルエラーで落ちるそうです。  バージョンアップといっても、別に全く新しい技術を取り入れたというわけではなく、なぜ落ちるのか全く分かりません。  なぜなら、当方の環境に Perl 5.0 がなく、実験できないからです。  で、もしご存知の方がいらっしゃれば、Perl 5.0 の入手元(あるいは実験できるところ)をお教えいただきたいのです。  よろしくお願いします。

    • ベストアンサー
    • Perl
  • フリーでホームページを暗号化するようなソフトって

    タイトルどおりですが、 フリーでホームページを暗号化するようなソフトってありませんか? ホームページの暗号化ソフトがあれば教えてください。 お願いします。