jdb 调试 java_Java逆向基础之JDB动态调试

JDB在有源代码的时候可以实现调试远程机器上的java程序,但是在逆向中源码很难分析出来,不过还是能够调试得到一部分信息的

本文主要获取两个信息

1.动态调用混淆类中的方法,因为实践过程中我们去手动补全相关代码比较难

2.打印调用栈

以下例子以调试ZKM.jar为例

JDB无源代码调试调用方法

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

3df52c6831da8ebe5bc9ccacaf6e6f08.png

JDB无源代码连接(如果是同一台电脑,需要新开一个cmd)jdb -connect com.sun.jdi.SocketAttach:hostname=localhost,port=8000

ba13cf036ed8c5c6cc56a516e304f097.png

在com.zelix.lh类的a方法设置断点stop in com.zelix.lh.a

ec8ec41b8da2d2de574700691f9e4128.png

run命令,运行到断点会停下run

6f7e872d529eb10348567d09d18e77dc.png

输入next单步执行next

e5e9dc57354b949f23dc6c3867462493.png

使用clear命令清除刚才的断点clear com.zelix.lh.a

90dc5f57e1fcfa57a245980c728f4437.png

使用print命令调用a方法print com.zelix.lh.a("BZLJ70ifAHJAW",1881109385)

d314ccb1292e74557651547263417dcb.png

上面演示了静态类方法的调用,动态类也可以print new java.lang.String("Hello").length()

00c62b7131f1962bbbf06df67e04365d.png

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

98aef3d3b070951f4d335dc2d602f064.png

883f7390f88327301d5ad33fa84d6516.png

使用quit退出调试quit

注意调用方法时,相关的类必须已经加载,方法中打的断点必须清除,否则会抛出异常。

混淆的代码一般都去除了调试信息locals查看本地变量,stop at 行断点这些基本上无法输出有效信息

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值