Skip to content
KitploitKITPLOIT
ツールエクスプロイトブログ
Log in
提出
ツールエクスプロイトブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

フィードお問い合わせプライバシー© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
javajive — Pure-Go Java デコンパイラおよびシリアライゼーション演算子 | Kitploit
ツール/GitHubGitHub/yaklang/javajive
静的分析コード分析リバースエンジニアリングスクリプトと自動化マルウェア分析ユーティリティとフレームワークバイナリ解析
GitHubyaklang/javajive

javajive

Pure-Go Java デコンパイラおよびシリアライゼーション演算子

リポジトリを見る
224888時間3分前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
ウェブサイト
共有

JavaJive — Pure-Go Java Toolkit: Decompile, Class Parse, Serialization

JavaJive

CI Pages Go Reference License: MIT

English | 简体中文 | Website

ポータブルな純粋Go製Javaツールキット — yaklangから抽出・整理されたもので、次の3つのことだけを行います:

  • デコンパイル — .class / .jar / .war / .zip → 読めるJavaソース。
  • クラスのパース — .classファイルの構造(定数プール、フィールド、メソッド、バージョン、アクセスフラグ)を検査。
  • (デ)シリアライズ — Javaシリアライゼーション(ObjectStream)のワイヤフォーマットをバイト単位の忠実性でパース・再マーシャリングし、JSONとの相互変換を行う。

ポータビリティと組み込みを目的として設計:

  • 純粋Go、単一バイナリ — JDK不要、cgo不要、ANTLRランタイム不要、ネイティブライブラリ不要。amd64とarm64のlinux / macOS / windowsにクロスコンパイル可能。
  • インポートは1つ — 統一されたjavajiveファサードパッケージが3つの機能すべてをラップ。高度な用途向けにサブパッケージも利用可能。
  • ファーストクラスのCLI — decompile、classinfo、serialサブコマンドを標準ライブラリ上に構築。
  • 実際のJDKに対するクロステスト — CIはjavac/javaで実際の.class / .jarおよびJDKシリアライズ済みブロブをコンパイルし、JavaJiveをそれらに対して検証します(HARNESS-WORKFLOW.md参照)。
  • 整理された依存グラフ — utils / codec / log / go-funkは最小限で自己完結したinternal/コアとして再実装。

v0.4.0の検証

完全な38-JAR差分監査は、固定ベースラインに対して記録されたリグレッションがゼロであることを示しています:以前コンパイルがクリーンだった20個のJARはすべて維持され、26個が完全にコンパイルされるようになりました。ベースラインの欠陥と4つの既存メソッドスタブは引き続き可視化されています。JARごとの結果と再現方法を参照してください。

250件の分離されたセマンティックラウンドトリップは、コンパイル、JVM検証、スタブ、ランタイム等価性を個別に記録します。元のアプリケーションクラスは再構築されたクラスパスに存在しません。CIはJDK 17と21でセマンティック監査、完全な履歴比較、OS/Goおよびレースマトリクスを実行します。これらのチェックはすべてのライブラリメソッドの等価性を証明するものではありません。実装と残された境界を参照してください。

過去のベンチマーク(v0.3.0)

以下の数値は2026-09-05にv0.3.0について報告されたものです。これらは現行バージョンの受け入れ結果でも、動作等価性の証明でもありません。

34個の実世界のjar(18,759個のフラット化ユニット)に対して、デコンパイル → javac --release 8再コンパイル → 再パッケージ → JVM検証で測定:

  • 100%ユニットクリーン率 — 18,759 / 18,759個のフラット化ユニット(Outer$Inner.java)が**javacエラーゼロで再コンパイルされ、34個のjarすべてで構文エラー0件**(CIで強制されるハードアサーションのため、字句解析の失敗の陰に型エラーが隠れることはありません)。
  • 34個のライブラリすべてが完全にラウンドトリップ — デコンパイル → 再コンパイル → 再パッケージ → 外部JVM -Xverify:allによるクラスごとの検証がエンドツーエンドで成功(コーデックは呼び出し差分において元のjarとバイト単位で同一)。provenCleanに固定。
  • 14 / 14のセルフホストアルゴリズム(MD5 · SHA-256 · CRC32 · quicksort · Base64 · HeapSort · KMP · SwitchFSM · TryFinally · UnionFind · DiamondTryCatch · DiamondTryFinally · ForContinue · ComputeIfAbsent)がバイト単位でラウンドトリップ。
  • 元の8-jarセットにおける公平な3者比較で第1位 — クリーンユニット率**100%**対Vineflower 1.10.1(90.8%)およびCFR 0.152(79.8%)。両者に対して8個のjarすべてで勝利。

完全な方法論、jarごとの表、再現コマンドについてはBENCHMARK.mdを参照してください。

インストール

# CLI
go install github.com/yaklang/javajive/cmd/javajive@latest

# Library
go get github.com/yaklang/javajive@latest

またはソースからビルド:

git clone https://github.com/yaklang/javajive
cd javajive
go build -o javajive ./cmd/javajive

Go 1.22以上が必要です。

CLI

javajive <command> [arguments]

Commands:
  decompile   decompile .class/.jar/.war/.zip or a directory into Java source
  classinfo   print the structure of a .class file (version, fields, methods)
  serial      Java serialization tools (subcommands: tojson, fromjson)
  version     print the version
  help        show help

decompile

# Single class: prints to stdout by default, or -o to write a file.
javajive decompile Foo.class
javajive decompile Foo.class -o Foo.java

# Archive: defaults to a "<input>.src" directory, or -o to choose one.
javajive decompile app.jar
javajive decompile app.war -o ./app-src

# Directory: recursively decompile .class files (requires -o output dir).
javajive decompile ./classes -o ./src

classinfo

javajive classinfo Foo.class
class:      InvisibleAnnoSeed
super:      java/lang/Object
version:    61.0
access:     public
constants:  18

fields (0):

methods (2):
   <init>()V
   run()I

serial

# Serialized binary -> JSON. (-hex: input is a hex string, -: read from stdin)
javajive serial tojson dump.bin
printf 'aced000574000568656c6c6f' | javajive serial tojson -hex -

# JSON -> serialized binary. (default prints hex; with -o writes raw bytes)
javajive serial fromjson dump.json -o out.bin
javajive serial fromjson dump.json          # prints hex

ライブラリ

統一ファサードパッケージを使用してください — 1つのインポートで3つの機能すべてをカバーします:

import "github.com/yaklang/javajive"

// Decompile a single class, or a whole archive into a directory.
src, err := javajive.Decompile(classBytes)
err = javajive.DecompileArchive("app.jar", "app-src")

// Inspect class structure.
obj, err := javajive.ParseClass(classBytes)
_ = obj.GetClassName()

// Java serialization: binary -> JSON -> binary.
objs, _ := javajive.ParseSerialized(raw)          // or ParseSerializedHex(hexStr)
jsonBytes, _ := javajive.SerializedToJSON(objs...)
restored, _ := javajive.SerializedFromJSON(jsonBytes)
out := javajive.MarshalSerialized(restored...)

統一API

関数目的
Decompile(classBytes) (string, error)1つの.classのバイト列をデコンパイル
DecompileFile(path) (string, error)ディスクから1つの.classをデコンパイル
DecompileWithResolver(classBytes, resolve)クラスバイト列リゾルバを使用してデコンパイル
DecompileArchive(src, dst) error.jar/.war/.zipをディレクトリにデコンパイル
ParseClass(classBytes) (*ClassObject, error)1つの.classのバイト列をパース
ParseClassFile(path) (*ClassObject, error)ディスクから1つの.classをパース
ParseSerialized(raw) ([]JavaSerializable, error)シリアライゼーションストリームをパース
ParseSerializedHex(hexStr) ([]JavaSerializable, error)16進エンコードされたストリームをパース
MarshalSerialized(objs...) []byteオブジェクトをワイヤフォーマットに再エンコード
MarshalSerializedHex(objs...) string16進に再エンコード
SerializedToJSON(objs...) ([]byte, error)オブジェクトをJSONに変換
SerializedFromJSON(raw) ([]JavaSerializable, error)JSONからオブジェクトを再構築

サブパッケージも高度な用途向けにエクスポートされています: classparser、classparser/jarwar、serialization。

上流yaklangとの違い

ポータブルかつ小さく保つため、JavaJiveはyaklangに対していくつかの意図的なトレードオフを行っています。完全なマッピングと移行ガイドについてはMIGRATE.mdを参照してください。

領域yaklang(上流)JavaJive
デコンパイラのANTLRセーフティネットANTLR Java文法を介してダンプされたソースを再検証;失敗時はメンバーをスタブに降格削除(重い依存関係);検証はノーオペレーションで、出力は直接生成される
サポート層(utils / codec / log / go-funk)共有モノレポパッケージinternal/配下の最小限で自己完結した再実装
ysoガジェットジェネレータ含まれる含まれない
文字列リテラルの文字集合復元(MatchMIMEType)オプションのGBK/GB18030復元スタブ化(ノーオペレーション);大多数のケースで動作は不変

サードパーティ依存は少数の純粋Goライブラリに限定されています (gobwas/glob、go-viper/mapstructure、samber/lo、tidwall/gjson、 segmentio/ksuid、yeka/zip、およびいくつかのgolang.org/x/*)。

テスト

go test ./...                 # unit tests + JDK cross-tests (skipped if no JDK)
go test ./... -race           # data-race free (linux)
go test ./test/cross/ -v      # Java cross-tests only (needs javac/java on PATH)

JDKクロステストはテスト時に実際のJavaアーティファクトをコンパイルし、JavaJiveに対して検証します。JDKが存在しない場合は自動的にt.Skipします。ハーネスとCIの仕組みについてはHARNESS-WORKFLOW.mdを参照してください。

プロジェクト構成

ツールをダウンロード