首页 > 编程语言 >免费国产 Java 反编译工具 jdecode.net

免费国产 Java 反编译工具 jdecode.net

时间:2024-08-20 17:26:46浏览次数:9  
标签:反编译 Java 工具 net Type class jdecode

免费国产 Java 反编译工具 jdecode.net

jdecode

于 2024-04-25 12:04:37 发布

阅读量1.1k
收藏 20

点赞数 27
文章标签: java 开发语言
版权
网站地址:www.jdecode.net

推荐理由:功能强大、成功率高、错误少、安全、免费、国产

1、功能强大
主流版本支持:支持 Java 5 ~ 11主流版本,经过大规模测试验证。其他版本也可以使用,但反编译成功率和代码正确率会有些下降
全类型支持:Class, Interface, Enum, Annotation, Inner Type, Anonymous Type
全方法支持:normal, static, constructor, static block, lambda
全注解支持:Declaration, Type, Method, Annotation Type parameter, Type argument, Parameter, Local variable
亮点:最全面的注解支持 ,示例代码演示各种类型注解

2、反编成功率高
jdecode对 Java 5-11 主流版本的反编译成功率平均在 90%以上。常见的其他工具如JD、JAD 一般反编译成功率在 70~80%左右。还有一点,jdecode 很少完全崩溃,很少出现某些工具报“INTERNAL ERROR” 进而不能反编译出任何内容的情况。

注:反编译成功率与 class 文件的复杂度、大小有很大关系,从目前来看,包括国外的工具,还没有任何一个反编译工具能够 100%成功,jdecode 在反编译成功率上明显领先的,但在使用中也有反编译失败的情况。

注:此处成功率数据来源于对10万余个class的对比测试,仅供参考

3、代码错误少
目前来看,没有反编译工具能保证反编译出的代码 100% 无错误 且 与源class逻辑完全一致。

这里面原因非常多和复杂,主要原因有:

JAVA 和 JVM 差异导致错误,有时正确反编译出来就是错的,如static块压缩的变量冲突
JAVA 语法糖和 JDK 编译优化太复杂,极少数场景无法正确还原
JDK 编译擦除,极少数场景无法正确处理变量和类型
错误有时候无法避免,只要错的有理有据,那便是极好的。

错误不可怕,只要容易改对就行。jdecode 极力避免表面正确,实际和源 class 逻辑不符的情况。

注:有些工具如 JD 做了优化,有时候很不错,有时候就优化出问题,实际逻辑已经和源码不一样了,关键还看不出错误,这可就太坑了。

经过综合考虑,jdecode 尽量不做多余的优化,保障逻辑的一致 比 表面上的代码正确更重要。

举例说明:JD 对 数组初始化的代码优化导致逻辑错误。

 

jdecode反编译的源码,虽然看起来不太精简,但是逻辑是正确的。因为 class 中的 JVM 指令原本就是这样的。 jdecode 首先保证正确性,这种方式更好。

 

3、安全
jdecode 采用多种措施保证用户的数据安全:

jdecode 可以不注册使用,不收集、不跟踪、不保留任何访问信息
jdecode 绝不查看、绝不保留用户上传文件,文件24小时内自动删除
class 文件的上传、java 文件的下载都进行了足够位数的非对称算法加密
网站整体使用 https 进行通信加密
4、感谢
感谢各位高手兄耐心看完此文!!!

反编译工具开发很有难度,作为学习 Java 20多年的老开发人员,仍感到知识有限、能力不足,再加上业余时间有限,这项目也是数次启动又停下。jdecode 2009年就开了头,2016年又做了一点,2020年因疫情隔离时天天在家里,反而业余时间多,这个工具才算完成。

又经过数年测试和修改bug,期间N次遇到感觉搞不定的问题,N次感觉复杂度和工作量超预期、严重超预期,但最终还是都搞定了,完成了!这个工具虽然不大,但真是高难度!需要对 Java、JVM 深入了解才行,值得叉腰牛气三秒钟!

经过对比测试发现还不错,比我常用的反编译工具好用,所以就简单搭了个网站让大家也用用,希望对大家也有一点点帮助!

欢迎各位高手使用,欢迎提出任何问题、意见或建议,谢谢!

(邮件:[email protected] QQ:3056013637)

欢迎进行赞助、合作,现在每年还需要一些服务器之类费用

附录:其他同类工具
在线工具 www.decompiler.com、www.javadecompilers.com

离线工具 JD-Core、JD-GUI、JAD、CFR、FernFlower、Procyon-Decompiler等等
————————————————

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/m0_37815584/article/details/137775034

标签:反编译,Java,工具,net,Type,class,jdecode
From: https://www.cnblogs.com/yaoyangding/p/18369896

相关文章

  • .net core手写一个授权策略
    思路:.netcore中鉴权成功后,表示可以登录进来call网站api,但是哪些api可以call通,哪些api没有权限,则通过授权来控制这里手写几个类型授权策略:1:AdminPolicy:角色必须为admin 的才能访问api 2:  MutiPolicy:要求角色必须为admin,且用户名为liping,国家为china 的才能访问api......
  • Effective-Java-Chapter9-通用程序设计
    https://github.com/clxering/Effective-Java-3rd-edition-Chinese-English-bilingual/blob/dev/Chapter-9/Chapter-9-Introduction.md准则一将局部变量的作用域最小化不要在变量使用之前就申明,在需要使用的时候进行申明。当然这条准则不是那么绝对,大部分时候遵守就好。......
  • Java中stream流的filter机制理解
    一开始我并不理解,为什么filter接受一个实现了Predicate接口的对象后,就能通过重写的test方法来筛选元素,这个将筛选后的元素放到新的流中,我并不知道如何实现的。后来我发现ReferencePipeline抽象类中重写了filter方法,并且Collection中的stream方法返回的是StreamSupport.stream方法......
  • java_数组
    1.数组概念:指的是一种容器,可以同来存储同种数据类型的多个值。但是数组容器在存储数据的时候,需要结合隐式转换考虑。比如:定义了一个int类型的数组。那么boolean。double类型的数据是不能存到这个数组中的,但是byte类型,short类型,int类型的数据是可以存到这个数组里面的。建议......
  • 【原创】java+swing+mysql网吧管理系统设计与实现
    个人主页:程序员杨工个人简介:从事软件开发多年,前后端均有涉猎,具有丰富的开发经验博客内容:全栈开发,分享Java、Python、Php、小程序、前后端、数据库经验和实战文末有本人名片,希望和大家一起共同努力,一起进步,顶峰相见。开发背景:随着互联网技术的飞速发展和普及,网络已成为人......
  • .net core 手写一个url的鉴权
    思路::在startup.cs的configservice中配置自定义鉴权方式,在界面使用该方式本章节实现一个简单的自定义鉴权:要求每个url后面要有参数UrlToken并且值为liping-123456,才可以访问成功,否则失败 1:配置一个自定义鉴权的文件1publicclassCustomerAuthenticationConfig2{3......
  • JavaScript 中的 闭包
    闭包在JavaScript中,你可以在其他函数内部声明并返回函数。内部函数可以访问在其上方声明的任何变量。functioncreateAdder(a){returnfunctionadd(b){constsum=a+b;returnsum;}}constaddTo2=createAdder(2);addTo2(5)//7addTo2(0)//2......
  • 反编译和反汇编有什么区别
    反编译(Decompilation)和反汇编(Disassembly)是两个不同的概念,其区别如下:1.反编译:反编译是将已编译的可执行程序(如二进制文件、字节码等)还原为高级语言(如C、Java等)的过程。反编译器会分析程序的结构、流程和逻辑,并尽可能地还原出源代码的形式,以便开发人员进行代码理解、修改和调试。......
  • C# Deflate压缩字节数组(和java压缩结果一样)利用zlib.net对文件进行压缩
    今天在对接一个三方接口时,需要传一个附件数据,附件需要使用Deflate压缩算法压缩后的文件二进制流,再进行base64编码后的字符串。刚开始使用的官方自带的System.IO.Compression.DeflateStream方式,结果不管怎么改变CompressionLevel级别,压缩结果始终和java的压缩结果不一致,结果不一致......
  • [Java基础]int的表示范围
    在java基础类型中,int类型占四个字节,而每个字节在内存中占8位(8byte),所以可以使用共4X8=32个位数来存储该类型,也就是四个八位的二进制数,所以有了以下说法在计算机中,它的二级制表示为四个长度为8的二进制数,00000000000000000000000000000000,不了解的同学可以补一下原码,反码和补......