锋盈数科-知识库 Logo
首页
软件开发
计算机基础
Hello Halo
新手必读
关于本知识库
登录 →
锋盈数科-知识库 Logo
首页 软件开发 计算机基础 Hello Halo 新手必读 关于本知识库
登录
  1. 首页
  2. 软件开发
  3. Java反编译工具

Java反编译工具

0
  • 软件开发
  • 发布于 2024-09-21
  • 0 次阅读
黄健
黄健

JD-Core

最高支持到java12,项目最近更新是4年前。

fernflower

intellij内置反编译工具。最近有更新。反编译后的文件没有包名目录。

java -jar fernflower.jar -lit=0 test.jar ./test

-rbr (1): 隐藏桥接方法
-rsy (0): 隐藏合成的类成员
-din (1): 反编译内部类
-dc4 (1): 折叠 1.4 类引用
-das (1): 反编译断言
-hes (1): 隐藏空的 super 调用
-hdc (1): 隐藏空的默认构造函数
-dgs (0): 反编译泛型签名
-ner (1): 假设返回不会抛出异常
-den (1): 反编译枚举
-rgn (1): 当 getClass() 调用是限定 new 语句的一部分时移除它
-lit (0): 按原样输出数字字面值
-asc (0): 将字符串和字符字面值中的非 ASCII 字符编码为 Unicode 转义字符
-bto (1): 将 int 1 解释为 boolean true(编译器错误的解决方法)
-nns (0): 允许未设置合成属性(编译器错误的解决方法)
-uto (1): 将无名类型视为 java.lang.Object(编译器架构缺陷的解决方法)
-udv (1): 如果存在,重构调试信息中的变量名
-ump (1): 如果存在,重构对应属性的参数名
-rer (1): 移除空的异常范围
-fdi (1): 内联 finally 结构
-mpm (0): 每个反编译方法的最大允许处理时间(以秒为单位)。0 表示没有上限
-ren (0): 重命名模糊(即混淆的)类和类元素
-urc (-): 实现 IIdentifierRenamer 接口的用户提供类的全名。用于确定哪些类标识符应重命名并提供新标识符名称(请参阅"重命名标识符")
-inn (1): 检查 IntelliJ IDEA 特定的 @NotNull 注释并移除插入的代码(如果发现)
-lac (0): 将 lambda 表达式反编译为匿名类
-nls (0): 定义用于输出的新行字符。0 - '\r\n'(Windows),1 - '\n'(Unix),默认是操作系统相关
-ind: 缩进字符串(默认是 3 个空格)
-crp (0): 尽可能使用记录模式
-cps (0): 尽可能使用带模式的 switch
-log (INFO): 日志级别,可能的值有 TRACE, INFO, WARN, ERROR

cfr

cfr最近更新2年前。工具可以在java6已经更高环境运行。最高支持java14的反编译。

java -jar cfr-0.152.jar InnerClass.class

--aexagg: (布尔值)
--aexagg2: (布尔值)
--aggressivedocopy: (int >= 0) 默认值:0
--aggressivedoextension: (布尔值)
--aggressiveduff: (布尔值)
--aggressivesizethreshold: (int >= 0) 默认值:13000
--allowcorrecting: (布尔值) 默认值:true
--allowmalformedswitch: (布尔值)
--analyseas: (DETECT、JAR、WAR、CLASS 之一)
--antiobf: (布尔值) 默认值:false
--arrayiter: (布尔值) 默认值:如果 class 文件版本为 49.0 (Java 5) 或更高则为 true
--caseinsensitivefs: (布尔值) 默认值:true
--clobber: (布尔值)
--collectioniter: (布尔值) 默认值:如果 class 文件版本为 49.0 (Java 5) 或更高则为 true
--commentmonitors: (布尔值) 默认值:false
--comments: (布尔值) 默认值:true
--constobf: (布尔值) 默认值:与 antiobf 参数相同
--decodeenumswitch: (布尔值) 默认值:如果 class 文件版本为 49.0 (Java 5) 或更高则为 true
--decodefinally: (布尔值) 默认值:true
--decodelambdas: (布尔值) 默认值:如果 class 文件版本为 52.0 (Java 8) 或更高则为 true
--decodestringswitch: (布尔值) 默认值:如果 class 文件版本为 51.0 (Java 7) 或更高则为 true
--dumpclasspath: (布尔值) 默认值:false
--eclipse: (布尔值) 默认值:true
--elidescala: (布尔值) 默认值:false
--extraclasspath: (字符串)
--forbidanonymousclasses: (布尔值) 默认值:false
--forbidmethodscopedclasses: (布尔值) 默认值:false
--forceclassfilever: (字符串,指定 java 版本如 'j6', 'j1.0',或 class 文件版本如 '56', '56.65535')
--forcecondpropagate: (布尔值)
--forceexceptionprune: (布尔值)
--forcereturningifs: (布尔值)
--forcetopsort: (布尔值)
--forcetopsortaggress: (布尔值)
--forcetopsortnopull: (布尔值)
--forloopaggcapture: (布尔值)
--hidebridgemethods: (布尔值) 默认值:与 obfattr 参数相同
--hidelangimports: (布尔值) 默认值:true
--hidelongstrings: (布尔值) 默认值:false
--hideutf: (布尔值) 默认值:true
--ignoreexceptions: (布尔值) 默认值:false
--ignoreexceptionsalways: (布尔值) 默认值:false
--importfilter: (字符串)
--innerclasses: (布尔值) 默认值:true
--instanceofpattern: (布尔值) 默认值:如果 class 文件版本为 60.0 (Java 16) 或更高,或在 58.0 (Java 14)、59.0 (Java 15) 中为实验性则为 true
--j14classobj: (布尔值) 默认值:如果 class 文件版本为 49.0 (Java 5) 或更高则为 false
--jarfilter: (字符串)
--labelledblocks: (布尔值) 默认值:true
--lenient: (布尔值) 默认值:false
--liftconstructorinit: (布尔值) 默认值:true
--lomem: (布尔值) 默认值:false
--methodname: (字符串)
--obfattr: (布尔值) 默认值:与 antiobf 参数相同
--obfcontrol: (布尔值) 默认值:与 antiobf 参数相同
--obfuscationpath: (字符串)
--outputdir: (字符串)
--outputencoding: (字符串)
--outputpath: (字符串)
--override: (布尔值) 默认值:如果 class 文件版本为 50.0 (Java 6) 或更高则为 true
--previewfeatures: (布尔值) 默认值:true
--pullcodecase: (布尔值) 默认值:false
--recordtypes: (布尔值) 默认值:如果 class 文件版本为 60.0 (Java 16) 或更高,或在 58.0 (Java 14)、59.0 (Java 15) 中为实验性则为 true
--recover: (布尔值) 默认值:true
--recovertypeclash: (布尔值)
--recovertypehints: (布尔值)
--reducecondscope: (布尔值)
--relinkconst: (布尔值) 默认值:true
--relinkconststring: (布尔值) 默认值:与 relinkconst 参数相同
--removebadgenerics: (布尔值) 默认值:true
--removeboilerplate: (布尔值) 默认值:true
--removedeadconditionals: (布尔值)
--removedeadmethods: (布尔值) 默认值:true
--removeinnerclasssynthetics: (布尔值) 默认值:true
--rename: (布尔值) 默认值:false
--renamedupmembers: (布尔值) 默认值:与 rename 参数相同
--renameenumidents: (布尔值) 默认值:与 rename 参数相同
--renameillegalidents: (布尔值) 默认值:与 rename 参数相同
--renamesmallmembers: (int >= 0) 默认值:0
--sealed: (布尔值) 默认值:如果 class 文件版本为 62.0 (Java 18) 或更高,或在 60.0 (Java 16)、61.0 (Java 17) 中为实验性则为 true
--showinferrable: (布尔值) 默认值:如果 class 文件版本为 51.0 (Java 7) 或更高则为 false
--showversion: (布尔值) 默认值:true
--silent: (布尔值) 默认值:false
--skipbatchinnerclasses: (布尔值) 默认值:true
--staticinitreturn: (布尔值) 默认值:true
--stringbuffer: (布尔值) 默认值:如果 class 文件版本为 49.0 (Java 5) 或更高则为 false
--stringbuilder: (布尔值) 默认值:如果 class 文件版本为 49.0 (Java 5) 或更高则为 true
--stringconcat: (布尔值) 默认值:如果 class 文件版本为 53.0 (Java 9) 或更高则为 true
--sugarasserts: (布尔值) 默认值:true
--sugarboxing: (布尔值) 默认值:true
--sugarenums: (布尔值) 默认值:如果 class 文件版本为 49.0 (Java 5) 或更高则为 true
--sugarretrolambda: (布尔值) 默认值:false
--switchexpression: (布尔值) 默认值:如果 class 文件版本为 58.0 (Java 14) 或更高,或在 56.0 (Java 12)、57.0 (Java 13) 中为实验性则为 true
--tidymonitors: (布尔值) 默认值:true
--trackbytecodeloc: (布尔值) 默认值:false
--tryresources: (布尔值) 默认值:如果 class 文件版本为 51.0 (Java 7) 或更高则为 true
--usenametable: (布尔值) 默认值:true
--usesignatures: (布尔值) 默认值:true
--version: (布尔值) 默认值:true
--help: (字符串)

如何在反编译后的文件中显示,class文件中LineNumberTable信息。

原文链接: https://blog.csdn.net/javajingling/article/details/139795793

标签: #JAVA 991
相关文章

万字:支付“核心系统”详解 2024-11-02 15:33

专栏作者:隐墨星辰 \| 主编:陈天宇宙 这篇文章也尝试化繁为简,探寻支付系统的本质,讲清楚在线支付系统最核心的一些概念和设计理念。 虽然支付行业已经过了风头最劲的时光,但跨境支付仍然在蓬勃发展,每年依然有很多新人进入这个行业,这篇文章尝试为这些刚入行的新人提供一点帮助。 文章只介绍一些支付行业十几

资深支付架构师视角:实战从问题定义到代码落地的完整套路 2024-11-02 15:33

前言 今天从一个实际案例入手,介绍站在架构师的角度,如何识别并定义问题,提炼需求,技术方案选型,再到详细设计,最后利用AI的能力协助写出核心的代码,验证与调优。 解决问题存在一定的模式,也可以称之为框架,总结出自己的思考和解题框架,以后再碰到同类型的问题就可以如庖丁解牛一样容易。 很多年前,我写代码

Spring 实现 3 种异步接口 2024-10-18 09:07

大家好,我是苏三~ 如何处理比较耗时的接口? 这题我熟,直接上异步接口,使用 Callable、WebAsyncTask 和 DeferredResult、CompletableFuture等均可实现。 但这些方法有局限性,处理结果仅返回单个值。在某些场景下,如果需要接口异步处理的同时,还持续不断地

重学SpringBoot3-集成Redis(五)之布隆过滤器 2024-10-08 11:24

更多SpringBoot3内容请关注我的专栏:《SpringBoot3》 期待您的点赞👍收藏⭐评论✍ 重学SpringBoot3-集成Redis(五)之布隆过滤器 1. 什么是布隆过滤器? * 基本概念 适用场景 2. 使用 Redis 实现布隆过滤器 * 项目依赖 Redis 配置

设计模式第16讲——迭代器模式(Iterator) 2024-10-08 11:24

一、什么是迭代器模式 迭代器模式是一种行为型设计模式,它提供了一种统一的方式来访问集合对象中的元素,而不是暴露集合内部的表示方式。简单地说,就是将遍历集合的责任封装到一个单独的对象中,我们可以按照特定的方式访问集合中的元素。 二、角色组成 抽象迭代器(Iterator):定义了遍历聚合对象所需的方法

vue2路由和vue3路由区别及原理 2024-10-08 11:24

一、Vue2 与 Vue3 路由的区别 1. 创建路由实例方式的不同 Vue 2 中,通过 Vue.use() 注册路由插件,并通过 new VueRouter() 来创建路由实例。 import Vue from 'vue';import VueRouter from 'vue-router';i

目录

IT 外包服务商

  • 意见投递
  • zyf6619

软件开发应用

主菜单

  • 首页
  • 软件开发
  • 计算机基础
  • Hello Halo
  • 新手必读
  • 关于本知识库
Copyright © 2024 your company All Rights Reserved. Powered by Halo.