簡単な透かしを class ファイルに入れます。非常に脆いです。 class ファイルの構造を知っている人や class ファイルの構造を表示、編集できるアプリケーションなら簡単に透かしを外せます。 また、や class ファイルを最適化するような Optimizer などでは 強制的に外されてしまうでしょう。
しかし、他の透かしと組み合わせて、この透かしを入れるのならば有効かもしれません。
実際に用いるのは jmark の方が良いと思います。
このツールの透かしの入れ方は非常に単純です。 以下にこのツールの透かしの入れ方、取り出し方を説明します。
class ファイルから WATERMARK という名前の
attribute_info を探します。もしなければ constant_pool に
WATERMARK という Constant_Utf8 というエントリを追加します。
与えられたキーでデータを暗号化し、それを本体とする
attribute_info を作成します。ここの attribute_info の tag は
BCEL の org.apache.bcel.classfile.Unknown を使っているので
-1 になっています。ここで作成した attribute_info を class ファイルに
加え、ファイルとして書き出せば透かし挿入完了です。
class ファイルから WATERMARK という名前の
attribute_info を探します。もしこの attribute_info
がなければ透かしが入っていないとして終了します。
見つかった attribute_info からバイト配列を取り出し、 与えられたキーで復号化し、復号されたものを表示して終了します。
ちなみに、ここで使っている attribute_info
の構造は以下の通りです。
watermark_attribute_info{
u2 attribute_name_index;
u4 attribute_length;
u1 info[attribute_length];
}
GNU GPL(GNU General Public License) に従います。
GNU General Public License [日本語]
GPL に関するリンク
GNU の GPL FAQ に以下の質問とその回答がありました。
Q. Java のようなオブジェクト指向言語において、 GPL が適用されたあるクラスをそれ自体は改変せず、 サブクラス化して利用するとします。 このような場合、GPL は結果としてのプログラムには どのように影響するのでしょうか?
A. サブクラス化は派生物の作成に他なりません。 そこで、GPL が適用されたクラスのサブクラスが作成された プログラム全体に GPL の条項が影響します。
だそうです。
Java 2 SDK 1.4 以降の環境が必要です。1.4 より以前の環境では JCE をインストールしなければなりません。
ここでの説明は非常に簡単であり、このまま実践することはお勧めしません。 かと言って、これ以上説明するつもりもありません。 こうすれば動くという最低限の説明であることを理解した上でこの作業は行って下さい。
そんなのはヤダという方は Java 2 SDK 1.4 以降を使って下さい。
まず、jce をダウンロードします。
次にダウンロードした zip ファイルを展開し、展開してできた jce1.x.x
ディレクトリの lib 以下にある jar ファイルを全て $JAVA_HOME/jre/lib/ext
以下にコピーします。
$JAVA_HOME/jre/lib/security/java.security
ファイルに以下の一行を追加します。
security.provider.3=com.sun.crypto.provider.SunJCE
上記の 3 の部分は重複しない一番若い番号を指定して下さい。
以上で JCE のインストールは完成です。
$JAVA_HOME/jre/lib/ext 以下に入れる人はまだいるのかなぁ。
配布される swt-x.x.x.tar.gz を展開する。
$ gzip -cd swt-x.x.x.tar.gz | tar xvf -
swt-x.x.x というディレクトリが作成されるので、
swt-x.x.x/bin にある swt スクリプトを使用する。
swt version 1.1.0
swt [options...] <key> <classes...>
Argument:
key: データを埋め込む/取り出す際のキー。
classes: 透かしを埋め込む/取り出すクラスファイル
Options:
-w --watermark=<watermark> データ。必ず指定しなければならないオプション。
-d --dest=<dest> 出力先のディレクトリを指定する
-e --embed 透かしを埋め込む際に指定する。(デフォルト)
-p と同時に指定すると取り出しが優先される。
-p --pickout 透かしを取り出す際に指定する。
-e と同時に指定するとこのオプションが優先される。
-a --algorithm=<algorithm> アルゴリズムを指定する。デフォルトは PBEWithMD5AndDES。
何も指定しなかった場合は PBEWithMD5AndDES。
使用できるアルゴリズムは JCE に依存する。
-c --provider=<provider> JCE のプロバイダを指定する。SunJCE を指定すれば良い。
-C --provider-class=<class> JCE のプロバイダクラスの完全修飾名。
このオプションを指定すると addProvider
メソッドを呼び出し、プロバイダを動的に登録する。
-h --help このメッセージを表示。
Copyright by Haruaki TAMADA 2002-2003
swt home page is http://oikaze.com/~tamada/Products/swt/
Report bugs to tamada@oikaze.com
Apache Ant から透かしを埋め込めるようにしました。取り出しは未対応です。 以下のようにして使用することが可能です。
サンプル
<taskdef name="watermark"
classname="com.oikaze.tama.swt.WatermarkTask"
classpathref="project.class.path"
/>
<mkdir dir="${watermark.test}" />
<watermark destdir="${watermark.test}"
data="Copyright(C) by Haruaki TAMADA"
key="watermark test key"
basedir="${build.bin}">
<include name="**/*.class" />
<exclude name="**/*Test.class" />
</watermark>
パラメータは以下の通り。
| Attribute | Description | Required |
|---|---|---|
data |
透かしに埋め込むデータ | Yes |
baseDir |
class ファイル検索の基準ディレクトリ | No, 指定されなければプロジェクトのカレントディレクトリ |
destDir |
出力先のディレクトリ | Yes |
key |
データを暗号化する際のキー | Yes |
algorithm |
暗号化のアルゴリズム。指定できる文字列は JCE のプロバイダに依存する。 | No, 指定されなければ "PBEWithMD5AndDES"。 |
provider |
暗号化を提供するライブラリ名のプロバイダ名。デフォルトは SunJCE。 | No, 指定されなければ "SunJCE" |
iteration |
PBE(Private Base Encryption) での繰り返し回数。 | No, 指定されなければ 20。 |
lastModifiedCheck |
最終更新日を見て、更新するかどうかを決める。デフォルトは true。 | No |
Wish や Dream は書いてみただけで今のところ全く対応する予定はありません。:-P まぁ、せめて ant のタスク位は書いた方が良いかなぁ。
| コンテンツ |
|---|
| リンク |
| 目次 |
| リンク |