Java逆向基礎之初識javaagent
阿新 • • 發佈:2018-04-23
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