javaagent+asm破解censum

内容介绍

最近在学习字节码相关知识,了解到通过ASM字节码改写技术来做破解一些软件破解,非常感兴趣,本文记录一下破解

Censum的过程(仅个人学习使用)。

之前也写过一篇暴力破解Censum的文章,采用的方式是将Censum的jar包解压出来之后直接用工具改写字节码,然后重新打包,

这种方式呢,非常暴力,而且修改麻烦。今天采用的是javaagent+asm的方式,以一种相对优雅的姿态来破解Censum。

附上之前写过的相关文章:

字节码暴力破解censum(老版本)

Java虚拟机诊断利器

附上censum的jar包用于破解

https://download.csdn.net/download/fututadeyoushang/12100233


相关技术

Asm, Javaagent,Java字节码

相关工具

Arthas, Asm, ASM Bytecode Outline, jd-gui


Javaagent

Javaagent一般是一个jar文件,可以在java命令启动程序的时候通过参数-javaagent指定jar文件的位置,然后在class文件加载到JVM之前,javaagent的程序可以对指定的class或者指定的方法进行改写。

javaagent程序的有两种写法,一种是premain,这种方式会在class被加载到JVM之前就会修改字节码;另外一种方式是agentmain,是在要代理的程序启动之后通过JDK提供的attach api来远程代理,通信方式可能是信号或者Unix域套接字。

可以参考下这篇文章:

Guide to Java Instrumentation


Asm

Asm一种非常流行的字节码改写技术,已经成为了字节码改写事实上的标准。

asm官网


Arthas

Arthas是阿里巴巴开源的Java诊断工具。

Arthas官网

我有过一篇使用Arthas的文章

https://mp.weixin.qq.com/s/Lo1YZagQU9kgIA0LM9R-XA


Censum

censum是一个用于查看JVM内存泄漏等问题的可视化工具。

censum官网


破解

以下是相关的破解过程,包含asm代码编写,字节码查看等。


代码

完整工程代码链接:https://github.com/zhangxingr/CensumCrack


破解思路

看懂验证逻辑

要破解一个程序,首先我们要知道这个程序的验证逻辑,那么首先我们用jd-gui查看censum的jar包。

从一大堆反编译过的字节码中找到CensumStartupChecks.class这个文件

CensumStartupCheck.class文件

查看CensumStartupChecks的代码逻辑,会发现真正用于判断是否过期的逻辑在下面这个方法里面:

CanLoadState方法

实际上就是一个简单的日期判断,我们要破解该程序,就得改写这一部分的字节码,最简单就是直接在CanLoadState方法最前面插入一行代码

return CanLoadState.SUCCESS

改写字节码

通过ASM来改写字节码,核心代码如下:

因为要修改方法中的逻辑,所以定义一个MethodVisitor
指定要修改的方法名
指定要修改哪个类

上面的图片中,第二张和第三张都是套用的ASM使用的模板,只有第一张图片里面是涉及到真实修改的逻辑:

onMethodEnter让我们可以在刚进入一个方法的时候,插入一段逻辑

onMethodEnter中的逻辑翻译成java代码就是

return CanLoadState.SUCCESS;

何以见得呢?因为我是通过java代码反推回来的。先准备好我们想要的代码:

demo代码
枚举类

然后ide可以下载一个插件ASM Bytecode Outline,该插件可以生成ASM代码

asm插件生成的代码

maven打包

mvn clean package

打好的包

启动censum程序的同时指定代理

java -javaagent:censum-crack.jar -jar censum-full.jar

这样一整个过程下来之后,如果没有其他错,就完成了破解啦!!!

Arthas验证字节码被改写

之后可以通过arthas把CensumStartupChecks类给dump下来查看是否被改写啦。。。

关于arthas的使用可以参考我之前写过的文章

https://mp.weixin.qq.com/s/Lo1YZagQU9kgIA0LM9R-XA

参考资料

https://juejin.im/book/5c25811a6fb9a049ec6b23ee/section/5c2ca222f265da611c271646

https://juejin.im/book/5c25811a6fb9a049ec6b23ee/section/5c2ca217e51d4534402a493e

https://juejin.im/book/5c25811a6fb9a049ec6b23ee/section/5c2ca1f051882543871d8d4a

https://juejin.im/book/5c25811a6fb9a049ec6b23ee/section/5c2ca2306fb9a04a0604faa8

https://www.cnblogs.com/alinainai/p/12176493.html

https://mp.weixin.qq.com/s/Lo1YZagQU9kgIA0LM9R-XA

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • arthas简介 arthas 是Alibaba开源的Java诊断工具,基于jvm Agent方式,使用Instr...
    相远相连阅读 15,227评论 6 30
  • 前言 很早之前就写过面向切面的编程思想,主要学习了AOP的思想(参考:AOP简介)以及使用 AspectJ 实现简...
    Whyn阅读 10,875评论 4 40
  • 对于agent,是在vm启动,执行方法前,将字节码修改的服务代理。 对于javassist,是修改字节码具体实现。...
    城市里永远的学习者阅读 5,101评论 2 55
  • 虚度人生光阴 今日无法记录在人世间还希望能够改正自己 如果一旦形成习俗怎么能改命 别人唾手可得的东西又要花上几十个...
    任志博阅读 89评论 0 0
  • 很多人包括我自己,经常为自己不运动找借口,其实我们也都知道,时间是有的,只是都在不知不觉中浪费了。 ...
    fun麦兜阅读 203评论 0 0