Java逆向基础之JDB动态调试
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java逆向基础之JDB动态调试相关的知识,希望对你有一定的参考价值。
本文参考: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动态调试的主要内容,如果未能解决你的问题,请参考以下文章