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. CentOS 7 Apache 多端口部署 Web Apps 指南

    转载自简书,原作者xuyan0,链接https://www.jianshu.com/p/b34c78bf9bf0,如有侵权,请联系删除 导语 Apache web 服务器运行着互联网上超过半数的活跃的 ...

  2. SQL Server Management Studio 2012 键盘快捷键(转)

    无论是对于DBA还是Developer,键盘快捷键都是很常用的,动动键盘可比鼠标快多了,不过SQL Server 2012对SSMS(SQL Server Management Studio)中的快捷 ...

  3. [翻译] MSAlertController

    MSAlertController You can use AlertController in iOS7!! 你可以在iOS中使用AlertController了 MSAlertController ...

  4. 【转】outlook 2016 配置自动发现

    今天一部门经理换了高大上的终端,办公软件安装的是office 2016,在配置outlook的时候,懵逼了,没有exchange 选项,使用自动发现配置的时候,电脑没有加域,各种尝试,一直过不去,哎, ...

  5. Mysql常用的锁机制

    一.引言                                                                                                 ...

  6. 【深入理解JAVA虚拟机】读后感

    收获颇多的一本书,非常值得细细品味. 1.所谓万变不离其宗,此书便是宗.读过此书后,发现以前看过的网上好多五花八门的文章,都是源自此书. 2.举一反三.此书中讲到的jvm用到的各种思想,在工作中其实经 ...

  7. python 获取当前目录,上级目录,上上级目录

    import os print '***获取当前目录***' print os.getcwd() print os.path.abspath(os.path.dirname(__file__)) pr ...

  8. 12、Node.js 路由

    这里实现的好像就是把路由和服务器相结合起来.具体需要引入 url 模块和 http 模块为路由提供请求的 URL 和其他需要的 GET 及 POST 参数,随后路由需要根据这些数据来执行相应的代码需要 ...

  9. hql语句中的分页显示

    public List<User> getUserList(int pageInfo) { DBUtil dbutil = new DBUtil(); Session session = ...

  10. iOS动画的逻辑结构:动画的定义--动画是采用连续播放静止图像的方法产生物体运动的效果。

    动画的定义:视图+时间+空间+速度 视图信息的时空变换: 视图组的按时间逐帧展示: Core Animation 类的继承关系图 各类常用属性 CAMediaTiming:CALayer和Core A ...