標籤: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.0Premain-Class: com.vvvtimes.demo.agent.MyAgentCan-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