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

  1. 撰寫 genRandomNumber.java,使用 Math.random() 產生十個隨機數並輸出
  1. 使用 IDEA 的 build artifacts 功能,將 genRandonNumber.java 打包成 genRandomNumber.jar
  1. 使用 marven 建置專案,在 pom.xml 中將 javassist 套件引入 runJavaAssist 專案
  1. 在 runJavaAssist 的專案中新建 PremainClass 及 premain function,並在 Manifest.mf 中配置 Premain-Class
  1. 持續 Trace 用於產生隨機數的函式,Hook Random 函式庫的 nextDouble 函式
  1. 使用 premain 函式的參數 inst.addTransformer,獲得所有抓取到的 Class Name
  1. 使用 CtField 在 Hook 到的 Class 中宣告 static variable
  1. nextDouble 函式的內容改寫,輸出自行宣告的函式,並持續累加
  1. 以 bytecode 型別將修改完的 CtClass 寫回 classfileBuffer

Some command

打包成 jar: java jar cvf target.jar *
用 javaagent 執行目標檔,並載入後續 jar 檔 :java -javaagent:RunJavaAssist.jar -jar genRandomNumber.jar
 

Code

Java 入門課BFS 隨筆
Loading...
Zixu
Zixu
Welcome to my webstie.
Analytics
Post Count:
226
Latest posts
碧藍之海
2025/09/26
還好我退了 新訓篇
2025/09/25
AP325 隨筆
2025/09/24
復活魔法
2025/09/16
還好我退了 部隊篇
2025/09/14
學院生存指南
2025/09/06