Java逆向基礎之JDB動態調試
阿新 • • 發佈:2018-04-25
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動態調試