记录一次Arthas使用

蒋钦
• 阅读 974

记录一次Arthas使用

前言

在疫情期间,首先要为武汉加油,中国加油!!!

在家办公,每天都是007,感觉自己已经升级为熊猫特工了,心累,身体疲惫!!!

今天终于有时间休息一下,然后记录一下在家办公期间Arthas的简单使用。

下载安装

下载安装就不多说了。直接贴官网教程。

下载:curl -O https://alibaba.github.io/art...

启动:java -jar arthas-boot.jar

这里需要重点说明一下:必须使用和目标进程相同的用户,否则启动不成功。

问题背景

本人前天刚上线一个任务。由于某产品手误,误操作了线上数据,要求帮忙把数据删除了。

这尼玛的真坑啊,明显是坑老子。

还好有先见之明,没次做任务的时候多多少少都会写几个后门工具(不是为了删库跑路,而是这些后门在特定情况下真能应急使用,求人不如求己)。但是这次后门工具还有改造一下才行,大半夜的又找不到人来帮你上线,自己又没有权限。这时候想起了Arthas这个工具可以热加载。

重点来了

  • jad反编译代码
jad --source-only com.xxx.xxx.service.aggregate.AggregateNoRoomService > /tmp/AggregateNoRoomService.java
这里有保密协议限制,包路径已经打码,小伙伴们直接看过程就可以了。
  • vim修改反编译出来的代码
public AggregateNoRoom getAggregateNoRoom(String agentHotelId) {
      List<AggregateNoRoom> aggregateNoRooms = aggregateNoRoomDao.selectList(agentId);
         if (CollectionUtils.isEmpty(aggregateNoRooms)) {
        return null;
      }
      //新增加的逻辑
      for (AggregateNoRoom room : aggregateNoRooms) {
      aggregateNoRoomDao.delete(room.getId())
    }
      return aggregateNoRooms.get(0);
}
  • 将这个类重新编译成class文件
这里就不过说明了,简单的程序直接javac x x x x.java就可以了,但是我这个类里面还依赖了其他的类型,所以我是用maven直接编译的整个Java项目,然后但是把这个新的class文件copy出来然后上传到服务器的。

正常来说是应该使用Arthasmc命令来重新编译这个修改后文件。但是我在服务器上始终没有编译成功,错误原因以后在研究。

  • sc查找加载AggregateNoRoomService的ClassLoader
sc -d * AggregateNoRoomService | grep classLoaderHash

返回结果:classLoaderHash 1b36fa2

  • redefine热更新代码
redefine /tmp/AggregateNoRoomService.class

返回结果:redefine success, size :1

这是时候可以在使用jad命令,在反编译一下这个类,看看是不是真正更新成功了。

执行后门工具

见证奇迹的时候到了,数据被清理掉了,没有求ops给你开权限重新部署程序,没有给你的tl打电话说要临时审批一个脚本。太爽了。

但是我在这里还是强调一下,最好还是慎用,毕竟走正规流程还不不用背锅的。(这么做很容背锅,而且产品小哥或者产品小姐姐下次会直接找你帮我修复点数据呗,直接绕过了你领导或上级。说明我这里真的没有黑产品, 来吧互相伤害吧

总结

Arthas其实还是很强大的,可以帮我们排查线上问题,环境允许的情况建议可以使用,会带来很多便利,这里就过多说明了。

后续还会更新Arthas的其他使用,喜欢的小伙伴可以关注我的公众号。


  • 写作不易,转载请注明出处,喜欢的小伙伴可以关注公众号查看更多喜欢的文章。
  • 联系方式:4272231@163.com
  • QQ:95472323
  • 微信:ffj2000

    记录一次Arthas使用

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
美凌格栋栋酱 美凌格栋栋酱
7个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Easter79 Easter79
3年前
sql注入
反引号是个比较特别的字符,下面记录下怎么利用0x00SQL注入反引号可利用在分隔符及注释作用,不过使用范围只于表名、数据库名、字段名、起别名这些场景,下面具体说下1)表名payload:select\from\users\whereuser\_id1limit0,1;!(https://o
梦
4年前
微信小程序new Date()转换时间异常问题
微信小程序苹果手机页面上显示时间异常,安卓机正常问题image(https://imghelloworld.osscnbeijing.aliyuncs.com/imgs/b691e1230e2f15efbd81fe11ef734d4f.png)错误代码vardate'2021030617:00:00'vardateT
Wesley13 Wesley13
3年前
2020年度热词
bili的年度热门弹幕:01爷青回Myyouthisback.02武汉加油Comeon,Wuhan!03有内味了Youfinallygetitright.04双厨狂喜Theecstasyofseeingtwoidolsperforminginthesamework.05禁止套娃
Wesley13 Wesley13
3年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
PHP创建多级树型结构
<!lang:php<?php$areaarray(array('id'1,'pid'0,'name''中国'),array('id'5,'pid'0,'name''美国'),array('id'2,'pid'1,'name''吉林'),array('id'4,'pid'2,'n
CRM从哪些方面进行了管理?
我们将CRM(https://www.sap.cn/products/crm.html!image(https://imghelloworld.osscnbeijing.aliyuncs.com/imgs/17e2d96568a98f0
深度学习 深度学习
1个月前
1999年NOIP普及组旅行家的预算(洛谷P1016):贪心算法实战指南
一、问题背景旅行家的预算是1999的经典题目,考察在实际问题中的应用。题目描述一位旅行家需要从起点到终点,途中有若干个加油站,每个加油站油价不同,要求在有限油箱容量下规划最优加油策略,使总花费最少。二、数据结构设计structStationdoubledi