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.jarCode
- Author:Zixu
- URL:https://zixu.eu.org/article/Javassist_入門課
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!












