1. 程式人生 > >Java逆向基礎之JDB動態調試

Java逆向基礎之JDB動態調試

javaJDB調試

本文參考:https://docs.oracle.com/javase/8/docs/technotes/tools/windows/jdb.html

JDB在有源代碼的時候可以實現調試遠程機器上的java程序,但是在逆向中源碼很難分析出來,不過還是能夠調試得到一部分信息的

本文主要獲取兩個信息

1.動態調用混淆類中的方法,因為實踐過程中我們去手動補全相關代碼比較難

2.打印調用棧

以下例子以調試ZKM.jar為例


JDB無源代碼調試調用方法

啟動Xdebug調試

java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 -jar ZKM.jar

技術分享圖片

JDB無源代碼連接(如果是同一臺電腦,需要新開一個cmd)

jdb -connect com.sun.jdi.SocketAttach:hostname=localhost,port=8000

技術分享圖片

在com.zelix.lh類的a方法設置斷點

stop in com.zelix.lh.a

技術分享圖片

run命令,運行到斷點會停下

run

技術分享圖片

輸入next單步執行

next

技術分享圖片

使用clear命令清除剛才的斷點

clear com.zelix.lh.a

技術分享圖片

使用print命令調用a方法

print com.zelix.lh.a("BZLJ70ifAHJAW",1881109385)

技術分享圖片

上面演示了靜態類方法的調用,動態類也可以

print new java.lang.String("Hello").length()

技術分享圖片

打印調用棧where(wherei也可以,多打印PC寄存器值)

技術分享圖片


技術分享圖片

使用quit退出調試

quit

註意調用方法時,相關的類必須已經加載,方法中打的斷點必須清除,否則會拋出異常。

混淆的代碼一般都去除了調試信息locals查看本地變量,stop at 行斷點這些基本上無法輸出有效信息


Java逆向基礎之JDB動態調試