• 締切済み

JARファイルを展開不可能にしたい

とあるプログラムを実行可能JARファイルとして配布したいと考えています。 しかし、jarコマンドで普通にアーカイブとするだけでは、少し知識のある人なら 展開してJARファイルの中身を見ることが可能でしょう。 このJARファイルの中には画像ファイルや音楽ファイルも同梱する予定で、 できるならプログラム自身以外には中身を参照されることを防ぎたい (強いては、2次配布の可能性を排除したい)と考えています。 このようなことは実現可能でしょうか。 可能であれば、手法を教えてください。

みんなの回答

  • love-less
  • ベストアンサー率60% (9/15)
回答No.4

JARファイルなんてのはZIPやらLZHみたいなものですから 書庫内の特定のファイルにアクセス権ってのは無理なんじゃないですかねぇ。 だからこそ、画像や音楽なんかのAVコンテンツを転用されたくないアプリはEXEになってたりするわけで・・・ あとはすでに出てますが暗号化ですね。 ファイルを読み込んでEncryptしてバイナリで吐き出したファイルを同梱、アプリ実行時にバイナリを読んで複合化。 貧相な知識だとこんなもんです。

全文を見る
すると、全ての回答が全文表示されます。
  • UKY
  • ベストアンサー率50% (604/1207)
回答No.3

> UNIXのアクセス権のようなものを設定できないか ですから、そういうことも含めて無理だということです。

全文を見る
すると、全ての回答が全文表示されます。
  • Bonjin
  • ベストアンサー率43% (418/971)
回答No.2

基本的には無理でしょう。 JARファイル自身はただのアーカイブファイルに過ぎませんし、VMはJARファイルが展開できなければ実行さえできません。 >このJARファイルの中には画像ファイルや音楽ファイルも同梱する予定で、 >できるならプログラム自身以外には中身を参照されることを防ぎたい >(強いては、2次配布の可能性を排除したい)と考えています。 リソースファイル自体を暗号化するなり、独自圧縮するなりして内容が漏れないようにすれば良いのではないでしょうか?

full_metal_gay
質問者

補足

タイトルが悪かったのでしょうか。 アーカイブをゴチャゴチャにしたいという意味ではありません。 UNIXのアクセス権のようなものを設定できないか、というのを想定しての質問です。

全文を見る
すると、全ての回答が全文表示されます。
  • UKY
  • ベストアンサー率50% (604/1207)
回答No.1

それは原理的に不可能です。 JAR が実行可能であるということはその JAR の中身が展開できるということですから、実行時と同様の方法で展開できるということになります。通常の方法で展開できないということになれば、肝心のプログラムの実行もできなくなってしまいます。 たとえるなら、缶詰のふたを空けずに缶詰の中身を食べるなどということはどうやっても不可能なわけです。 どうしてもというのなら、各データファイルを暗号化して JAR に入れておき、実行時にプログラム内で復号化するという方法があります。復号化の方法がばれない限りは、JAR を展開されてもデータを盗むことはできなくなります。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Jarファイルについて。

    Jarファイルについて。 Jarで固めらたアプリの実行ログ(アプリスタート時に)に、JarファイルのMANIFEST.MF が持つCreate情報(コンパイルに使用したJavaバージョン)を書き出したいと思っています。 コマンド等で取り出す方法をご存知の方、ご教授お願いできますでしょうか。 MANIFEST.MFファイルの中身 ----------------- Manifest-Version: 1.0 Created-By: 1.6.0_18 (Sun Microsystems Inc.) -----------------

    • ベストアンサー
    • Java
  • 複数のJarファイルにクラスパスを通す方法

    eclipseで作成したJavaのプログラムをコマンドプロンプトで起動しようと考えています。 そこで分かわないことがあったので質問させていただきました。 分からないことというのは、現在プログラム直下のlibフォルダに20個近いJarファイルがありまして、メインのプログラムでは、それを参照して動いています。そのためlibフォルダ内のJarファイルにクラスパスを通したいと考えているのですが、コマンドラインに一つずつJarファイル名を書く以外に何か方法がありましたらご教授ください。 よろしくお願いいたします。

  • JARのパスの通し方

    実行可能なjarファイルを実行するさいに標準実行環境に含まれていない外部jarファイルが必要になる場合はどのようにその外部jarを指定するのでしょうか? 単純にCLASSPATHにそのjarのディレクトリかjarそのものを指定するだけだと思ったのですが、それだとNoClassDefFoundErrorが発生してしまいます。 実行前にコマンドプロンプト(WinXPです)でSETでやはりクラスパスに追加しても効果なしで… EclipseでClassファイルからそのJARをビルドパスに含めて実行する場合はちゃんと実行できています。 また、実行JARファイルに外部JARの中身を一緒に入れてJARを生成するとちゃんと実行できます。 よろしくお願いします。

    • ベストアンサー
    • Java
  • Jarファイルについて

    Jarファイルについて質問があります。 XalanやXercesなどは、Jarファイルとして提供されていて、 classpathに通してJavaプログラム内で使用するわけですが、 実行の際Jarファイルは一度解凍されてから、JVM内に読み込まれるのでしょうか? JarファイルはZipと同様の圧縮形式だと認識してますので、 解凍してから実行されるのだろうと思ってます。 どなたかご教授願いますでしょうか。 よろしくお願いします。

    • ベストアンサー
    • Java
  • jarファイルをダブルクリックで実行したいのですが

    こんにちは。今、Windows Vistaと、Java SE 6 UPDATE 4でJavaの勉強をしているのですが、以前書籍を読んでjarファイルを作った時は、コマンドラインからしか実行しなかったのですが、どうもダブルクリックでも実行できるような事が各サイトに載っていましたので、あるサイトを参考にHelloWorld.jarというファイルを作ったのですが、コマンドラインからは動作できますが、ダブルクリックしても「このファイルを開けません」というダイアログボックスが出てきたので、「インストールされたプログラムの一覧からプログラムを選択する」でjavaw.exeを選んだりjava.exeを選んだりして実行してみたのですが、コマンドラインが一瞬立ち上がってすぐに消えたり、「Could not find the main class. Program will exit.」というダイアログが出現したりして実行できませんでした。 MANIFEST.MFは、 Manifest-Version: 1.0 Main-Class: HelloWorld と記述してます。 コマンドラインでjarファイルを作った時のコマンドは、 jar cvfm HelloWorld.jar MANIFEST.MF *.class です。 コマンドラインからでは、java -jar HelloWorld.jarで動作しています。 HelloWorld.jar をラカで解凍したら、HelloWorldフォルダ直下に、HelloWorld.classとMainPanel.classとMETA-INFフォルダ、 META-INFフォルダの中にMANIFEST.MFがあり、中身は、 Manifest-Version: 1.0 Created-By: 1.6.0_04 (Sun Microsystems Inc.) Main-Class: HelloWorld  となっていました。 もし悪い所がございましたら、アドバイスの方よろしくお願いいたします。

    • ベストアンサー
    • Java
  • jarコマンドによるアーカイブファイル作成

    Mac OSX 10.3.9での話ですが、Windowsでも同様の現象に陥ります。 以下のようにjarコマンドで、カレントディレクトリ下のファイルをアーカイブ化しようとしたのですが、固まっているのか、何も出てきません。何故でしょうか? % jar cvf t.jar * 個々のファイルを指定するとjarファイルが正しく生成されるのですが、 マニフェストファイル作成に時間がかかりすぎているのかなと思って、 % jar cvMf t.jar *  とやっても同様でした。tarコマンドは正しく動くことは確認しています。

  • Jarファイル内のクラスパスについて

    Jarファイルをダブルクリックするだけで動作するプログラムを作成しており、 プログラムを起動するとException in thread "main" java.lang.NoClassDefFoundErrorが発生します。 プログラムでやろうとしていることは以下のとおりです。 (1)1つのJarファイルだけで動作する (2)他の人が作ったJarファイル(ライブラリ)を使用する   ⇒そのため、JarにJarを取り込んでいる(EclipseのRunnableJar作成機能を利用) (3)プログラムは親プロセス、子プロセス用の2つのmainクラスを持ち、   親プロセス実行後に、子プロセスをProcessBuilderで生成する (4)子プロセスでライブラリを使用して色々やる どうやら、子プロセスがライブラリを呼び出した時点でNoClassDefFoundErrorが発生するようです。 どのようにしたら、子プロセスがJar内のJarを参照することが出来るようになるのでしょうか? 知恵を貸してください。よろしくお願いします。

    • ベストアンサー
    • Java
  • Jarファイルのマニフェストについて

    マニフェスト内でMain-Classを指定してJarファイルを作成した場合、EXEに近い仕組み(Jarファイルをダブルクリックでプログラムが実行可能)が実現しますが、この際、マニフェスト内でMain-Classに渡すArgmentsやJavawに適用するオプション(-Dなど・・)を指定することは可能なのでしょうか? また可能な場合、どのように指定すればよいのでしょうか?

    • ベストアンサー
    • Java
  • jarが実行できない

    JDKをインストールしていますが、jarファイルをダブルクリックしても Could not find the main class. Program will exit. と表示され実行できません。 コマンドプロンプトでは java -jar Sample.jar で実行できるのですが。 どうすればよいか教えてください。

  • jarファイルをバッチで実行させたい

     今晩は。  jarファイルをコマンドプロンプト画面からバッチで実行させようとして、 バッチを下の様に書いてやりましたが、うまく動作しません。  一体どこが悪いのでしょうか。  「java -jar C:\Documents and Settings\デスクトップ\test.jar  pause」  実行すると「>pause 続行するには何かキーを押してください . . .」と表示されますが、 キーを押すと画面が消えてしまいます。  (実行が終わって、コマンドプロンプト画面が閉じられているみたいな・・・)  また、pauseを削除すると、やはり一度はコマンドプロンプトの画面が表示はされますが、 コマンドプロンプト画面が閉じられます。(実行はしているような気がするのですが、、、)  どのようにバッチの内容を変更すれば、実行画面が表示されたまま、プログラムが止まるのでしょうか。  宜しくお願いします。

    • ベストアンサー
    • Java
このQ&Aのポイント
  • 筆まめの封筒印刷で長型40号を指定した場合、位置がずれる問題が発生しています。
  • プリンタの用紙設定がA4になっているため、封筒印刷の位置が正しく設定されません。
  • ソースネクスト株式会社の製品である筆まめVer.32.03のバグの可能性があります。
回答を見る