プロが教える店舗&オフィスのセキュリティ対策術

JAVAソースコードの暗号化

失礼致します。
カテゴリを間違えて登録してしまった為再度登録させてもらいます。

JAVAのソースコードに公開したくないロジックが含まれており、
ソースコードを暗号化したいと考えています。

もし同じようなことで悩んだ方がいらっしゃいましたら、
アドバイスいただきたいと思い書き込みします。

まず「どこまで暗号化(隠蔽)できればよいのか」という基準については、
「jadで逆コンパイルしても内部のロジックが読み取れなければよい」
と考えています。(特にディレクトリのパスが指定していますのでその部分、変数の中身等)

ためしにフリーのProGuardを使用してみましたが、
クラスファイル名やメソッド名、変数名がa,b,cなどに変換されたものの、変数の中身は丸見えのままでした。

【元データの逆コンパイル】
String confFilePath = rootPath + "conf/";
String masterFile = confFilePath + subDir + "Pass.xml";
String confSubDir = confFilePath + subDir;
String outputPath = rootPath + "file/" + subDir;

【ProGuardをかけて逆コンパイル】
Object obj;
obj = s + "conf/";
String s2 = obj + s1 + "Pass.xml";
String s3 = obj + s1;
String s4 = s + "file/" + s1;

ProGuard自体、ソースコードの軽量化に使われるのが主流なようなので、仕方がないといえば仕方がないと思いますが、
どうにか読み取られないようにできないものでしょうか。

ご意見、お待ちしています。

※次はDashOの評価版を試してみようと考えていますが、
あまりお金はかけたくないので、正規に使う見込みがありません。
ただお金をかければこんだけの暗号化はできるというのがあれば教えてもらいたいです。

何日も調べてかなり悩んでいます、、お願いします。

A 回答 (3件)

デコンパイル時に変数の値をわからなくしたいというのが本来の目的ですね。



それは実装に問題があるのではないのでしょうか?
現状はデコンパイルしなくてもJavaプロセスにアタッチして直接メモリをのぞけば生の変数値が見えるということですよね?

対処方法としてはPASSをMD5とかSHAで変換し、プログラムコードに埋め込む。この時点でデコンパイルしてもJavaプロセスにアタッチしてもメモリが除けません。また、この変換値がわかったとしても変換アルゴリズムがわかったとしても返還前の変数値はわかりません。(正確にはわかりにくい。)
で、PASSとの検証はPASSの入力時に同じアルゴリズム(MD5とかSHA)で変換し、変換結果をマッチングさせます。

仕組みをわかりやすく説明すると、以下のような特徴を持つある式があります。この式は離散対数問題を抱えていると思ってください。この式は…、
(1)パスワード → 変換値 ・・・ 簡単
(2)変換値 ← パスワード ・・・ 困難
ということなので(1)で変換した値同士をマッチングすることで実現できます。

この回答への補足

詳しく説明して頂きありがとうございます。

参考にしたいと思います。

補足日時:2007/05/28 13:10
    • good
    • 0

変数の値を直接使用するのではなく、変数にbyte型を


使用し、ビット操作で変換した文字列を使用するとい
うのは?
    • good
    • 0
この回答へのお礼

なるほど!

それならわかりにくいですね。

参考にさせてもらいます。

お礼日時:2007/05/28 13:12

自信はありませんが…



javaには標準で
javap
という「Javaクラスファイル逆アセンブラ」が用意されているので、そもそも「逆コンパイル不可能」というのは無理ではないでしょうか?
    • good
    • 0
この回答へのお礼

すいません、質問が悪かったです。

目的としては「逆コンパイルを不可能にする」ではなく
逆コンパイルした際に「変数の値をわからなくする」です。

要は変数に知られたくないPASSが記述してありそれを隠したいのです。

わかりにくい質問になってしまいすいませんでした。

お礼日時:2007/05/25 14:14

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!