内容介绍

最近在学习字节码相关知识,了解到通过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

javaagent+asm破解censum的更多相关文章

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

    声明 事先声明,本文仅提供破解方法以供个人及读者们学习Java字节码,不提倡破解程序. 本文是个人学习掘金小册张师傅的<JVM字节码从入门到精通>后,作为一个实践的记录,并无恶意. 关于c ...

  2. 仅仅使用Google就完成了人生第一次破解

    2021年2月6日21:17:09 begin 起因 在异乡的打工人,不善言谈,幸有一老同学,周末常邀吃饭,感恩之心铭记于心.她结婚时,为表心意欲做视频,视频需要制作字幕,搜索之,偶遇一字幕软件,但是 ...

  3. JVM插码之五:Java agent+ASM实战--监控所有方法执行时间

    本文建立在对instrumentation和agent有初步的了解的前提下阅读,关于这2个类的讲解在其它文章中. 这是一个maven项目,pom中需要的配置,lib中有asm的jar包 pom.xml ...

  4. idea破解方式 附jar包

    在安装了idea之后 去安装目录找到安装目录的 idea.exe.vmoptions 和 idea64.exe.vmoptions 两个文件在文件最后面追加上 -javaagent:C:/破解补丁的名 ...

  5. JAVA堆外内存

    JVM可以使用的内存分外2种:堆内存和堆外内存. 堆内存完全由JVM负责分配和释放,如果程序没有缺陷代码导致内存泄露,那么就不会遇到java.lang.OutOfMemoryError这个错误. 使用 ...

  6. 曹工说Spring Boot源码(25)-- Spring注解扫描的瑞士军刀,ASM + Java Instrumentation,顺便提提Jar包破解

    写在前面的话 相关背景及资源: 曹工说Spring Boot源码(1)-- Bean Definition到底是什么,附spring思维导图分享 曹工说Spring Boot源码(2)-- Bean ...

  7. 对抗密码破解 —— Web 前端慢 Hash

    (更新:https://www.cnblogs.com/index-html/p/frontend_kdf.html ) 0x00 前言 天下武功,唯快不破.但在密码学中则不同.算法越快,越容易破. ...

  8. GJM : 使用浏览器的计算力,对抗密码破解 [转载]

    感谢您的阅读.喜欢的.有用的就请大哥大嫂们高抬贵手"推荐一下"吧!你的精神支持是博主强大的写作动力以及转载收藏动力.欢迎转载! 版权声明:本文原创发表于 [请点击连接前往] ,未经 ...

  9. Jrebel6.3.3破解,配置图文教程

    JRebel是个很好的开发工具,我在网上找了好久都没有找到很详细的教程,破解与配置教程千篇一律,步骤不详细.编写这篇教程,综合网络上的知识,加上了自己的理解与详细图文步骤. 安装 一般最新的插件是没有 ...

随机推荐

  1. 9.深入k8s:调度器及其源码分析

    转载请声明出处哦~,本篇文章发布于luozhiyun的博客:https://www.luozhiyun.com 源码版本是1.19 这次讲解的是k8s的调度器部分的代码,相对来说比较复杂,慢慢的梳理清 ...

  2. [BUUOJ记录] [ACTF2020 新生赛]Include

    本题主要考查了利用php://filter伪协议进行文件包含 进入题目根据Tip进入正题,可以看到URL中存在文件包含(题目名也很直接) 首先考虑 "php://input"伪协议 ...

  3. 哈希,hash

    Hash,一般翻译做散列.杂凑,或音译为哈希.----摘自百度百科 先来看个题:给你一坨一些键值集<key,value>,\(key\)的范围是\([1,10^{10}]\),每次询问\( ...

  4. Q200510-01: 求部门工资最高的员工

    问题: 求部门工资最高的员工 Employee 表包含所有员工信息,每个员工有其对应的 Id, salary 和 department Id. +----+-------+--------+----- ...

  5. 哪些方法可以绕过PowerShell Execution Policy?

    哪些方法可以绕过PowerShell Execution Policy? 转: https://blog.csdn.net/qq_27446553/article/details/50577296

  6. 3896. 【NOIP2014模拟10.26】战争游戏

    鉴于如此一道恶心的题,作者还花了一个晚上草草学了tarjan. 于是乎,这道题就是道tarjan 具体怎么实现呢?正解上有个什么树形DP,看的我一脸懵逼. 这道题可以运用到tarjan一个高科技的算法 ...

  7. (超详细)动手编写 — 栈、队列 ( Java实现 )

    目录 前言 栈 概念 栈的设计 编码实现 小结 队列 概念 队列的设计 编码实现 双端队列 概念 设计 编码 循环队列 循环队列 循环双端队列 声明 前言 栈 概念 什么是栈? **栈 **:是一种特 ...

  8. 反向代理搭建隧道,服务器系统为Ubuntu18.04

    该文章参考了实验室师兄写的教程,并记录了自己在实操过程中的坑. 1.内网机器配置 假设现在有一台公用服务器和一台内网服务器,现在想通过反向代理的方式来访问内网服务器.假设公用服务器为A,内网服务器为B ...

  9. linux下开启防火墙,允许通过的端口

    1.查看防火墙状态 systemctl status firewalld 2.如果不是显示active状态,需要打开防火墙 systemctl start firewalld 3.# 查看所有已开放的 ...

  10. oracle之二redo日志

    redo 日志 4.1 redo (重做) log 的功能:数据recovery4.2 redo log 特征:     1)记录数据库的变化(DML.DDL)     2)用于数据块的recover ...