from :http://www.glorze.com/219.html
反编译

众所周知,我们将源代码进行编译,生成可执行的程序或者容器发布包,这个将代码转换的过程就是编译的过程,而反编译就是将这些已经执行好的程序转换成程序人员可以阅读的源代码的过程就是反编译的过程。由于像Java这类基于虚拟机技术的高级语言反编译相对容易,所以衍生出很多不错的反编译软件,下面老四为大家介绍几款,并希望您根据您的自己喜好选择性使用,当然是在你需要的时候,而且软件排名分先后,分先后。。。文末提供合集下载,请自助获取。

反编译的基本原理:基于虚拟机的高级语言,几乎都采用了字节码的二进制,所以通过二进制的字节码转化为编译原理中的抽象语法,再配合反编译器就可以将抽象语法转化为代码。更牛逼的是基于这些原理还能实现各个平台的语言之间的代码转换。

PS:再牛逼的反编译也不可能做到跟源代码一模一样,多少都会有差异,不要在意这些细节。。。

1.JD-GUI

包括图形化界面,eclipse插件以及idea插件,采用C++开发,支持苹果Mac、微软windows以及Linux多个平台,可以反编译class文件、jar包等。用的人比较多。但是它已经好久没有更新了,jdk7的代码很多语法都不支持,就别提已经大热的jdk8了,在我说完这句话的时候,去oracle官网一看,jdk10都发布惹。。。不过凭借着便捷与图形化还是再加上时间的沉淀,老四还是给它排在第一位。对了,JD-GUI的核心其实是听过jd-core来完成的。

eclipse的插件安装方法也是常规操作,jd-gui官网下载eclipse插件,解压放到你的eclipse安装目录就好了。然后在你的eclipse中用jd形式打开class文件就可以了,但是貌似jd已经不支持java 8的反编译了,在eclipse中直接报错,使用的时候请注意。因为老四目前没有安装idea,所以不介绍idea的jd-gui插件了。

2.CFR-非常优秀并且支持java8

这款201313年横空出世,至今都保持更新的反编译工具,因为其持续更新承接java的变化而且反编译效果非常良好,越来越来被人们更多的使用,根据cfr官网上的介绍,CFR支持反编译当今最新的Java特性--Java 8,例如lambda表达式以及java7中的switch支持String类型等,但是人家最要命也最装逼的是cfr完全是用Java 6编写的。。。

cfr没有图形化工具,需要在命令行中使用,首先的你的系统要配置java的环境,然后进入到cfr的jar包目录,运行类似如下的命令。

你一定觉得很不方便,对不对?一定在想是否存在便捷一点的工具,对不对?其实工具也就是一个脚本而已,也没有方便太多,这里放出一个脚本文件,至于用不用您自己参考。

 
1
2
3
4
@echo off  
if "%PATH_BASE%" == "" set PATH_BASE=%PATH%  
set PATH=%CD%;%PATH_BASE%;  
java -jar -Duser.language=en "%~dp0\cfr.jar" %1 %2 %3 %4 %5 %6 %7 %8 %9

3.Jadx-开源,快速并且支持安卓

这又是一款相当强大的反编译神器了,现在已经在全球最大的同性交友社区GitHub上开源了,图形化的界面以及支持拖拽方式的操作可以大大满足你日常的需要了,如果你使用Gradle(老四没用过,老四用Maven),它也支持导出Gradle工程,而且它支持诸如apk、dex、jar、class、zip等多种文件格式。当前该项目依然在不断更新当中,相信也会越来越好。如果你喜欢折腾,那就可以去交友社区下载源码自己编译生成工具为自己所用,如果你不愿意可以去release栏下载官方最新的zip包,windows下直接运行jadx-gui.bat就可以了。

当然,由于项目比较新,当前不断更新的过程中你可能会遇到很多的问题,这个时候你需要经常关注源代码,查看软件运行日志以及官方FAQ来解决问题。

4.Procyon-可以媲美cfr的有款Java反编译工具

与cfr一样,不像JD-GUI那样已经万年不更新了,Procyon同样支持Jdk1.8的类编译,譬如java8的很多新特性他都支持并且在一下几方面的反编译甚至已经超越了cfr,Procyon反编译后不仅输出java源码,还能输出原始字节码等。但是和cfr一样

  • 方法传递
  • Lambda表达式
  • 接口规范
  • 匿名内部类
  • 注解
  • 枚举
  • switch(String)

下面来看看Procyon作者是怎么描述他的亲儿子的:

作为一名在.NET和Java平台之间分配时间的开发人员,我对Java生态系统中反编译器选择不足感到惊讶和沮丧。Jad(不再维护,封闭源代码)和JD-GUI(GPL3)都是相当不错的选择,但前者不支持Java 5+语言特性,后者倾向于禁用我的LINQ / DLR树编译器发出的代码。为了解决这个问题,我最近开始自己开发一个反编译器,受ILSpy和Mono.Cecil的启发(并且大量借鉴)。尽管仍然不完整,但我自己的测试似乎表明,Procyon反编译器通常可以对付其他领先的Java反编译器。但是,有一些已知的问题:用Eclipse编译的类(或其他任何东西javac)可能会产生不太理想的结果,特别是对于像基于String的switch语句这样的结构。到目前为止,我主要测试了使用Javac编译的类。随着时间的推移,我将努力改进对其他编译器的支持。不幸的是,我还没有像JD-GUI一样的GUI前端(但第三方前端存在 - 见下文!)。但是,我确实为支持ANSI / xterm-256的控制台提供颜色编码输出。我还提供三种输出模式:1.Java(默认)2.原始字节码(类似于javap,但更漂亮;运行-r)3.字节码AST(中间表示;运行-b,添加-u未优化)

Procyon的用法几乎同cfr一样,不在赘述。

5.其实还有fernflower、Jad等等反编译工具,但是因为Jad就如rocyon作者所言Jad已经不再维护了,fernflower在老四所写的另一篇文章《你可能不知道的两个逆天的Java反编译在线网站》的在线网址中提供了fernflower反编译的输出,您可以在那里体验,另外fernflower有两个不错的优点:

  • 大部分能反编译得到的java文件可以直接使用
  • 能给你反编译的就会给你反编译,不能的不鸟你

就以上这些,老四都已经打包好了,需要的文末自助下载。如果发现更好的工具会在本页面更新,请您随时留意。

更博不易,如果觉得文章对你有帮助并且有能力的老铁烦请赞助盒烟钱,点我去赞助。抱拳。

转:介绍几个著名的实用的Java反编译工具,提供下载的更多相关文章

  1. Java反编译工具Luyten介绍

    比较精准的一个java反编译工具,笔者有时候用jd-gui反编译不出来的class用luyten都可以反编译出来. 官方网站:https://github.com/deathmarine/Luyten ...

  2. Android反编译工具介绍与简单实用方法

    Android反编译的目的无非就是为了看到APK的xml.资源和代码: 得到代码的方式:直接解压APK文件 --> 得到classes.dex文件 --> 使用 dex2jar class ...

  3. Java反编译插件JODE介绍

    编程入门级博客:(大牛请直接忽略) 1.编程没有捷径,只有多谢代码.手动敲代码,才是最好的学习方法.写给自己!(配置Eclipse General选项:Appearance:Code Assist:) ...

  4. IL反编译的实用工具

    初识Ildasm.exe——IL反编译的实用工具   Ildasm.exe 概要: 一.前言: 微软的IL反编译实用程序——Ildasm.exe,可以对可执行文件(ex,经典的控制台Hello Wor ...

  5. 【原创】Java批量反编译利器(jd-gui)介绍

    Java反编译利器(jd-gui)介绍 当要做白盒测试或安全测试时,我们需要借助工具扫描被测代码,相信大家都遇到过没有源代码,而需要反编译的情形吧,也可能大家用过jad工具,我这里介绍下方便的工具jd ...

  6. 转载文章----初识Ildasm.exe——IL反编译的实用工具

    转载地址http://www.cnblogs.com/yangmingming/archive/2010/02/03/1662307.html Ildasm.exe 概要:(路径:C:\Program ...

  7. 初识Ildasm.exe——IL反编译的实用工具

    原文地址:http://www.cnblogs.com/yangmingming/archive/2010/02/03/1662307.html Ildasm.exe 概要: 一.前言: 微软的IL反 ...

  8. [No000013B]初识Ildasm.exe——IL反编译的实用工具

    Ildasm.exe 概要: 一.前言: 微软的IL反编译实用程序——Ildasm.exe,可以对可执行文件(ex,经典的控制台Hello World 的 exe 可执行文件)抽取出 IL 代码,并且 ...

  9. IL反编译的实用工具Ildasm.exe

    初识Ildasm.exe——IL反编译的实用工具    https://www.cnblogs.com/yangmingming/archive/2010/02/03/1662307.html   学 ...

随机推荐

  1. visual studio 2015通过附加进程调试wcf服务

    网站: 打开wcf服务所在的项目 然后调用iis上部署的HLFC(crm)项目的接口就可以进行调试 注意 WCF服务项目要以管理员身份打开,调用wcf服务的项目要在iis中部署并点击调用后才能在附加到 ...

  2. 淘宝 NPM 镜像

    使用说明 : 更多见  https://npm.taobao.org 你可以使用我们定制的 cnpm (gzip 压缩支持) 命令行工具代替默认的 npm: $ npm install -g cnpm ...

  3. Android Tab与TabHost

    这就是Tab,而盛放Tab的容器就是TabHost 如何实现?? 每一个Tab还对应了一个布局,这个就有点好玩了.一个Activity,对应了多个功能布局. ①新建一个Tab项目,注意,不要生成mai ...

  4. 关于 <mvc:argument-resolvers> 的一次使用记录

      使用场景: 项目里面在做一个请求时候发现,不同的请求,有些请求会跳转到 spring mvc的自定义方法中,有些却不进去.自定义的方法: <mvc:annotation-driven > ...

  5. 屏幕录像LICEcap

    简介 LiceCap是一款轻量级屏幕录制工具 官网链接 windows版下载链接 Demo 以下是访问http://www.cockos.com/licecap/的屏幕录像

  6. (MUA)mutt-"No authenticators available" 发送不出去邮件

    问题: 使用mutt发送邮件的时候,在调试模式下总是显示"No authenticators available", 后来在google上查到可能要设置验证方法gssapi,但是设 ...

  7. EF学习之CodeFirst(二)--数据迁移

    使用CodeFirst时,如果Model发生改变的话,例如我们给User类里面新加个Sex属性,运行时会出现如下错误: 这时我们需要使用数据迁移来将model的改变同步更新到数据库中. 1.启用数据迁 ...

  8. APP中的 H5和原生页面如何分辨?

    一.APP内嵌H5和原生的区别 1.原生的页面运行速度快,比较流畅.H5页面相对原生的运行性能低,特别是一些动画效果有明显卡顿. 2.H5页面的很多交互都没有原生的好,比如弹层.输入时候的页面滑动 等 ...

  9. matlab 波纹扭曲

    % 波纹扭曲 img=imread('pic.jpg'); img=im2double(img); [h,w,c]=size(img); ratio=600/(h+w); img=imresize(i ...

  10. ZT 设计模式六大原则(2):里氏替换原则

    设计模式六大原则(2):里氏替换原则 分类: 设计模式 2012-02-22 08:46 23330人阅读 评论(41) 收藏 举报 设计模式class扩展string编程2010 肯定有不少人跟我刚 ...