質問者
実行ファイルの暗号化について

質問
-
現在、シェアウェアのリバースエンジニアリング対策として、実行ファイルの暗号化を考えています。市販のツールはとても高価なので、自分で組み込もうとしておりますが、単に実行ファイルをダブクリしての起動時に復号化して実行することに関してはおおむね推測できているのですが、(以前自己解凍EXEを作成するソフトを作っていたので、おおむね同様の感じですよね。PEフォーマットをいじって復号化の後にプログラム部分をコールするという感じですよね?)最近ではコード読み込み時ではなく、メモリ上にも実行直前まで暗号化して保持しておき実行時に復号するタイプの暗号化ソフトウェアも登場していますよね。フックなどの知識はあるつもりですが、方法が全くわかりません。 どんな方法で実現しているのでしょうか?自分としては、あまりメモリ上に復元した状態でコードをおいておくのはしたくないと思っていますので、ヒントでも結構ですので、ご存じの方がいらっしゃいましたらお教えください。以上よろしくお願いいたします。 C++でwin32ネィティブで作成したいと思っています。
すべての返信
-
「自分としては、あまりメモリ上に復元した状態でコードをおいておくのはしたくないと思っています」と書かれていますので、これが実現できた場合はメモリイメージの吸い出しにも対処されています。
なじみがあるところでいえば、JITコンパイルの仕組みかな?
復号しながら動く、一種のインタプリタですよね。
「必要になったら復号する」ということと、「必要になったらコンパイルする」ということはかなり近いと思います。
難易度が高いのは相変わらずですので、手段が目的になる、あえて目的にしてしまうぐらいでないと、実現は難しいかと。
解決した場合は、参考になった返信に「回答としてマーク」のボタンを利用して、回答に設定しましょう(複数に設定できます)。 -
残念。 Win32 ネイディブじゃなくて .NET Framework 用なら MS からプロテクション用のソリューションがあります。
http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=2c523699-0cad-4093-8c61-7ca49b1711ba
フォーラムはこちら
http://social.msdn.microsoft.com/Forums/ja-JP/slpscodeprotector/threads?page=1
デモのリンクが切れてしまっているのが残念ですが・・・
SLPS に関しては約1年前にセミナーに参加したことがありまして、参考までに概要を伝えますと
機能の1つの Protection では、コードを変更する事無く出来上がった Exe に対して、暗号化を施したいメソッドや関数を選び、暗号化できるというもので、暗号化したものは Secure VM で動作する仕組みです。
(設定画面が上記 Whitepaper - SLP Services - Protect Your Code.pd にも出てきます)
これにより、http://www.red-gate.com/products/reflector/ などを使っても、見事に暗号化されていて見えなくなっていました。
Forum operator in Microsoft KK