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动态调试的主要内容,如果未能解决你的问题,请参考以下文章

性能分析之代码调试-动态修改内存变量值(C/C++)

性能工具之Java调试工具JDB

性能工具之 Java 调试工具 JDB

Java逆向基础之动态生成类

安卓逆向016之AS+smalidea插件动态调试(注册机)

解决JAVA单步调试键盘输入被JDB占用的问题