-
Android反编译工具包(升级)官方绿色版
2012-10-10 19:18:30Android反编译工具包,内含图形和命令两种反编译方式,命令支持windows和linux平台,亲测验证成功!详见博客:Android APK反编译详解(附图) http://blog.csdn.net/sunboy_2050/article/details/6727581 -
apktool 反编译工具 绿色版
2014-03-11 20:18:37apktool功能:反编译出apk资源文件。 使用方式: 把apktool 解压到任意位置 执行 在dos 改目录下 执行 apktool d xxx.apk test ,便会把编译后的资源存入test文件夹下。 -
2020年支持java8的Java反编译工具汇总
2018-06-29 10:58:53luyten是一款操作简单、功能实用的java反编译工具,软件支持*.JAR、*.zip、*.class等类型文件的反编译操作,还原度非常高,支持更多功能设置,如显式导入、类型、合成组件等等,用户可根据不同的需求选择合适的显示...大多商业软件,会对程序进行加密、加壳等安全措施以防范软件被破解,从而使得反编译越来越难。反编译是一个对目标可执行程序进行逆向分析,从而得到源代码的过程。尤其是像Java这样的运行在虚拟机上的编程语言,更容易进行反编译得到源代码。
我们知道,在代码支撑方面,JDK 1.7引入了字符串Switch、泛型接口改进等新功能,1.8增加了lambda表达式、方法传递、多重注解等新特性,这使得反编译工具的编写难度加大。今天我们盘点一下目前仍然可用的、相对功能很强大的Java反编译工具(Eclipse插件不做评价),比较老的反编译工具很难支持Java8及其以上版本。
1、Java 反编译器 JD-GUI
JD-GUI 是一个用 C++ 开发的 Java 反编译工具,由 Pavel Kouznetsov开发,支持Windows、Linux和苹果Mac Os三个平台。而且提供了Eclipse平台下的插件JD-Eclipse、IntelliJ的插件JD-IntelliJ。JD-GUI不需要安装,直接点击运行,可以反编译jar,class文件。
最新版本1.4.0,官方网站:http://jd.benow.ca/。
2、Java 反编译器 procyon-decompiler及其window下独立UI工具luyten
Procyon-Decompiler支持JDK1.8类的反编译,在很多方面做得非常不错,如反编译匿名类、内部类、Java8 Lambda等等。Procyon-Decompiler支持JDK1.8类的反编译,在很多方面做得非常不错:字符串的Switch、枚举声明方面、注解方面、匿名类、内部类、Java8新接口规范、Java8 Lambda表达式、Java8 方法传递等。
luyten是Procyon的GUI,是一款操作简单、功能实用的java反编译工具,软件支持*.JAR、*.zip、*.class等类型文件的反编译操作,还原度非常高,支持更多功能设置,如显式导入、类型、合成组件等等,用户可根据不同的需求选择合适的显示项目,结果更明了。
luyten的最新版本0.53,官方网址:https://github.com/deathmarine/Luyten,只需要下载luyten即可,不用下载Procyon。Procyon最新版本0.5.30。
3、Android反编译gui工具Jadx
jadx是一款Android反编译gui工具,它支持apk、dex、jar、class、zip、aar等文件。jadx操作方便,反编译后的代码可读性高,同时还拥有较完善的gui界面,除去混淆部分的代码,jadx已经非常接近源代码了。
Jadx最高版本v0.7.1,官方地址https://github.com/skylot/jadx/。
三个工具中JD-GUI打开jar文件反编译速度飞快、luyten次之、Jadx最慢(有时候需要等好一会,喝杯咖啡先)。三者都会遇到反编译不出来的情况,建议配合使用。
-
exe反编译工具exe反编译工具exe反编译工具
2008-03-20 23:23:23exe反编译工具exe反编译工具 exe反编译工具exe反编译工具 exe反编译工具exe反编译工具 exe反编译工具exe反编译工具 exe反编译工具exe反编译工具 -
反编译工具
2018-08-02 10:42:57反编译 jdk1.8 工具 javak开发的小伙伴应该都知道,java反编译用【jd-gui.exe】来进行编译非常方便快捷,而且还轻量。 但是最近切换环境,换成用jdk1.8来进行开发,那么问题就出来了。用jd-gui.exe反编译的时候...反编译 jdk1.8 工具
javak开发的小伙伴应该都知道,java反编译用【jd-gui.exe】来进行编译非常方便快捷,而且还轻量。
但是最近切换环境,换成用jdk1.8来进行开发,那么问题就出来了。用jd-gui.exe反编译的时候竟然显示不出来了!!!
网上搜了下资料,发现可能有两个问题
- 1.jd-gui.exe只支持jdk1.7及以下的版本。
2.jdk1.8小版本问题(有同事同样是jdk1.8就能解析)
最后不得以换了个工具,【Procyon-Decompiler】完美解决,哈哈。
在代码支撑方面,JDK 1.7引入了字符串Switch、泛型接口改进等新功能,1.8增加了lambda表达式、方法传递、多重注解等新特性,这使得反编译工具的编写难度加大,Procyon-Decompiler支持JDK1.8类的反编译,在很多方面做得非常不错:
字符串的Switch
枚举声明方面
注解方面
匿名类、内部类
Java8新接口规范
Java8 Lambda表达式
Java8 方法传递
另外它在反编译后输出多种类型的结果,如Java源码、原始字节码、字节码AST
下载jar包,本机命令行运行
java -jar C:\procyon-decompiler-0.5.29.jar F:\***.class
保存源代码
java -jar C:\procyon-decompiler-0.5.29.jar F:\***.class -o f:
-
Android反编译工具包(最完整的Android反编译工具包)
2018-01-18 23:19:55绝对完整的Android反编译工具 使用Android反编译工具以前得选安装java环境。 -
反编译工具支持jdk1.7及以下反编译
2017-06-29 16:24:43非常好用的反编译工具jd-gui,反编译工具支持jdk1.7及以下反编译,反编译工具支持jdk1.7及以下反编译 -
luac反编译工具
2018-03-30 21:19:05luac反编译工具!luac反编译工具!luac反编译工具!luac反编译工具!luac反编译工具! -
APK反编译工具
2018-05-28 18:11:20资源包括一整套的反编译工具,里面有apktool、auto-sign签名工具、dex2jar工具和jd-gui查看jar包源码工具 -
Android反编译工具
2014-05-14 16:49:10Android反编译工具,可以看到更多关于Android中的apk包中的信息 -
DLL 反编译工具 反编译.net的DLL文件
2010-04-03 11:16:57DLL反编译工具DLL反编译工具DLL反编译工具DLL反编译工具DLL反编译工具DLL反编译工具 -
Java反编译工具使用对比,最好用的Java反编译工具 --- JD-GUI、XJad
2017-10-17 13:58:18Java反编译工具使用对比,最好用的Java反编译工具 --- JD-GUI 大家都知道,将源代码转换成二进制执行代码的过程叫“编译”,比如将C源代码编译成.exe可执行文件;那么把二进制执行代码转换成源代码的过程就叫“反...Java反编译工具使用对比,最好用的Java反编译工具 --- JD-GUI、XJad
一、前言
1、什么是反编译?
大家都知道,将源代码转换成二进制执行代码的过程叫“编译”,比如将C源代码编译成.exe可执行文件;那么把二进制执行代码转换成源代码的过程就叫“反编译”,比如把exe转换为C源代码就叫“反编译”。由于主流的C的编译器都进行了代码的优化,因此把C编译生成的exe文件反编译成C代码非常困难。但是像Java、.net这样基于虚拟机技术的编程语言则反编译非常容易,Java平台下有Jad、Jode、JD等反编译器,.net平台下则有Reflector等反编译器,他们的反编译质量非常高,甚至和源代码几乎没什么差别。
2、反编译得到的是源代码吗?反编译得到的代码是非常接近于源代码,但是或多或少与源代码有一些差异的,比如一些表达式被优化掉了,比如,下面的源代码:int i=1+1;学过《编译原理》的同学知道有“常量优化”这个编译优化算法,因此上边的源代码一般会被优化为:int i=2;由于在编译过程中已经进行了优化,把“1+1”这个原始的信息丢掉了,因此反编译出来的代码只能是:int i=2;可以看到反编译得到的代码和源代码是有区别的。比如:andriod中download = (Button)findViewById(R.id.xiaz);被优化成了download = (Button)findViewById(0x7f070018);
3、程序可以反编译岂不是很不安全?可以采用代码混淆等技术来加大反编译的难度,和降低反编译代码的可读性,但是完全避免反编译是不可能的。4、反编译器的原理是什么?由于Java、.net这样的基于虚拟机技术的语言平台,都是采用了Byte Code的二进制结构,因此很容易将ByteCode转化为“抽象语法树”(简称AST,《编译原理》这门课中的概念),然后采用反编译器就可以将AST转换为代码了。二、反编译工具和插件有哪些?
1、 JD-GUI【推荐】
JD-GUI是属于Java Decompiler项目(JD项目)下个的图形化运行方式的反编译器。JD-Eclipse属于Java Decompiler项目(JD项目)下个Eclipse插件化运行方式的反编译插件。JD-IntelliJ属于Java Decompiler项目(JD项目)下个Intellij插件化的运行方式的反编译插件。JD-GUI 是一个用 C++ 开发的 Java 反编译工具,由 Pavel Kouznetsov开发,支持Windows、Linux和苹果Mac Os三个平台。而且提供了Eclipse平台下的插件JD-Eclipse,Intellij平台下的插件JD-Intellij。JD-GUI不需要安装,直接点击运行,可以反编译jar,class文件。
支持jar包级的反编译,可将整个jar包直接保存为*.src.zip源代码包,反编译迅速,错误率极少。
JD分为JD-GUI、JD-Eclipse/JD-Intellij两种运行方式,JD-GUI是以单独的程序的方式运行,JD-Eclipse/JD-Intellji则是以一个Eclipse/IDEA插件的方式运行。Java Decompiler项目”旨在开发一些工具,以便反编译和分析Java 5以及更高本的Java的“字节代码”。JD-Core是一个库,是一个从一个或多个“.class”文件中重建Java源代码的库。JD-Core可用于恢复丢失的源代码并探索运行时Java的源代码。支持Java 5的新功能,例如注释,泛型或类型“枚举”。JD-GUI和JD-Eclipse包括JD-Core库。
2、Jad
jad是一款使用非常广泛地Java反编译工具,Jadclipse就是基于jad的反编译插件,JAD 文件包含 MIDlet 套件的标题信息,例如开发应用程序的公司、应用程序名称和大小。
3、XJad (比较好用,不过目前版本是2.2,是2006发布的了,一直没更新了,而且有bug,不推荐了)
XJad是基于Jad核心的Java源程序反编译软件,内置Jad1.5.8e2;可处理多个*.class文件,可以处理文件夹内的所有文件,甚至可以处理*.jar文件;带有多页面文本编辑器,也可集成在资源管理器中,随时点击右键都可进行操作;支持java语法的高亮显示;4、Luyten
比较精准的一个java反编译工具,没用过,用的人比较少。
......
还有很多反编译工具,但是主要推荐JD-GUI,其次是XJad。
----------------------
反编译工具下载:
1、JD-GUI(Java反编译工具) 0.3.6 绿色免费版.zip 【免安装,直接解压运行】-CSDN下载 http://download.csdn.net/download/chenchunlin526/10024535
2、Java反编译工具(XJad) v2.2 中文绿色版.zip 【免安装,直接解压运行】-CSDN下载 http://download.csdn.net/download/chenchunlin526/10029995
三、反编译工具JD-GUI的使用
作为一个软件开发人员,在自学的成长道路上,不可避免的会借鉴别人开发完成的功能实现方法,js/css/html可以通过浏览器直接捕获,没有源码的能拿到calss文件也是一件幸事,那么如何查看class文件呢?这就要用到反编译工具了。
① JD-GUI这款Java反编译工具是纯绿色,完全免费的,非常适合开发者,其界面也简洁大方
② 鼠标单击“file”从中选择“Open File ...“选项,弹出一个文件选择框,可以选择要打开的文件,或者直接单击文件夹图标,直接弹出文件选择框
③ 从打开的文件的左侧可以看到文件的保存位置,类及方法,右侧显示类的具体内容,注释不会显示,同时它会把这个类所在的包下的其他类也反编译成源码:
如需将预览的.class文件转换成.java文件,只需点击File菜单里的save即可。
④ 还有一种方法是直接打开jar包,鼠标单击文件夹图标,弹出文件选择框,选择一个jar包,单击‘确定’
⑤ 从打开的界面中可以看到整个jar包中的.class文件的反编译结果
顺便说一下XJad 的使用(使用方法和JD-GUI都差不多),虽然版本比较老,且官方10多年没更新了,算是已经放弃了。
不过也可以可用:
使用说明:========1、打开一个或者多个*.class文件,XJad反编译后,重命名为*.java文件,保存至当前文件夹,并在编辑器中打开查看;2、打开一个文件夹,XJad将该文件夹下所有*.class文件进行反编译,并保存至该文件夹下,依据包路径信息生成文件夹路径,如com.spring.framework.*,将建立com\spring\framework的文件夹结构;3、打开一个*.jar文件,XJad将该Jar文件中的所有*.class文件解压缩到临时目录并进行反编译,并将源文件带包路径信息保存至当前文件夹下名称为“~” + *.jar 的文件夹中;① 单个文件反编译反编译好之后,会在原来的.class所在文件夹下生成一个同名的.java源码文件:且XJad会自动打开反编译后生成的源码文件:② 整个文件夹反编译,可以选择一个文件夹,XJad会把该文件夹下的所有.class文件全部反编译好。比如,我的D盘新建一个文件夹,FindPassword,里面只有个FindPasswordController.class文件然后选择 反编译文件夹:确定之后:提示已经反编译成功,我们现在到 D:\FindPassword 里查看,里面已经生成了一个按层次结构排行的源码文件包了点进去看一下,文件夹里有刚反编译好的源码文件了:记事本打开看一下,源码正常,只是没有了注释了③ jar包反编译确定之后反编译之后,会在jar包所在的文件下,生成一个以“~”开头的源码文件夹:打开进去看一下:好了,JD-GUI 和 XJad的使用介绍到此介绍了。----------------------
工具下载:
1、JD-GUI(Java反编译工具) 0.3.6 绿色免费版.zip-CSDN下载 http://download.csdn.net/download/chenchunlin526/10024535
2、Java反编译工具(XJad) v2.2 中文绿色版.zip 【免安装,直接解压运行】-CSDN下载 http://download.csdn.net/download/chenchunlin526/10029995
-
ios 反编译工具
2013-12-12 11:52:29ios 反编译工具,研究ios反编译的同学看看咯. -
lua反编译工具
2018-05-10 16:24:46lua反编译工具包括lua 5.1 与 lua 5.2 包括lua.exe luac.exe luadec.exe 等 可以用此工具加密lua为luac 也可以解密luac为lua -
Bin反编译工具
2017-11-13 18:19:58三款强大Bin反编译工具: unbin.exe 237K c51fby.exe 256K Bin2C.exe 22K -
很牛的反编译工具
2019-01-05 19:15:22很牛的反编译工具,很牛的反编译工具可以用来反编译各种dll,很强大,而且体积还不是很大,很方便。 -
C++反编译工具
2018-05-15 11:43:19C++反编译工具,用来显示与一个可执行文件(exe或者dll)相关的依赖项(dll),以及该exe或dll引用了这些dll中的哪些接口。 -
最全的Android反编译工具包_Androidfby+apk2java 一键反编译
2014-03-22 15:19:18最全的Android反编译工具包_Androidfby+apk2java 一键反编译,让你直接看到别人的布局文件,和jar源码,帮助你快速熟悉Android app开发内幕 -
Java反编译工具
2019-12-12 00:13:10本文主要介绍三款Java反编译工具,分别为javap、jad、CFR,三款工具各有优缺点,可以根据需求合理选择。 文章目录一、理解Java编译与反编译1.1 宏观上的概念1.2 Java编译与反编译二、灵活选取Java反编译工具2.1 JDK...本文主要介绍三款Java反编译工具,分别为javap、jad、CFR,三款工具各有优缺点,可以根据需求合理选择。
文章目录
一、理解Java编译与反编译
1.1 宏观上的概念
编程语言分为低级语言和高级语言。其中机器语言和汇编语言属于低级语言,直接用计算机指令编写程序,而C、C++、Java、Python等属于高级语言,用语句编写程序,语句是计算机指令的抽象表示。低级语言是计算机认识的语言、高级语言是程序员认识的语言。
所谓的编译,就是将高级语言翻译成计算机能识别的低级语言的过程,而反编译则是将已经编译好的语言还原成未编译高级语言的过程。
1.2 Java编译与反编译
针对于Java语言的编译,是将.java源文件通过javac编译器编译成.class字节码文件。字节码文件并不能由计算机直接识别,需要借助JVM内嵌的解释器解释成机器语言后执行。而Java语言的反编译,指的是将.class字节码文件还原成近似java源代码文件。此处近似是指反编译得到的是常量优化之后的代码。
二、灵活选取Java反编译工具
2.1 JDK自带的工具–javap
javap
是JDK
自带工具,可以反编译代码,也可以查看.class
字节码文件。javap
的反编译是非常轻量的,反编译出的不是.java
文件,不利于理解。public class Test { public static void main(String[] args) { List<String> stringList = ImmutableList.of("awe","coder"); stringList.forEach(e -> { System.out.println(e); }); } } $ javac Test.java // 得到Test.class
对上面得到的字节码文件反编译
$ javap -p Test.class public class com.ac.Test { public com.ac.Test(); public static void main(java.lang.String[]); private static void lambda$main$0(java.lang.String); }
通过
javap -v -p
选项打印出的仍然是字节码文件。字节码中展示的内容是最详细的,从其中可以透彻的分析底层原理。分析字节码文件在很多情况下是非常有必要的,例如分析synchronized
底层原理时。下面由于篇幅,仅展示一小部分字节码。$ javap -v -p Test.class ....... private static void lambda$main$0(java.lang.String); descriptor: (Ljava/lang/String;)V flags: ACC_PRIVATE, ACC_STATIC, ACC_SYNTHETIC Code: stack=2, locals=1, args_size=1 0: getstatic #7 // Field java/lang/System.out:Ljava/io/PrintStream; 3: aload_0 4: invokevirtual #8 // Method java/io/PrintStream.println:(Ljava/lang/String;)V 7: return ..........
2.2 好用的工具–jad
jad
很容易使用,大家也很熟悉。直接对.class
文件执行,就可以反编译出.java文件。$ jad Test.class
但是
jad
长期不更新,对Java
中的新功能支持很差,例如lambda
表达式。反编译时,经常会报下面的错误。$ jad Test.class Parsing Test.class...The class file version is 52.0 (only 45.3, 46.0 and 47.0 are supported) JavaClassFileParseException: Invalid tag value 0x12
JD-GUI-1.6.3
反编译lambda表达式,会直接把字节码文件反编译成lambda
表达式。分析lambda
表达式底层原理,通过JD-GUI
是行不通的。因此引出了另一款反编译工具–CFR
。2.3 功能强大的工具–CFR
官网链接:http://www.benf.org/other/cfr/
相较于jad
,CFR
是复杂的,需要输入多个参数,但是CFR
可以编译Java9,10,12
中的新功能,甚至可以将其他JVM
语言的class
文件反编译成Java
文件。我们继续反编译文章开头代码的字节码文件,采用
CFR
命令$ java -jar /opt/cfr/cfr-0.146.jar Test.class --decodelambdas false
反编译后结果如下
package com.ac; import com.google.common.collect.ImmutableList; import java.io.PrintStream; import java.lang.invoke.LambdaMetafactory; import java.util.function.Consumer; public class Test { public static void main(String[] args) { ImmutableList stringList = ImmutableList.of((Object)"awe", (Object)"coder"); stringList.forEach((Consumer<String>)LambdaMetafactory.metafactory(null, null, null, (Ljava/lang/Object;)V, lambda$main$0(java.lang.String ), (Ljava/lang/String;)V)()); } private static /* synthetic */ void lambda$main$0(String e) { System.out.println(e); } }
通过
CFR
反编译出的代码,看上去优雅了很多,同时也能更清晰地看到lambda
语法糖的desugar
过程。正如小标题所言,
CFR
功能强大,不仅可以反编译字节码,还可以反编译jar
包。同时CFR
有着诸多选项,可以通过--help
来查看使用。下面列举一小部分选项。$ java -jar /opt/cfr/cfr-0.146.jar --help --decodeenumswitch (boolean) default: true if class file from version 49.0 (Java 5) or greater --decodefinally (boolean) default: true --decodelambdas (boolean) default: true if class file from version 52.0 (Java 8) or greater --decodestringswitch (boolean) default: true if class file from version 51.0 (Java 7) or greater
如果博文对您有所帮助,欢迎点赞和关注,哈哈。。
-
android反编译工具集合
2016-10-24 10:08:57android反编译工具,包括了apktool、dex2jar、jdgui、Smali2Java -
Java java8 反编译工具
2018-05-08 23:24:02普通的反编译不能反编译Java8的,这个反编译工具由Java编写,可以反编译Java8的代码。内涵脚本,一键执行,方便快捷。 -
【转】收集各种反编译工具 常用EXE文件反编译工具下载
2019-09-28 01:54:09常用EXE文件反编译工具下载 PE Explorer 1.98 R2 汉化版 >q D9"^ & s 10'&IS1& 功能极为强大的可视化汉化集成工具,可直接浏览、修改软件资源,包括菜单、对话框、字符串表等; 另外,还具备有 W32... -
MAC Jar反编译工具
2018-02-09 09:53:29Mac 环境下Jar 反编译工具,有需要的可以下载哦!!! -
Android 反编译工具汇总
2017-09-06 16:38:34Android反编译工具(主要有 apktool,dex2jar, jd-gui ) 详细地址:http://blog.csdn.net/xcc1234/article/details/77868174 -
apk反编译工具
2012-05-12 13:21:40apk反编译工具,用来反编译apk里面的xml和classes.dex文件,生成相应的可以读的xml和java文件 -
apk反编译工具 实时更新反编译工具手记
2013-08-23 14:30:56apk反编译一直使用别人做好的一套工具,但是越来越多的公漏洞进行司对反编译工具的研究并加以使用,有时我们使用老版本的工具无法破解apk。所以,保持我们的工具实时更新变得越来越重要。 一、android-apktool -
使用反编译工具反编译Dll,编译成C#
2019-10-02 07:15:11今天刚刚开通博客,就迫不及待把今天遇到的一个问题写... 单击http://xiazai.xiazaiba.com/Soft/R/Reflector_7.3.0.18_XiaZaiBa.zip下载反编译工具。下载完成后解压。 2. 单击http://www.denisbauer.com/Downloads/...
-
【面试相关】数据分析面试前必看知识点Q&A③【近期更新】
-
17mon IP库解析代码
-
Spring-动态代理
-
基于python的猜灯谜游戏(课程设计)
-
前端架构师和3D-VR
-
前端性能优化
-
台大机器学习课程作业详解
-
SprintBoot开发的Rest API接口项目实战
-
10.CAN控制与串口控制例程源码
-
VINS-Mono代码注释以及公式推导
-
我的Maven下的settings.xml
-
搞机助手_V4.8.1.zip
-
2021-01-17
-
【数据分析-随到随学】Python语法强化与数据处理
-
MySQL常用语句
-
Java后端开发春招预热,字节三面阿里四面背水一战,斩获offer定级P7
-
Python编程基础02:变量与数据类型
-
微服务系列第七十一季-Introducing Spring Boot
-
基于X210的裸机时钟温度显示器-第3/3季
-
(新)备战2021软考信息安全工程师基础知识套餐