砍材农夫砍材农夫
  • 微信记账小程序
  • java
  • redis
  • mysql
  • 场景类
  • 框架类
  • vuepress搭建
  • hexo搭建
  • 云图
  • 常用工具

    • git
    • gradle
    • Zadig
    • it-tools
    • 开源推荐
    • curl
  • 大前端

    • nodejs
    • npm
    • webpack
    • 微信
    • 正则
    • uniapp
  • java

    • java基础
    • jdk体系
    • jvm
    • spring
    • spring_cloud
    • spring_boot
    • 分库分表
    • zookeeper
  • python

    • python基础
    • python高级
    • python框架
  • 算法

    • 算法
  • 网关

    • spring_cloud_gateway
    • openresty
  • 高可用

    • 秒杀
    • 分布式
    • 缓存一致
  • MQ

    • MQ
    • rabbitMQ
    • rocketMQ
    • kafka
  • 其它

    • 设计模式
    • 领域驱动(ddd)
  • 关系型数据库

    • mysql5.0
    • mysql8.0
  • 非关系型数据库

    • redis
    • mongoDB
  • 分布式/其他

    • ShardingSphere
    • 区块链
  • 向量数据库

    • M3E
    • OPEN AI
  • Jmeter
  • fiddler
  • wireshark
  • AI入门
  • AI大模型
  • AI插件
  • AI集成框架
  • 相关算法
  • AI训练师
  • 量化交易
  • gitee
  • github
  • infoq
  • osc
  • 砍材工具
  • 关于
  • 相关运营
  • docker
  • k8s
  • devops
  • nginx
  • 元宇宙
  • 区块链
  • 物联网
  • linux
  • webrtc
  • web3.0
  • gitee
  • github
  • infoq
  • osc
  • 砍材工具
  • 关于
  • 中考
  • 投资
  • 保险
  • 思
  • 微信记账小程序
  • java
  • redis
  • mysql
  • 场景类
  • 框架类
  • vuepress搭建
  • hexo搭建
  • 云图
  • 常用工具

    • git
    • gradle
    • Zadig
    • it-tools
    • 开源推荐
    • curl
  • 大前端

    • nodejs
    • npm
    • webpack
    • 微信
    • 正则
    • uniapp
  • java

    • java基础
    • jdk体系
    • jvm
    • spring
    • spring_cloud
    • spring_boot
    • 分库分表
    • zookeeper
  • python

    • python基础
    • python高级
    • python框架
  • 算法

    • 算法
  • 网关

    • spring_cloud_gateway
    • openresty
  • 高可用

    • 秒杀
    • 分布式
    • 缓存一致
  • MQ

    • MQ
    • rabbitMQ
    • rocketMQ
    • kafka
  • 其它

    • 设计模式
    • 领域驱动(ddd)
  • 关系型数据库

    • mysql5.0
    • mysql8.0
  • 非关系型数据库

    • redis
    • mongoDB
  • 分布式/其他

    • ShardingSphere
    • 区块链
  • 向量数据库

    • M3E
    • OPEN AI
  • Jmeter
  • fiddler
  • wireshark
  • AI入门
  • AI大模型
  • AI插件
  • AI集成框架
  • 相关算法
  • AI训练师
  • 量化交易
  • gitee
  • github
  • infoq
  • osc
  • 砍材工具
  • 关于
  • 相关运营
  • docker
  • k8s
  • devops
  • nginx
  • 元宇宙
  • 区块链
  • 物联网
  • linux
  • webrtc
  • web3.0
  • gitee
  • github
  • infoq
  • osc
  • 砍材工具
  • 关于
  • 中考
  • 投资
  • 保险
  • 思
  • 常见案例分析

    • 分布式ID
    • 分布式锁
    • 订单超时取消
    • 库存扣减问题
    • 幂等接口设计
    • 接口限流设计
    • 接口防刷设计
    • 多级缓存设计
  • 相关拓展知识

    • TCP和UDP区别
    • 签名算法
    • 身份认证令牌
    • 如何防止class类被反编译
    • 消息队列
    • maven如何统一指定jdk
    • maven常用插件
  • 算法|数据结构

    • 二叉树
    • 红黑树
    • 快速比较两棵树查找相同节点方法
  • 何谓反编译
    • 编译之后文件内容
  • 相关反编译工具和技术
  • 相关反编译工具演示
    • idea
    • JD-GUI
    • fernflower 命令方式
      • 命令操作
  • 如何防止
    • 代码混淆
    • 字节码加密 (Class Encryption)
    • 本地代码(JNI/JVMTI)与硬件绑定
  • 总结

何谓反编译

将编译后的 .class 字节码文件还原成可读的Java源代码的过程

编译之后文件内容

Image text

相关反编译工具和技术

工具/方法核心特点适用场景
IntelliJ IDEA内置反编译器 开发工具无缝集成,开箱即用,操作最简便。日常开发中快速查看第三方库的类源码,或进行调试。
JD-GUI经典的独立图形化工具,跨平台(Win/Mac/Linux),支持拖拽,操作简单直观。快速查看单个Jar包或Class文件,尤其是当你想把反编译结果保存下来时。
CFR / Procyon / Fernflower (命令行)功能强大,支持较新的Java特性(如Lambda、泛型),反编译成功率和代码准确性高。需要批量处理大量文件、处理高版本Java编译的类,或在服务器等无图形界面环境下使用。

相关反编译工具演示

idea

IntelliJ IDEA:它内置了 Fernflower 反编译器

Image text

JD-GUI

下载

https://java-decompiler.github.io/

安装好之后,直接将jar拖入个类文件拖到JD-GUI中,即可看到反编译结果

Image text

fernflower 命令方式

Fernflower 是一款由 JetBrains 官方推荐的 Java 反编译器

  • 下载 下载

http://the.bytecode.club/fernflower.jar

  • 源码

https://github.com/JetBrains/fernflower

命令操作

java -jar fernflower.jar D:\maven\repo\ai\djl\huggingface\tokenizers\0.32.0\tokenizers-0.32.0.jar ./decompiled_src/

Image text

如何防止

代码混淆

  • proguard 下载

https://github.com/Guardsquare/proguard?tab=readme-ov-file#-quick-start

  • java源码
package com.jysemel.java.basic;

public class UserService {
    private String userName;
    private int userAge;

    public UserService(String name, int age) {
        this.userName = name;
        this.userAge = age;
    }

    public void printUserInfo() {
        System.out.println("User Name: " + userName);
        System.out.println("User Age: " + userAge);
    }

    private int calculateBirthYear(int currentYear) {
        return currentYear - userAge;
    }

    public void printBirthYear(int currentYear) {
        int birthYear = calculateBirthYear(currentYear);
        System.out.println("Birth Year: " + birthYear);
    }

    public static void main(String[] args) {
        UserService user = new UserService("Alice", 30);
        user.printUserInfo();
        user.printBirthYear(2025);
    }
}
  • proguard 配置文件 (@config.pro)
# 指定输入/输出
-injars UserService.class
-outjars UserService_obfuscated.jar
# 指定当前运行环境(Java运行时库)
-libraryjars <java.home>/jmods/java.base.jmod(!**/*.class;!module-info.class)
# 保留入口点 main 方法(否则程序无法运行)
-keep public class UserService {
    public static void main(java.lang.String[]);
}
# 默认的混淆设置(重命名类、方法、字段)
-dontshrink          # 不压缩(可选,便于观察)
-dontoptimize        # 不优化(可选,便于观察)
-useuniqueclassmembernames   # 混淆后的方法名尽量唯一
-adaptclassstrings   # 适应字符串中的类名
  • 执行混淆命令

java -jar /path/to/proguard.jar @config.pro

字节码加密 (Class Encryption)

本地代码(JNI/JVMTI)与硬件绑定

总结

没有绝对的安全,只有不断增加的破解成本

最近更新: 2026/3/15 16:51
Contributors: kcnf
Prev
身份认证令牌
Next
消息队列