dwgx@blog:~$dwgx
> cd ../posts

自作の Java 難読化ツール GarlicKing

// created

GarlicKing は手書きの Java 難読化ツールだ。純粋な Java、依存管理は Maven、手を入れるのはバイトコードのレイヤー。コンパイル済みの class を読み込み、バイトコードを書き換え、また書き戻す。挙動はこれまで通りに保ちつつ、逆コンパイルで出てくるコードの可読性だけを台無しにする。名前は生ニンニクを食べて胃腸がぐるぐる混乱する感覚から取った。逆コンパイルする側にも同じ感覚を味わってほしい、というわけだ。

既製の難読化ツールは山ほどある。だが難読化というものは、一度自分の手で書いてみないと、使えるだけで分かったことにはならない。普段のリバースエンジニアリングは dex/class を引っ剥がして、他人が難読化したバイトコードを人間の言葉に戻す仕事だ。逆に出題する側に立ってみて初めて、普通の class がどんな細工をされて厄介になったのかがはっきり見えてくる。

本当に時間を食うのは書き換えそのものではなく、書き換えた後もちゃんと動かすことだ。バイトコードはソースコードと違って、一箇所いじると、スタックフレーム、ローカル変数テーブル、ジャンプのオフセットが全部それに合っていないといけない。少しでも間違えると JVM が即 VerifyError を突きつけてくる。だから労力は全部検証に消える。一版書き換えては一版走らせ、逆コンパイルして本当に潰れているか確認し、ついでに機能が壊れていないかも確かめる。数をこなして初めてどこが一番えげつないかが分かるし、こういうものを書くのはむしろ手に馴染んでいる。

ただの小さなツールだ。star は自分で押したもので、リポジトリも今はアーカイブ済み、商用の難読化ツールと張り合うつもりもない。2024 年末にバイトコードをいじって残した手記のようなものだ。それでも自分にとっては価値があった。書き終えてから他人のものをリバースすると、手口を見る目つきが変わる。あの手の罠は、自分でも一度埋めてみたのだから。