なたで日記

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

Posts Tagged ‘難読化

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日 at 20:12

カテゴリー: program

Tagged with ,

ビューア開発 – javaのexeラップと難読化と最大ヒープ領域

leave a comment »


二日前、難読化がよくわからないからexeでラップして公開してたけど、普通にexeからjar取り出せた^^;
具体的には、ラップ化にexewrapというのを使わせて頂いているのですが、
exe化した後、普通にリソースとして存在してました。
リソースではpack200という拡張子が「*.pack.gz」のような形で格納されているのですが、
普通にJava1.6のjreパッケージに含まれてる「unpack200.exe」っていうソフトで「*.jar」に戻せます。
「*.jar」はzip形式なので、そのままはい。classに。はい。
それで、いい加減、難読化の方法を調べました。
結果は、ProGuardっていうので簡単に出来た。
方法は普通にダウンロードしてきて、中の「./lib/proguardgui.jar」を実行するとGUIが表示される。
inputから難読化したい「*.jar」を選択。outputで出力先決めて、後は省略して「Process!」押せば完成。
ほんのちょっとだけ時間掛かるけど、すぐに出力先に難読化されたjarが出来てる。
ちなみに、自分の場合サイズがjarが難読化前に比べて半分近くになった。
あと、ヒープ確保の件なんだけど、exewrapで変換する時、
うまく引き数で与えれば最大ヒープ領域の容量を宣言した上で、自動的に起動できることが分かりました。
プログラムの上での最大ヒープ領域の指定のやり方は分からないけど、一応Windows環境ならこれでうん。
やり方は、こんな感じ、「exewrap.exe -g -e NOLOG -a “-Xmx256M”」みたいにVM引き数を追加すればOK。
画像処理の話題に変わるけど、
昨日は、単純減色と誤差拡散減色と組織的ディザ法減色を追加してみた。
組織的ディザ法ではipmpackでまたしてもバグ発見した。
というかアルゴリズム間違ってると思う。うん。
1番目に近い色と2番目に近い色の2色を調べないといけないんだけど、
距離を基準にするんじゃなくて、Absを使ったのを基準にしないと綺麗にならないらしい。
それと、ディザリングパターンの中で、最大の数を最後に割ってたんだけど、本当は「最大の数+1」を最後に割らないといけない。
こうしないと、黒はうまく減色できるんだけど、白はぶつぶつと不必要な点が出てしまう。うん。
あとはメディアンカット。
以前はアルゴリズムがうまくいかずに、結局32色までしか対応できなかったけど、今回はどうかな。
一応対応させたい。
それとレンズぼかし。
これRとGとBを別々に浮動少数で計算しないといけなくて、一度浮動少数に格納したいんだけど、
画像処理関係の精度ならfloatで十分だと思う。DirectXのHDRレンダリング技術だって内部はfloatで計算してるし。

ただ速度をとるならdouble。←後で分かったのですが、floatの方が速いです。

alpha版のダウンロード 404になってたらすいませんm(_ _)m


完成した画像処理のツールは、Javaアプレット版は、こちらから試すことが出来ます。

Written by なたで

2008年8月10日 at 09:06

カテゴリー: program

Tagged with , , ,