1. 程式人生 > >ASM的一個例子(動態位元組碼生成) (Java高階程式設計(J2SE綜合))

ASM的一個例子(動態位元組碼生成) (Java高階程式設計(J2SE綜合))

導讀:
用ASM寫的Hello World。在網上搜索ASM有關的文章,最後居然又找回Matrix。。汗

ASM2.0位元組碼框架介紹
http://www.matrix.org.cn/resource/article/2006-02-20/ASM+Bytecode+Framework_44220.html


藉助ASM寫了一個Aqua Data Studio 6.0的破解:

做法很簡單:
1、找到判斷license的方法,修改程式碼使總返回true
2、將1個license執行緒kill掉。

將jar拷到安裝目錄,修改datastudio.bat檔案的最後一行為:
java -javaagent:ads.crack.jar -cp "./lib/ads.jar;%ADS_PATH%" com.aquafold.datastudio.DataStudio

由於論壇不支援jar檔案上傳,將副檔名改為ads.crack.jar即可。


有時候,如果想要得到程式中某個Class的所有例項,也可以用asm修改程式碼得到:



問題:如果原始類有、或者沒有靜態初始化塊,處理方法就是不同的。
想了一下,也許可以在visitMethod方法中設定標誌,再在visitEnd方法中進行補充處理(針對沒有的情況)。
另外,如果有多個建構函式,怎樣保證插入的程式碼不會重複執行呢?
甚至,想要在原始碼中插入語句,插入位置的尋找也比較費盡,(需要找到不同的RETURN語句的位元組碼)