破解 jar 包之直接修改 .class 文件方式

article/2025/9/25 19:11:32

一、常规 JAVA 软件破解流程

先讲一下常规jar包的破解流程。

1. 快速定位。

         1) 通过procmon监控相关软件,查看程序都访问了些啥。
         2) 用jd-gui反编译 jar 包,得到源码。
         3) 搜索关键字以定位。
这种定位方法只是千万种中的一种,根据不同软件的不同执行特性再具体实施不同的定位方案。

2. 修改破解。

1) 用 dex2jar 将 JAR 包转成 Dex 文件。
         2) 再将 Dex 解出 Smali。
         3) 修改 Smali 代码
         4) 将修改后的文件重新打包回 Dex
         5) 最后转成 JAR 包,破解完成。

二、直接修改 .class 字节码的方式实现破解

上面的方式基本已经可以解决破解JAR包的需求。但最近研究了一下直接修改.class 字节码的形式来实现修改程序流程的方法,总有会用得上的应用场景的。下面进入正题。
很多时候别人的 jar 包,反编译过来后是没办法直接用Eclipse创建java 工程再编译通过的。各种引用及反编译带来的错误会让人抓狂。既然破解的关键点已经找到了,我们可以不可以直接修改.class 字节码以实现破解呢,答案是肯定的。
此处省略定位环节,不是本文重点。

准备工具

1.      jclasslib 源码地址:https://github.com/ingokegel/jclasslib
2.      010 Editor 神器不多说

参考资料

1.      The class file format
https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html#jvms-4.6
2.      中文版Class文件结构
http://gityuan.com/2015/10/17/jvm-class-instruction/

Start

假设通过反编译我们已经知道了关键代码的位置。
知道函数路径后,用jclasslib 打开 .class 文件定位的相关函数处。
<ignore_js_op>
点击右边的相关指令可以跳转到指令查询页面:
<ignore_js_op>
可以看到 aload_0 对应的字节码为 0x2a。以此类推,查询到我们需要的特征指令对应的字节码。
指令:
[Asm]  纯文本查看 复制代码
?
1
2
3
4
5
aload_0
ifnonnull 6 (+5)
iconst_5
ireturn
aload_0
字节码
[Asm]  纯文本查看 复制代码
?
1
2a c7 xx xx 08 ac 2a (xx xx 是 ifnonnull 后面跟的 2 字节立即数)
用 010 Editor 打开 .class 文件,会自动加载其文件格式的 .bt 格式解析文件
<ignore_js_op>
通过jclasslib 我们知道目标函数在methods 函数表中的19号索引位置,用010找到相应的位置
<ignore_js_op>
通过 .class 文件结构我们知道,具体代码在 struct attribute_info attributes 里面 u4attribute_length 描述了代码区长度。接着下面给出了以1字节为单位的代码区数组。通过查询 attribute_info 结构体我们知道这里的 info 数组其实还包含了很多结构信息在里面,我们可以手工对应一下。
因为我们查看的是 Methods表 u2 attribute_name_index 通常指向的是 Code 结构体,表明这段结构体是 Code 结构体。看一下 Code 结构的说明:
[Asm]  纯文本查看 复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
Code_attribute{
     u2 attribute_name_index;
     u4 attribute_length;
     u2 max_stack;
     u2 max_locals;
     u4 code_length;
     u1 code[code_length];
     u2 exception_table_length;
     {  u2 start_pc;
         u2 end_pc;
         u2 handler_pc;
         u2 catch_type;
     } exception_table[exception_table_length];
     u2 attributes_count;
     attribute_infoattributes[attributes_count];
}

 

<ignore_js_op>
通过jd-gui 反编译时我们已经知道,这个函数返回的是一个Int型数值,函数体内做了一些判断处理,这里我们将把这个函数修改成直接返回我们需要的数值。
比如 return 1000;
上面这句话对应jvm 指令为:
[Asm]  纯文本查看 复制代码
?
1
2
sipush 1000
ireturn
对应的字节码是:
[Asm]  纯文本查看 复制代码
?
1
11 03 E8 AC (03 E8= 1000数字是高字节序)
修改完后的样子
 
<ignore_js_op>

 

然后,结构体后面多余的字节就可以直接删除了。
现在大功告成,将修改后的 .class 文件替换原来的就可以了。

需要注意的细节坑

1.      010 Editor在解析 .class 常量池数组时对 01 0000 (空的 CONSTANT_Utf8 类型)的支持不好,可能导致出错。调试时可以先将出错的这三个字节码删除,并对应修改constant_pool_count 常量池个数,再按 F5 重新解析。
注意:此时索引的序号指向可能是错的,可以结合 jclasslib 查看对应值。
2.      重新打包 JAR 包,运行时提示"AWT-EventQueue-0" java.lang.SecurityException: SHA-256 digesterror for ***.class 。查看Manifest文件看看有没有RSA 加密设定,如果有直接删除,再打包运行就可以了。
大大们有更好更简洁的方法还请不吝赐教!

 

转载于:https://www.cnblogs.com/firstdream/p/9332672.html


http://chatgpt.dhexx.cn/article/5Ng7MtC2.shtml

相关文章

Maven项目整合MyBatis、Spring、Springmvc

一、MyBaits 1. MyBatis简介(了解) 1.1. 什么是MyBatis MyBatis 本是apache的一个开源项目iBatis&#xff0c;2010年这个项目由apache software foundation 迁移到了google code&#xff0c;并且改名为MyBatis 。2013年11月迁移到Github。 MyBatis是一个优秀的持久层框架&…

Git正解 脱水版 【10. 内部机制】

a.1 底层命令 之前大概介绍了30个Git常用命令,比如checkout/branch/remote等,由于Git的最初目标是一个工具集合,而不是VCS系统,因此包含了大量的底层命令,以便在类Unix系统的脚本中调用,所以这类命令被称为底层命令,而那些对用户更友好的命令,被称为封装命令.之前的介绍以封装…

微服务知识以及项目实战

01-Spring Boot 快速入门 Spring Boot 简介 Spring 作为一个软件设计层面的框架&#xff0c;在 Java 企业级开发中应用非常广泛&#xff0c;但是 Spring 框架的配置非常繁琐&#xff0c;且大多是重复性的工作&#xff0c;Spring Boot 的诞生就解决了这一问题&#xff0c;通过…

SQLMap使用攻略及技巧分享

SQLMap使用攻略及技巧分享 1.1 sqlmap简介1.2 下载及安装1.3 SQL使用参数详解1.4 实际利用以下为实战内容 sqlmap是一个开源的渗透测试工具&#xff0c;可以用来进行自动化检测&#xff0c;利用SQL注入漏洞&#xff0c;获取数据库服务器的权限。它具有功能强大的检测引擎,针对各…

Golang Devops项目开发

1.1 GO语言基础 1 初识Go语言 1.1.1 开发环境搭建 参考文档&#xff1a;《Windows Go语言环境搭建》 1.2.1 Go语言特性-垃圾回收 a. 内存自动回收&#xff0c;再也不需要开发人员管理内存 b. 开发人员专注业务实现&#xff0c;降低了心智负担 c. 只需要new分配内存&#xff0c;…

Clickhouse-MergeTree原理解析

MergeTree原理解析 表引擎是ClickHouse设计实现中的一大特色。可以说&#xff0c;是表引擎决定了一张数据表最终的“性格”&#xff0c;比如数据表拥有何种特性、数据以何种形式被存储以及如何被加载。ClickHouse拥有非常庞大的表引擎体系&#xff0c;截至本书完成时&#xff0…

Python数据分析高薪实战第七天 数据解析和电商行为分析案例

15 时间序列&#xff1a;时间数据的解析与应用 在很多数据分析任务中&#xff0c;经常会遇到处理时间相关的数据。比如电商网站经常需要根据下单记录来分析不同时间段的商品偏好&#xff0c;以此来决定网站不同时间段的促销信息&#xff1b;又或者是通过对过去十年的金融市场的…

C++语法整理(From GitHub)

&#x1f4d6; Github    |    &#x1f4da; Docsify 简体中文    |    English &#x1f4a1; 关于 &#x1f4da; 本仓库是面向 C/C 技术方向校招求职者、初学者的基础知识总结&#xff0c;包括语言、程序库、数据结构、算法、系统、网络、链接装载库等知识及面试经…

28款GitHub最流行的开源机器学习项目,推荐GitHub上10 个开源深度学习框架

20 个顶尖的 Python 机器学习开源项目 机器学习 2015-06-08 22:44:30 发布 您的评价: 0.0 收藏 1收藏 我们在Github上的贡献者和提交者之中检查了用Python语言进行机器学习的开源项目&#xff0c;并挑选出最受欢迎和最活跃的项目。”图1&#xff1a;在GitHub上用Python语…

十分钟的爬虫erAST解混淆

前言 本文大约4000字&#xff0c;阅读大约时间10分钟。 可以一口气读完入门在爬虫er手中如何使用AST去解混淆。 正文 抽象语法树&#xff08;Abstract Syntax Tree&#xff09;通常被称为AST语法树&#xff0c;指的是源代码语法所对应的树状结构。也就是一种将源代码通过构…

什么是目标检测?github项目解析(持续更新中)

温馨提示&#xff1a;文章内容完整但是过长&#xff0c;由于前后内容有关联&#xff0c;读者学习可以多开几个浏览器分屏有助于定位 目录 目标检测理论部分&#xff1a; 1.目标检测介绍 2.YOLOv5的检测原理 3.目标检测的意义 4.目标检测的应用场景 5.先行知识储备 &…

2021年你必须拥有的10个最流行和最基本的Linux应用

点击上方 "编程技术圈"关注, 星标或置顶一起成长 后台回复“大礼包”有惊喜礼包&#xff01; 每日英文 If you’re brave to say “good bye”, life will reward you with a new “hello”. -- Paulo Coelho. 如果你勇于对过去说“拜拜”&#xff0c;生活就会回赠给…

中国linux系统

对于广大电脑初级用户来说,Windows就是操作系统的代名词。但“天外有天,OS外有OS”,操作系统并非只有Windows一种。早在Windows诞生之前,Unix、Macintosh这些知名的操作系统就已经存在。只是因为Windows占据了操作系统绝大部分的市场份额,所以许多用户都不太熟悉Windows之…

Linux 下一代架构基金会宣布:联合腾讯等企业和社区,发力微服务标准化建设

2022年3月23日&#xff0c;NextArch 基金会正式宣布成立微服务 SIG&#xff08;Special Interest Group&#xff0c;以下简称“微服务技术组”&#xff09;&#xff0c;来自腾讯、字节跳动、七牛云、快手、BIGO、好未来和蓝色光标等多家企业的技术专家成为首批成员。 该小组聚…

2021年你应该拥有的10个最流行和最基本的Linux应用

前言 本文介绍了预计在2021年最受欢迎的十大Linux应用程序。那么现在让我们看看这个列表。 您是否正在寻找适合台式机或笔记本电脑的最佳Linux应用程序&#xff0c;以带您进入2021年&#xff1f;在本文中&#xff0c;我们将列出您必须在Linux操作系统上安装的最流行的Linux应用…

关于 Linux

Linus(林纳斯托瓦兹)&#xff1a;Linux 的开发作者&#xff0c;被称为Linux 之父&#xff0c;Linux 诞生时是芬兰赫尔辛基大学的在校大学生。 Stallman 斯特曼&#xff1a;开源文化的倡导人。 2、Linux 的含义 狭义&#xff1a;由Linus 编写的一段内核代码。 广义&#xff…

linux发展现状和学习建议

一、Linux在各领域发展的现状与趋势 很多新手都有一个很疑惑的问题&#xff1a;“Linux我听过&#xff0c;但是学习linux系统&#xff0c;能在上面干什么呢&#xff0c;或者说linux系统具体能做什么”&#xff0c;带着这个疑问&#xff0c;在本书的开篇&#xff0c;我们先来了解…

linux哪国的,Linux是什么它是哪个国家开发的

摘要 腾兴网为您分享:Linux是什么它是哪个国家开发的&#xff0c;信用管家&#xff0c;天天爱&#xff0c;美食天下&#xff0c;美甲帮等软件知识&#xff0c;以及平安app金管家&#xff0c;美发秀秀&#xff0c;圈子账本&#xff0c;传媒人&#xff0c;绝望表情包&#xff0c;…

Linux系统在信息社会的发展

随着信息技术的高速发展并迅速渗透到社会生活的各个方面&#xff0c;Linux日益成为人们学习、工作、生活不可缺少的基本工具&#xff0c;再过不了几年&#xff0c;不会使用Linux&#xff0c;就会象不识字一样使人举步维艰。进入大学&#xff0c;Linux无时无刻在伴随着我们&…

针对边缘计算,红帽企业Linux 9有哪些新功能?

每一次发布红帽企业Linux&#xff08;RHEL&#xff09;都激动人心&#xff0c;每一个&#xff08;大的&#xff09;新版本为业界提供十年以上的技术底座。RHEL 9标志着下一个里程碑&#xff0c;在稳定性、性能、升级和安全能力等领域提供全面改进。由于边缘计算是我们许多客户的…