2009-12-11 42 views
35

私は秘密のビジネスロジックを持つPerlスクリプトを開発しました。リバースエンジニアリングが難しくなるようにPerlスクリプトを難読化するにはどうすればよいですか?

このスクリプトを別のPerlコーダーに与えて、彼の環境でテストする必要があります。彼は私のプログラムで論理を抽出しようとするかもしれません。だから私はスクリプトを理解しにくいものにしたい。

提案がありますか?

+19

1)PERLではなくPerlです。 2)幸運を。不可能だよ。 Perlほど複雑な言語には、難読化の可能性が非常に高く、この難読化可能性のすべての暗いコーナーを知る非常に多くのスクリプト児童がいます。あなたの最善の策は、マシンコードでそれを書いてXSリンケージを使ってバイナリを配布することですが、結局のところ、あなたのコードを理解したい人は本当に遅くなりません。 –

+14

あなたが選ぶものは何でも構いません: http://search.cpan.org/~jjore/B-Deobfuscate-0.20/lib/B/Deobfuscate.pod 元に戻すことができますか?あなたの仕事。 –

+7

@Chris Lutz:スクリプトキディは、定義上、良いプログラマーではありません。 – user359996

答えて

124

リバースエンジニアリングのすべての形式や、保護したいものにアクセスするためのその他の手段を禁止する、法的に執行可能な合意に署名することを、この人物と彼の管理者に求めることをお勧めします。

難読化は、リバースエンジニアリングの試みからあなたを保護することはできません。理論的かつ事実上不可能です。

3

あなたはperlccを見ることができます。それは正しさを保証するものではありませんが、あなたのスクリプトではあまりにもファンキーなことをやっていないのであれば問題ありません。

+14

-1 Perlのバッシングは、コメントのための適切な娯楽ですが、回答は有益で、比較的偏っていないはずです。また、 'perlcc'はまだ実験的なものであり、動作しない可能性があります。プロダクションコードではなく、細心の注意を払って使用する必要があります。そして、それは本当に決まった人を止めることはありません。 –

+1

snarkinessを編集しました。 –

+3

-1を取り消しましたが、 'perlcc'は依然として貧弱な解決策です(確かに解決できない問題には、試行のためのペナルティはありません)。 –

7

Acme::Bleachを使用してコードを浄化します。次に、結果として生じる漂白コードを難読化します。しかし、Perlインタプリタはそれを解読しなければならないので、コード化された/難読化されたコードはデコードできます。

+0

いいえ、まず不明瞭化し、漂白剤 – ysth

+0

これはAcme :: EyeDropsよりも優れています – mob

9

まず、間違った木を吠えていると言いましょう。あなたがしたいことは、多くの理由で間違ったアプローチです。

第2に、Filter::Crypto(およびPAR::Filter::Crypto)をチェックしてください。始める前にマニュアル全体をお読みください。

42

あなたのPerlを難読化しようとしないでください。あなたはあなたの時間を無駄にしています。私はたくさんの人々に、そのようなものをどのように壊すかをMastering Perlで示しています。それで、彼らはそれをやろうとしません。

あなたはCで敏感なものを実装し、Perlインターフェイスを備えたコンパイル済みのバイナリを配布することを検討しましたか?それは比較的簡単で、巧妙なトリックに頼らずに同じ効果があります。決定された熟練者は依然としてそれをリバースエンジニアリングすることができますが、それはあらゆる解決策に当てはまります。各プラットフォーム用のライブラリをコンパイルする必要がありますが、このようなものが保護するのに十分重要であれば、それを使用するために十分に充電するだけで十分です。

また、コードを取得しないように、機密情報をWebサービスの背後に置くこともできます。

私が見てきた巧妙な戦術の1つに、書式設定やコンテンツを問わず、各クライアントに合わせたファイルが含まれています。これは、通常のコード、コメント、またはドキュメントを使用する低水準の透かしのようなものとして機能します。その興味深いテキストシーケンスを見つけ、漏れの原因を知っている。

ビジネス上の答えは、あなたが信頼していない人にプログラムを提供しないこと、またはそれを抑止するのに十分な罰則を課すことです。少なくともOSX上で

1

、彼らは三の大コマンド提供:

parl 
par.pl 
pp 

parl -

パーを実行するために、Perlや他のモジュールを必要としない、実行バイナリにパーファイルを変換します。これらは、WindowsまたはLinuxのために利用可能である場合にバイナリにperlスクリプトをコンパイルし(それはまだPerlを必要とする)

ない特定 - PL - あなたのperlスクリプトから

頁をパーファイルを作ります。

私が気付いた興味深い事は、コンパイルされたperlスクリプトで現在の作業ディレクトリを示すコマンドを使用したとき、新しいバイナリ実行可能ファイルのディレクトリと同じことでした。私は/ tmpに何かを解凍してそこから実行すると思っていたでしょうが、そうではありませんでした。

関連する問題