status
date
slug
tags
category
type
password
icon
Environment
- OS: Windows 10
- IntelliJ IDEA: 2024.2
- java: 1.8.0_202
- javassist: 3.12.1-GA
Objective
genRandomNumber.jar
:輸出十個隨機數
runJavaAssist.jar
:使用 Java Assist,將上述程式輸出改成十個順序的數字
Studying
Implementation
- 撰寫
genRandomNumber.java
,使用 Math.random() 產生十個隨機數並輸出
- 使用 IDEA 的 build artifacts 功能,將
genRandonNumber.java
打包成genRandomNumber.jar
- 使用 marven 建置專案,在
pom.xml
中將 javassist 套件引入 runJavaAssist 專案
- 在 runJavaAssist 的專案中新建 PremainClass 及 premain function,並在
Manifest.mf
中配置 Premain-Class
- 持續 Trace 用於產生隨機數的函式,Hook Random 函式庫的
nextDouble
函式
- 使用
premain
函式的參數inst.addTransformer
,獲得所有抓取到的 Class Name
- 使用
CtField
在 Hook 到的 Class 中宣告 static variable
- 將
nextDouble
函式的內容改寫,輸出自行宣告的函式,並持續累加
- 以 bytecode 型別將修改完的
CtClass
寫回classfileBuffer
Some command
打包成 jar:
java jar cvf target.jar *
用 javaagent 執行目標檔,並載入後續 jar 檔 :
java -javaagent:RunJavaAssist.jar -jar genRandomNumber.jar
Code
- Author:Zixu
- URL:https://zixu.us.kg/article/Javassist_入門課
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!