1. 程式人生 > >Java逆向基礎之初識javaagent

Java逆向基礎之初識javaagent

javajavaagent初識

首先說一下javaagent是什麽

javaagent是一種能夠在不影響正常編譯的情況下,修改字節碼。

在逆向中javaagent可以完成對類的攔截和增強。

看一個例子

在Eclipse新建如下MyAgent結構的項目

技術分享圖片

MyAgent.java文件內容

package com.vvvtimes.demo.agent;

import java.lang.instrument.Instrumentation;

public class MyAgent {

    public static void premain(String agentOps, Instrumentation inst) {
        System.out.println("=========premain參數個數為2方法執行========,My agentOps = [" + agentOps + "].");
        System.out.println(agentOps);
    }

    public static void premain(String agentOps) {
        System.out.println("=========premain參數個數為1方法執行========,My agentOps = [" + agentOps + "].");
        System.out.println(agentOps);
    }
}

MANIFEST.MF文件內容

Manifest-Version: 1.0
Premain-Class: com.vvvtimes.demo.agent.MyAgent
Can-Redefine-Classes: true

註意:這裏的Premain-Class必須指向premain方法所在的類

在Eclipse導出jar的時候需要手動指定這個文件

技術分享圖片

我們將導出的jar命名為MyAgent.jar

再建立一個名為MyProgram的工程

代碼如下

package com.vvvtimes.demo;

public class MyProgram {
	public static void main(String[] args) {
		System.out.println("=========main方法執行========");
	}

}

導出可運行jar,命名為MyProgram.jar

將這兩個jar放到同一目錄(我是放到桌面)

cd切換到該目錄後執行

java -javaagent:MyAgent.jar=helloworld -jar MyProgram.jar

運行結果如下

C:\Users\admin\Desktop>java -javaagent:MyAgent.jar=helloworld -jar MyProgram.jar
=========premain參數個數為2方法執行========,My agentOps = [helloworld].
helloworld
=========main方法執行========

可以看到main方法執行前執行了premain方法裏的兩個輸出語句

javaagent參數選項

java -javaagent:agentjar 文件的位置 [= 傳入 premain 的參數 ] -jar 要運行的jar文件


Java逆向基礎之初識javaagent