.classファイルにコンパイルされたJavaコードがあります。いくつかのパラメーターを取得して何らかのアクションを実行する関数があります(たとえば、intxとintyを取得してx + yを実行します)
x = 1かどうかをチェックするこの.classファイルコードに追加したいと思います。別の関数を呼び出す(たとえば、xyを呼び出してx + yを実行しない)
コンパイルされた.classファイルを編集して独自のコードを追加するにはどうすればよいですか?
コメント
- 質問を編集しました。これが実際に質問したかったことです。そうでない場合は、コメントで明確にするか、自分で編集してください。
回答
これを実現するには、いくつかの方法があります。
-
.classを.javaソースに逆コンパイルします(必ずしも元のソースではありませんが、同等です)、変更を加えて、再度コンパイルします。Javaデコンパイラーはたくさんありますが、すべてをリストするわけではありません。
-
.classを分解して「アセンブリ」(通常はJasmin構文)、変更、アセンブルバック。 Krakatau は、それを実行できるはずの優れたツールです。
-
変更可能なツールを使用してください/ .classファイルに直接バイトコードをパッチします。試したことはありませんが、 Recaf はそれができると主張しています。
-
Javaをフックしますランタイムインタープリターは、ターゲット関数の実行を開始した瞬間をキャッチし、代わりに別の何かを実行させます。これは実装固有ですが、Javaデバッグプロトコル(JWDP)を使用する例を次に示します。 https://github.com/CrowdStrike/pyspresso
回答
JByteModを使用してクラスのバイトコードを編集できます。新しいメソッドを作成したり、メソッド、フィールドを削除したり、アクセスを変更したりすることもできます。
非常に使いやすく、jarをロードして、編集するクラスを選択するだけです。
JByteMod: https://github.com/GraxCode/JByteMod-Beta/releases
コメント
- JByteModは、残念ながら2年間で'更新されていません。著者は、似たような性質ではありますが、さまざまなプロジェクトに飛びつきました。