なたで日記

いろいろな思ったこと書きますヽ(^▽^ゞ) by natade

HSPの逆コンパイルを防止するには

leave a comment »

HSPはツールが充実しており、例え暗号化していても中のソースやデータを、誰でも簡単に見ることができます。

使用するツールは次の3つです。
有栖川さんが開発したexp … 実行ファイルからパックされたデータの抽出
GOCHAさんが開発したDpmAttack(spihspに同封) … HSP標準で暗号化されたファイルの複合化
(GOCHAさんのCherry拡張パッチは便利です!)
きつつきさんが開発したHSP逆コンパイラ … コンパイルされた.axファイルから.hspへ逆コンパイル

まずexpを用いて、実行ファイルにパックされているデータを抽出します。
この抽出されたデータがもしHSP標準の暗号化がされていたら、DpmAttack秒たらずで複合化されてしまいます。
ここまでの手法で隠されていた画像や音声は再生可能となります。
肝心のソースであるstart.axファイルは、HSP逆コンパイラで逆コンパイルし、復元されたソースの出来上がりです。

HSPでパスワード付きの有料ソフトを作ったとしても、
このようにソースを解読されればかなりまずいわけです。
ビジュアルゲームとかだと、画像データはネタバレにもつながるし、著作権の関係で保存されたくないデータもあると思います。
音楽だって、「CDで別売りしたいので、抽出されたくない!」という人もいるかもしれません。

これらを防止したければどうするか。
他の言語で作ればいいじゃん。というのは意味が分からないので方法を考えましょう。
HSPソースの難読化を行えばいいのです。
Shark++さんが開発したhsp3obfusというものがあります。
使い方は説明書をよむとして、hsp3obfusを使用すれば実行ファイル作成時に自動的に難読化されます。
しかも、HSP逆コンパイラでstart.axは逆コンパイルできませんでした。(2009/1/10)
これでとりあえず、ソースファイルは簡単に見ることが出来なくなりました!

でも、ソースファイルは見れなくても、画像音声は今までどおりexpDpmAttackで見ることが出来てしまいます。
これらを防止したい場合も書きます。
expでのパックされているデータ抽出の防止はとりあえず諦めましょう。
やれる事といえば、パックするファイルの名前を連想させないような名前に変更するぐらいです。

では、どうすればいいのか。実はDpmAttackでの複合化を防止する方法はあります。
DpmAttackの原理は、キーの総当りです。
キーが合っていても合っていなくても関係なく、先頭バイトのみを複合化をします。
先頭バイトは大抵データのヘッダが書いてあるので、このヘッダが指定した形式のヘッダと合っていれば、
キーは正解していているということです。そのキーで全てを複合化すれば完成します。
ということで、ヘッダ部分のみを書き換えちゃえばと思いになるかもしれませんが、もっと確実な方法。
画像や音声データを独自に暗号化します。ただ独自に暗号化してもキーがソースコードに含まれていたら
ソースコードを復元されたときに危険なので、キーはファイルとして保存しておきましょう。
後はキーが書かれたファイルと、そのキーで暗号化したデータなどを、パックする際にHSP標準の暗号化を行えばいいのです。
2重に暗号化されているので、画像データをHSP標準用のキー総当りしたとしても、ヘッダ部分は一致することはないでしょう。
キーはファイルとして暗号化されていますが、ヘッダなどは特徴的なのは存在しないので、キーファイルの正解となる複合化は行えません。

HSPで独自に複合化するとしても、
画像や音声を読み込む際に、データはファイルとして用意されていなくてはいけないので、
一度どこかに書き出さなくてはいけないじゃないですか、と思う方もいるかもしれません。
そういう時は、memfile命令を使用しましょう。データをファイルとして扱うことが出来ます。
詳しくはHSPの命令の説明書を読んでみてください^^
但し、memfile命令では利用できないファイルもあります。
そういう場合はtempフォルダに、埋め込みデータを一時的にコピーするという方法があります。
このフォルダのパスはGetTempPathで取得することが出来ます。
ファイルのロックをしておくと、ちょっと安心です。
終了時には削除するのを忘れないでください。


追記
Shark++さんが2009年9月30日に、「hsp3obfus」にスクランブル機能を加えた
yabuinu」という難読化とスクランブルが出来るツールを公開しています。
こちらを使えば、上記の画像・音声の暗号化を行わなくてもすむかもしれません。


追記(2011/7/31)
2011年7月27日に、HSP3.3RC1が公開されました。
最適化エディタの色付けの強化などいくつかの実装が行われたのですが、その中に次のような更新がありました。
>セキュリティ対策のためDPM暗号化のアルゴリズムを微調整
HSP3.3 アップデートガイドにさらに詳しく説明があります。以下引用
>セキュリティ対策のためDPM暗号化のアルゴリズムを一部調整しています。
>これにより、HSP3.3より古いバージョン(HSP3.21、HSP3.22を含む)
>で作成された暗号化付きDPMファイルの読み取りができません。
>HSP3.3で読み込み可能なDPMファイルは、HSP3.3以降のバージョンで作成する必要がありますのでご注意ください。
>また、exeファイル内にパックされるstart.axや、暗号化済みデータも以前のバージョンとは異なる形式で格納されます。
>尚、HSP3.3では、スクリプトエディタで、「指定フォルダからDPM作成」メニューにより、
>DPMファイルの生成を行なうツールの呼び出しが可能になっています。
とのことなので、内部データの抽出、暗号化解除が今までのツールでは難しいようです。
ということで、3.3に乗り換えよう!おにたまさんありがとう!

広告

Written by なたで

2009年1月10日 @ 20:12

カテゴリー: program

Tagged with ,

コメントをどうぞ(承認された後に公開されます。メールアドレスの記入は自由ですが、記入した場合でも一般公開されることはありません)

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。