码迷,mamicode.com
首页 > 数据库 > 详细

Java逆向基础之JDB动态调试

时间:2018-04-25 17:00:53      阅读:492      评论:0      收藏:0      [点我收藏+]

标签: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动态调试

标签:javaJDB调试

原文地址:http://blog.51cto.com/7317859/2107738

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!