首页
社区
课程
招聘
[原创]IDA调试阻止java线程异常退出
2019-5-16 21:19 6220

[原创]IDA调试阻止java线程异常退出

2019-5-16 21:19
6220

       IDA调试阻止java线程异常退出


         最近在使用IDA调试分析某款产品遇见了一个头痛的问题,因为程序核心功能在native层实现的,所以主要的侧重点是分析so文件,但是在分析的时候总是出现java线程异常,导致程序异常退出,而且总是在分析到最关键的地方退出,开始的时候不知道怎么处理,跟程序抢时间,你肯定抢不过他,真的很懊恼,后来经过同事的指点,由于是java线程出了问题,可以使用jdb指令去操作线程试一试,果真有效,直接贴图:




        从图片中可以看出,出现异常错误的线程是Thread-2,具体出现错误的是哪个类下面的哪个函数的第几行都已经告诉我们了,反编译成smali文件,打开到出错代码的位置,返回到调用函数一看还真的是直接kill掉进程(具体的图片补贴了,有点职业操守)


        在调试过程中,当java线程出现异常的时候,调试程序会被挂起,最直观的现象就是IDA卡住跑不起来了,这时候就要注意看看是不是出现和我类似的情况。下面我就说一下怎么操作(友情提示:以下的操作都是围绕jdb指令展开的,不了解的同学请参考这里jdb百度百科)。

  • 首先查看一下Thread-2的线程ID,键入threads命令,从上图中可以看出列出的线程列表,Thread-2的线程ID号是0x1105;
  • 其次键入run命令让挂起的程序跑起来,这里有个小技巧,就是设置一个即将运行到某处的断点,我设置的是API断点,运行起来就能断下来,这样做的目的是保证程序不会马上退出,只要不退出后面就有机会让程序一直跑下去;
  • 最后键入suspend 0x1105,也就是挂起异常线程;

       

         这样程序就不会因为异常出错而退出了,你想要跟踪的东西就会很顺利的得到。需要注意的是第二步,一定不能要一直运行下去,这样会很快退出的。(个人实际应用中总结的一点小技巧,高手掠过,大牛勿喷,谢谢!



[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2019-5-16 21:21 被梨树生果编辑 ,原因:
收藏
点赞4
打赏
分享
最新回复 (4)
雪    币: 13505
活跃值: (4843)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
tDasm 2019-5-17 09:32
2
0
应该还有更简单的?好像在调试设置中有选项挂起所有线程
雪    币: 36
活跃值: (1001)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
芃杉 2019-5-17 09:59
3
0
mark,不错,学习了
雪    币: 7
活跃值: (223)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
bluth 2019-5-17 10:11
4
0
IDA中thread list 直接挂起可以?
雪    币: 28
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
蓝道子 2019-5-21 17:29
5
0
直接在IDA中挂起线程就完了
游客
登录 | 注册 方可回帖
返回