首页
社区
课程
招聘
[推荐]Arthas(阿尔萨斯) Java调试利器
发表于: 2020-1-13 18:32 3703

[推荐]Arthas(阿尔萨斯) Java调试利器

2020-1-13 18:32
3703

Arthas(阿尔萨斯) 是阿里开源的调试工具,以前看了看觉得是命令行下的,感觉不如jad等反编译工具好用,这几天碰上一个混淆很厉害的包,才了解了一下,感觉这个工具的强大。

jad对混淆的代码,尤其是字符串加密的很难看,本来想通过设置java代理的方式dump内存的class看看

java -javaagent:dump.jar -jar ZKM.jar
一运行报错

字符串是des加密的,通过代理加载运行不行,即使代理方法里什么都不写也不行。
本地dump不行就试试运行时dump吧,找了一个dumpclass.jar的,也是运行没反应。

想通过Aspectj试试同样也是不行

最后想远程调试,同样是运行不起来。

最后看到Arthas,运行很完美,而且还可以支持内存的jad反编译,还有dump,支持管道和重定向。还可以mc内存编译,编译好的可以进制热更新。getstatic可以输出内存的静态变量值。sc查找类,打印详细类,-f可以打印属性,sm可以查找类的方法。支持ognl表达式,这个就厉害了,直接可以输出类的静态变量值,调用类的方法,脑洞大开的用法竟然想到了反射,有了反射,就像塞尔达里的盾反一样,一切皆可反,给段代码膜拜一下
https://github.com/alibaba/arthas/issues/641
ognl '#field=@demo.MathGame@class.getDeclaredField("random"), #field.setAccessible(true), #field.set(null,null)'

接下来有用的就是watch命令了,可以观察一个方法,只要这个方法被调用用,就可以输出入参和返回值。
就介绍这么多吧,其他用法还是要去官网查。

简单介绍一下用法,也是刚用一天,还没时间具体研究
首先可以用thread查看当前进程,默认1就是java的main方法,可以直接用thread 1查看加载过程



可以看到类的加载过程,太多没显示全
查看类的详细信息
sc -d -com.zelix.aae

包含属性field信息
sc -d -f com.zelix.aae

查看这个类的名称为a的方法,a可以省略,会显示所有的
sm -d com.zelix.aae a

获取静态属性a的值
getstatic com.zelix.aae a

反编译重定向输出到文件,可以不用重定向,会支持输出到默认logs目录下,不过这个生成的class文件2.2M,用jad打开卡死了,重定向的java文件为10.8M,vscode打开都费劲,因为java还要识别关键字什么的,太大vscode加载过程中关闭了这个功能
jad com.zelix.aae > /home/googlewell/aae.java

这个混淆后的字符还是des加密的,普通的getstatic或者ognl输出的静态值也是乱码,只有从方法下手了,这就是watch的厉害了
watch com.zelix.aae a '{params,returnObj}' 'returnObj instanceof String'

看看watch的效果,原形毕露了


大致介绍这么多,抛砖引玉。


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 2020-1-13 19:14 被guduzhe编辑 ,原因: 错别字
收藏
免费 1
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//