cafebabe.jp 日々のよしなしごとをのたまうブログ.

75月/110

Maven3でDeploy先を切り替える.

maven3でdeployをするにはextensionでwagonのプラグイン?を書かなければいけないようだ.
試したのは webdav, scpの2つだけ.

pom.xmlに以下のタグを追加しておき,distributionManagement のrepositoryタグを適切に追加しておけばOK.

  <distributionManagement>
    <repository>
      <id>適当に決めたデプロイ先のサイトのID</id>
      <url>scp://ユーザ名@ホスト名/パス</url>
    </repository>
  </distributionManagement>
    :
  <build>
    :
    <extensions>
      <extension>
        <groupId>org.apache.maven.wagon</groupId>
        <artifactId>wagon-ssh</artifactId>
        <version>1.0-beta-6</version>
      </extension>
      <extension>
        <groupId>org.apache.maven.wagon</groupId>
        <artifactId>wagon-webdav-jackrabbit</artifactId>
        <version>1.0-beta-7</version>
      </extension>
    </extensions>
  </build>

サイトのIDは ~/.m2/settings.xml の設定と合わせておく必要がある.

デプロイ先を切り替えるには profile を使う.以下のタグをpom.xmlの一番最後あたりに追加する.

  <profiles>
    <profile>
      <id>適当な名前</id>
      <activation>
        <property>
          <name>target</name>
          <value>hoge</value>
        </property>
      </activation>
      <distributionManagement>
        <repository>
          <id>切り替えたいデプロイ先のID</id>
          <url>dav:http://ホスト名/パス</url>
        </repository>
      </distributionManagement>
    </profile>
  </profiles>

こうしておくと,$ mvn deployしたときはscpでデフォルトのデプロイ先へ,$mvn deploy -Dtarget=hogeとするとprofileで設定したデプロイ先へwebdavでアクセスするようになる.
ちなみに,切り替えたいデプロイ先のIDも~/.m2/settings.xmlで定義しておかなければならない.

settings.xml は Mavenのドキュメントを参照のこと.

 
204月/110

Stigmata

StigmataはJavaの静的バースマークを統一的に扱うためのツールで http://stigmata.sourceforge.jp/ で公開されている.

バースマークは本ブログでも何度か取り上げているが,プログラムの実行に必要不可欠な部分をプログラムの特徴として抽出し,得られた情報を比較することでプログラムの類似性を計測する技術のことである.主に大量のプログラムの中から,盗用されたプログラムを見つけ出すために用いられる.そして,どのような特徴に着目するかにより,様々な種類のバースマークを抽出することができる.

電子透かしと異なり,実行に不可欠な情報を扱うため,予め情報を埋め込んでおく必要がなく,また,複数のバースマークを同時に使うことができるため,非常に簡易に用いることができる.

http://cafebabe.jp/categories/works/birthmarks

このようなバースマーク(のうち,静的解析により得られる静的バースマーク)をStigmataは統一的に扱おうとしており,現在,7種類の静的バースマークをクラスファイルから直接抽出することができる.そして,抽出されたバースマークを総当たりで比較することや,比較結果のフィルタリングすることが可能である.

 
144月/110

難読化手法 ― オーバーロード誘導 (Overload induction)

PreEmptive Solutions 社が特許を保有する名前難読化の1 アルゴリズム.具体的な実装として,Java言語用の Dash-O と .Net用の Dotfuscatorが存在する.

http://www.freepatentsonline.com/6102966.html
http://www.agtech.co.jp/products/preemptive/dasho/overload_induction.html
http://www.agtech.co.jp/support/faq/PreEmptive/DotfuscatorV1_2/20040123015.html

直感的なアルゴリズムはシンボル名(クラス名,メソッド名,フィールド名,ローカル変数名)にできるだけ同じ名前を使いまわそうというものである.またメソッド間同士でも引数の数と型が異なれば異なるメソッドと判断されるため,同じ名前を使うことが可能である.C#では確認していないが,ローカル変数の場合,バイナリレベルではインデックスのみで参照され,名前は参照されないため,同じ名前を使うことが可能である.

また,拡張オーバーロード誘導という上に記したオーバーロード誘導を拡張したものがある.その拡張とは,同じメソッドか否かを判定するルールに従来は引数の数と型のみに着目していたが,拡張オーバーロード誘導ではメソッドの帰り値も参照する.バイナリレベルでは引数の数と型が同じでも帰り値が異なれば異なるメソッドであると判断されるので,このルールを使うことが可能である.ただし,これは仕様に合致しているかどうかは微妙なところである.

 
114月/110

jmark ― Java言語向け電子透かしツール

Javaクラスファイルに対する電子透かしのためのツールで, http://se.naist.jp/jmark/ で公開されている.

このツールはダミーのメソッドに透かし情報を埋め込む.ダミーであるため,実行することに影響はないが,Java言語にはベリファイアという機能がある.クラスファイルのロード時にクラスファイルのフォーマットが間違っていないか,また,危険なコードが含まれていないかを検証する機構である.

そのため,int 型の変数に対してdouble型の足し算を行う命令を実行するとVerifyErrorが発生する.jmarkではこのようなVerifyErrorが発生しないように電子透かしを埋め込む.

 
104月/110

難読化ツール一覧

著名なJava難読化ツールとか,クラスファイル暗号化ツール,圧縮ツールをまとめてみた.

全てのツールを試したわけではないが,個人的な雑感として,各難読化ツールの違いはほとんどない.せいぜい名前難読化の名前の決め方に違いが現れる程度である.また暗号化ツールはもっと違いが少ないと思う.最適化ツールは Sophia Compress で決まり.圧縮にかけている情熱が全然違う.研究用ツールのうち,DonQuixoteは拙作なのでまぁ,よしなに.

難読化ツール

クラスファイル暗号化ツール

クラスファイル最適化ツール

クラスファイル難読化などの研究用ツール

 
64月/110

Redmineのデータベースをsqlite3からMySQLに変更 (Snow Leopard)

sqlite3で運用していたが,重くなってきたので,MySQLで運営しようとしてハマった記録.
最終的にMySQL 5.1.x for Mac OS X 10.6 (x86 64bit)を使った場合に移行できた.
最新のMySQLを使った場合,MySQLへのデータのインポートでこける.

以下は試行錯誤の記録.MacでRedmine+MySQLで動かしたい場合は最新のMySQL 5.5ではなく,MySQL 5.1を使うこと.

 
54月/110

maven-site-plugin 3.0-beta-3のpoweredByタグ

poweredBy以下のlogoタグのimgがbannerLeftもしくはbannerRightのsrcになる.困る.
つまり,以下のようなsite.xmlを記述する.

<project name"Example">
  <bannerLect>
    <name>${project.name}</name>
    <src>images/example.png</src>
    <href>http://example.com</href>
  </bannerLeft>
  <poweredBy>
    <logo name="Build with Maven 2"
          href="http://maven.apache.org"
          img="images/logos/maven-feather.png" />
  </poweredBy>
    :
</project>

これで,siteドキュメントを作成すると,左の柱の下に images/logos/maven-feather.png の画像が表示されるはずが,images/example.png が表示されてしまう.maven-feather.png だけなら,poweredByタグを使わなくても良いのだが,他のロゴも使いたいとき,非常に困る.

で,maven-site-pluginのバージョンを2.0.1変えてみると,期待通りの動作をする.
それ以上のバージョンだと同じようなバグに当たる.

仕方がないのでpoweredByタグを使わないようにしているけど,なんでこのバグについて,情報が一切ないんだろうか.スキンを変えるとうまくいったり,私の環境の問題なのかなぁ?

ちなみに,Mavenのバージョンは3.0.1 for Windows.Javaのバージョンは1.6.0_20.

 
34月/110

難読化ツールDonQuixote公開

拙作の難読化ツールDonQuixote 3.0.0を公開しました.
文字列暗号化とAPI呼び出し難読化の2つの手法をJavaクラスファイル,jarファイルに対して適用できます.

なお,このツールはフリーソフトウェアではありません.
検証や実験用に使うのに特に制限はありませんが,商用で使う場合には私まで連絡してください.

http://se.naist.jp/DonQuixote/

 
2911月/100

デコンパイラ一覧

デコンパイラ一覧です.全てを使ったわけではありません.

jad
C++で書かれたデコンパイラ.速い.jad本体のソースコードは配布されていない.Webサイトが失効したため,単体では入手できない.JadClipseなど,jadを使うツールをダウンロードし,jadを取り出せば手に入る...らしい
Soot
Java Optimization Frameworkの1ツールとして,デコンパイラがある.最強らしい
http://www.sable.mcgill.ca/soot/index.html
Mocha
非常に初期のデコンパイラ.
http://www.brouhaha.com/~eric/software/mocha/
Cavaj
jadのGUIラッパ?
http://bysoft.se/sureshot/cavaj/
JadClipse
JadをEclipseから使えるようにしたプラグイン.
http://muimi.com/j/eclipse/use_plugin/jadclipse/
Decafe Pro
良く知らない
http://decafe.hypermart.net
SourceAgain
良く知らない
http://www.ahpah.com/product.html
Dj Java Decompiler
良く知らない
http://members.fortunecity.com/neshkov/dj.html
JODE
良く知らない
http://jode.sourceforge.net/
Sothink Java Decompiler
良く知らない
http://www.sothink.com/product/javadecompiler/
JReversePro
良く知らない
http://jreversepro.blogspot.com/
HomeBrew Decompiler
良く知らない
http://www.pdr.cx/projects/hbd/

Javaデコンパイラの比較をしているサイトもある.