JAD及小颖反编译专家的用法和使用详解
- 格式:pdf
- 大小:364.42 KB
- 文档页数:7
Java反编译⼯具Jad详解项⽬过程中需要反编译⼀个jar包,于是作了⼀些学习,记录下来。
(JAva Decompiler)是⼀个Java的反编译器,可以通过命令⾏把Java的class⽂件反编译成源代码。
如果你在使⽤编写代码的时候遇到找不到源代码的第三⽅库,⽽且你⼜需要看看这个库的具体实现,那么你就需要使⽤这个东西。
⽽且如果你是使⽤Eclipse的话,还有⼀个Eclipse插件,提供⼀个class⽂件查看器可以直接打开class⽂件查看其反编译后的源代码,太⽅便了,太⽅便了!不过,可惜的是这个开源项⽬似乎已经关闭了,官⽅⽹站已经上不去了,有个叫Tomas Varaneckas的好⼼⼈收集了所有的版本提供给⼤家下载:⽽且这个最新的版本也只⽀持Java 4,不⽀持Java 5。
还有⼀个叫做的⼯具⽀持Java 5的新特性,如enum等,⽽且它提供独⽴的GUI程序和基于Eclipse的插件,也很⽅便。
但是对于,作者没有提供下载的链接,他说“Open the sources of JD-Core is not on my roadmap: I spent too many time on this project.”当然后⾯也有⼀⼤篇⽂章是别⼈⽤来骂他的,可以看,蛮有意思。
我的项⽬中需要将第三⽅库反编译出来,让后对其进⾏修改,然后再编译,不仅仅是查看,因此只能⽤命令⾏的Jad来做。
使⽤⽅法:[1] 反编译⼀个class⽂件:jad example.class,会⽣成example.jad,⽤⽂本编辑器打开就是java源代码[2] 指定⽣成源代码的后缀名:jad -sjava example.class,⽣成example.java[3] 改变⽣成的源代码的名称,可以先使⽤-p将反编译后的源代码输出到控制台窗⼝,然后使⽤重定向,输出到⽂件:jad -p example.class > myexample.java[4] 把源代码⽂件输出到指定的⽬录:jad -dnewdir -sjava example.class,在newdir⽬录下⽣成example.java[5] 把packages⽬录下的class⽂件全部反编译:jad -sjava packages/*.class[6] 把packages⽬录以及⼦⽬录下的⽂件全部反编译:jad -sjava packages/**/*.class,不过你仍然会发现所有的源代码⽂件被放到了同⼀个⽂件中,没有按照class⽂件的包路径建⽴起路径[7] 把packages⽬录以及⼦⽬录下的⽂件全部反编译并建⽴和java包⼀致的⽂件夹路径,可以使⽤-r命令:jad -r -sjava packages/**/*.class[8] 当重复使⽤命令反编译时,Jad会提⽰“whether you want to overwrite it or not”,使⽤-o可以强制覆盖旧⽂件[9] 还有其他的参数可以设置⽣成的源代码的格式,可以输⼊jad命令查看帮助,这⾥有个⼈做了简单的翻译:[10] 当然,你会发现有些源⽂件头部有些注释信息,不⽤找了,jad没有参数可以去掉它,⽤别的办法吧。
Java反编译⼯具的使⽤与对⽐分析点赞再看,动⼒⽆限。
Hello world : ) 微信搜「」。
本⽂和已经收录,有很多知识点和系列⽂章。
前⾔Java 反编译,⼀听可能觉得⾼深莫测,其实反编译并不是什么特别⾼级的操作,Java 对于 Class 字节码⽂件的⽣成有着严格的要求,如果你⾮常熟悉 Java 虚拟机规范,了解 Class 字节码⽂件中⼀些字节的作⽤,那么理解反编译的原理并不是什么问题。
甚⾄像下⾯这样的 Class ⽂件你都能看懂⼀⼆。
⼀般在逆向研究和代码分析中,反编译⽤到的⽐较多。
不过在⽇常开发中,有时候只是简单的看⼀下所⽤依赖类的反编译,也是⼗分重要的。
恰好最近⼯作中也需要⽤到 Java 反编译,所以这篇⽂章介绍⽬前常见的的⼏种 Java 反编译⼯具的使⽤,在⽂章的最后也会通过编译速度、语法⽀持以及代码可读性三个维度,对它们进⾏测试,分析⼏款⼯具的优缺点。
ProcyonCore FrameworkReflection FrameworkExpressions FrameworkCompiler Toolset (Experimental)Java Decompiler (Experimental)可以看到反编译只是 Procyon 的其中⼀个模块,Procyon 原来托管于 bitbucket,后来迁移到了 GitHub,根据 GitHub 的提交记录来看,也有将近两年没有更新了。
不过也有依赖 Procyon 的其他的开源反编译⼯具如** decompiler-procyon**,更新频率还是很⾼的,下⾯也会选择这个⼯具进⾏反编译测试。
使⽤ Procyon<!-- https:///artifact/org.jboss.windup.decompiler/decompiler-procyon --><dependency><groupId>org.jboss.windup.decompiler</groupId><artifactId>decompiler-procyon</artifactId><version>5.1.4.Final</version></dependency>写⼀个简单的反编译测试。
Jadx使用案例一、引言在当今的软件开发与测试领域,反编译工具的应用日益广泛。
它们对于理解第三方库的内部逻辑、解决特定技术难题或逆向工程具有无可替代的价值。
Jadx便是此类工具中的佼佼者,以其强大的反编译功能和易用性赢得了广大开发者的青睐。
本篇文章将深入探讨Jadx的主要功能,并通过具体的使用案例展示其实际效果,以期为读者提供有益的参考。
二、Jadx的主要功能1.高效反编译:Jadx可以将已编译的Android应用程序代码(APK或DEX 文件)反编译为Java源代码,极大地提高了代码的可读性和可维护性。
2.代码优化与重构:通过Jadx,用户可以对反编译后的代码进行优化和重构,提高代码质量,甚至可以在一定程度上实现代码重用。
3.交互式调试:Jadx集成了强大的调试器,允许用户在反编译的代码中进行断点设置、单步执行和变量查看等操作,有助于深入理解程序的执行逻辑。
4.自动导入依赖库:在反编译过程中,Jadx能够自动识别并导入项目中使用的第三方库,方便开发者快速浏览和编辑代码。
5.支持多种文件格式:Jadx不仅能够处理Android平台的APK和DEX文件,还可处理Java、C++等多种语言编译的二进制文件,展现出广泛的适用性。
6.兼容多种操作系统:Jadx可以在Windows、Mac和Linux等多个操作系统上稳定运行,降低了跨平台工作的技术门槛。
7.自定义输出路径与文件名:用户可根据个人习惯和项目需求自定义反编译后文件的保存路径及文件名,提升工作效率。
三、使用案例为了更直观地展示Jadx的功能与优势,以下将通过两个典型案例进行说明。
案例一:理解复杂代码逻辑在一个大型企业级应用项目中,开发团队遇到了一个难以理解的代码模块。
由于缺乏相应的文档和注释,分析该模块的工作变得尤为棘手。
通过使用Jadx 对APK文件进行反编译,开发人员得到了与原始源代码高度相似的Java代码,从而迅速理解了该模块的逻辑和功能。
java反编译工具--jad及小颖反编译专家的用法和使用详解当下载一个软件是jar格式的,我们可以使用jar2cod这个软件将它转换成cod格式,通过桌面管理器装到我们的bb上;如果你的电脑上安装了winrar并且没有安装jdk或者其他java开发工具,jar格式的文件的图标就是一个压缩包的图标,我们可以将它解压,解压后可以看到里面包含了一些class 文件和其他一些文件,.class后缀名的文件就是java源程序通过编译生成的类文件,而jar是对一个程序中所有需要用到的类和其他资源打包的结果。
如果想深入的了解一下别人的软件是如何开发出来的,可以使用jad这个文件对class文件进行反编译。
最新版的jad是1.5.8,下面我们来说一说jad的使用方法。
前提: 1.系统中安装了jdk;2.正确的设置了系统的环境变量。
Java下的一个简单易用的反编译工具jad, 可以很方便的将.class反编译为.Java.一、基本用法假设在c:\Java\目录下包含有一个名为example1.class的文件,反编译方法如下所示。
c:\Java\>jad example1.class结果是将example1.class反编译为example1.jad。
将example1.jad改为example1.Java 即得源文件。
c:\Java\>jad *.class上述语句可以反编译c:\Java\目录下所有的class文件。
二、Option -o不提示,覆盖源文件三、Option -sc:\Java\>jad –s Java example1.class反编译结果以.Java为扩展名。
编译出来的文件就是example1.java四、Option -p将反编译结果输出到屏幕c:\Java\>jad -p example1.class将反编译结果重定向到文件c:\Java\>jad -p example1.class>example1.Java五、Option -d指定反编译的输出文件目录c:\Java\>jad -o –d test –s Java *.class上述语句是将c:\Java\下所有class文件反编译输出到test目录下。
jad-java反编译⼯具
⼀、简介
此外,JAD还是⼀个简单易⽤的反编译⼯具,可以将⼆进制字节码⽂件(class⽂件)转换成java源⽂件。
在众多的JAVA反编译⼯具中,有⼏种⾮常著名的⼯具使⽤了相同的核⼼引擎——JAD,其中主要包括:Front End Plus、mDeJava、Decafe Pro、Cavaj Java Decompiler、DJ Java Decompiler、NMI’s Java Class Viewer和国产的JAVA源代码反编译专家等等。
JAD本⾝是⼀个命令⾏⼯具,没有图形界⾯,上述的这些⼯具⼤多是在JAD内核的基础之上加了⼀个图形界⾯⽽已。
这么多种产品的共同选择,⾜可证明JAD在JAVA反编译领域中的尊贵地位。
JAD( Joint Application Design)
JAD是动态系统开发⽅法(DSDM)中原型⽣命周期区时所使⽤来收集商业要求的程序。
JAD程序包括加强⽤户参与的途径,促进系统开发,提⾼产品规格的质量。
来源于百度百科
⼆、安装
下载对应的版本。
window版本解压即可
三、使⽤
常⽤命令:jad -o -a Demo.class
四、备注
我把jad.exe⽂件,放到java的bin⽬录下。
便于使⽤。
jadx -ds 语法示例JADX 是一个用于反编译 Android DEX 和 APK 文件的工具。
使用-ds参数,您可以指定一个包含符号表的文件,以便在反编译时更好地识别和展示方法名、变量名等。
下面提供 JADX 的反编译示例,使用了-ds参数:反编译 DEX 文件:假设你有一个名为example.dex的 DEX 文件,你想用JADX 来反编译它并使用符号表。
你可以使用以下命令:css复制代码jadx -ds symbols.txt example.dex反编译 APK 文件:反编译 APK 文件:如果你有一个 APK 文件,你可以先解压它,然后对其中的 DEX 文件进行反编译:css复制代码apktool d example.apk jadx -ds symbols.txt -f -r -o output_directory/ example_unzipped_directory/smali/生成符号表文件: jadx -ds symbols.txt -f -r -o output_directory/ example_unzipped_directory/smali/生成符号表文件:生成符号表文件:如果你还没有符号表文件,但有一个 DEX 或 APK 文件,你可以先反编译它,然后从输出的 smali 文件中提取符号:css复制代码apktool d example.apk smali/b -o symbols.txt使用符号表文件进行反编译:smali/b -o symbols.txt使用符号表文件进行反编译:使用符号表文件进行反编译:假设你已经有了symbols.txt这个符号表文件,并且想要使用它来反编译一个 DEX 文件:css复制代码jadx -ds symbols.txt example.dex指定多个符号表文件:指定多个符号表文件:有时你可能有一个主符号表文件和一个补充符号表文件。
反编译插件jadclipse使用
反编译插件jadclipse下载:
选择适合版本的jar文件下载
然后根据Installation 的说明安装配置
1,把下载的 JadClipse JAR 文件放在Eclipse安装目录的plugins 文件夹下,(我本机的路径是D:\MyEclipse 6.0\eclipse\plugins)2,重启Eclipse,
3,下载jad,,选择适合的版本,
4,把jad.exe 放在系统路径中,(例如C:\Program Files\Jad\jad.exe),然后在Eclipse中选择Window > Preferences... > Java > JadClipse > Path to Decompiler,填写jad.exe的路径,在Directory for tempcrary files中填写临时文件路径,如下图
5,选择,Window > Preferences... > General > Editors > File Associations 选择*.class文件,如下图
选择 Associated editors 选中 JadClipse class File Viewer ,选择右边的 Default 按钮,如下图
当 JadClipse class File Viewer 变为 defaule之后,如下图
至此,jadClipse插件就安装完成了,你可以双击 class文件或者是把鼠标放在想看的类或方法名上,然后按住ctrl点击,就可以看到反编译后的源文件了,。
本文由leveldc贡献 java反编译工具jad 1.5.8g支持 jdk1.5,jdk1.6。
说明很多 记住一个万能的命令基本就够用了。
jad -sjava -r -8 -o **\*.class 反编译工具jad简单用法 以下假设jad.exe在c:\java目录下 一、基本用法 Usage: jad [option(s)] <filename(s)> 直接输入类文件名,且支持通配符,如下所示。
c:\java\>jad example1.class c:\java\>jad *.class 结果是将example1.class反编译为example1.jad。
将example1.jad改为example1.java即得源文件。
二、Option -o 不提示,覆盖源文件 三、Option -s c:\java\>jad -sjava example1.class 反编译结果以.java为扩展名。
四、Option -p 将反编译结果输出到屏幕 c:\java\>jad -p example1.class 将反编译结果重定向到文件 c:\java\>jad -p example1.class>example1.java 五、Option -d 指定反编译的输出文件目录 c:\java\>jad -o -dtest -sjava *.class 命令行选择的列表 -a - 用JVM字节格式来注解输出 -af - 同 -a,但是注解的时候用全名称 -clear - 清除所有的前缀 -b - 输出多于的括号 (e.g., if(a) { b(); }, default: no) -d - 指定输出文件的文件目录 -dead -试图反编译代码的dead 部分(default: no) -disass - 不用用字节码的方式反编译 (no JAVA source generated) -f - 输出整个的名字,无论是类还是方法 -ff -输出类的成员在方法之前 (default: after methods) -i - 输出所有的变量的缺省的最初值 -l<num> - 将strings分割成指定数目的块的字符 (default: no) -lnc - 将输出文件用行号来注解 (default: no) -nl - 分割strings用新行字符 newline character (default: no) -nodos -不要去检查class文件是否以dos方式写 (CR before NL, default: check) -nocast - 不要生成辅助文件 -nocode -不要生成方法的源代码 -noconv - 不要转换java的定义符 (default: do) -noctor - 不允许空的构造器存在 -noinner -关掉对内部类的支持 (default: turn on) -nolvt - 忽略局部变量的表信息 -nonlb - 不要输出一个新行在打开一个括号之前 (default: do) -o - 无需确认直接覆盖输出 (default: no) -p - 发送反编译代码到标准输出 STDOUT (e.g., for。
java反编译工具--jad及小颖反编译专家的用法和使用详解
当下载一个软件是jar格式的,我们可以使用jar2cod这个软件将它转换成cod格式,通过桌面管理器装到
我们的bb上;如果你的电脑上安装了winrar并且没有安装jdk或者其他java开发工具,jar格式的文件的
图标就是一个压缩包的图标,我们可以将它解压,解压后可以看到里面包含了一些class 文件和其他一些
文件,.class后缀名的文件就是java源程序通过编译生成的类文件,而jar是对一个程序中所有需要用到
的类和其他资源打包的结果。
如果想深入的了解一下别人的软件是如何开发出来的,可以使用jad这个文
件对class文件进行反编译。
最新版的jad是1.5.8,下面我们来说一说jad的使用方法。
前提: 1.系统中安装了jdk;
2.正确的设置了系统的环境变量。
Java下的一个简单易用的反编译工具jad,可以很方便的将.class反编译为.Java.
一、基本用法
假设在c:\Java\目录下包含有一个名为example1.class的文件,反编译方法如下所示。
c:\Java\>jad example1.class
结果是将example1.class反编译为example1.jad。
将example1.jad改为example1.Java 即得源文件。
c:\Java\>jad*.class
上述语句可以反编译c:\Java\目录下所有的class文件。
二、Option-o
不提示,覆盖源文件
三、Option-s
c:\Java\>jad–s Java example1.class
反编译结果以.Java为扩展名。
编译出来的文件就是example1.java
四、Option-p
将反编译结果输出到屏幕
c:\Java\>jad-p example1.class
将反编译结果重定向到文件
c:\Java\>jad-p example1.class>example1.Java
五、Option-d
指定反编译的输出文件目录
c:\Java\>jad-o–d test–s Java*.class
上述语句是将c:\Java\下所有class文件反编译输出到test目录下。
反编译别人的程序可以让我们看到别人软件的源代码,从而更好的了解别人的软件是如何开发出来的,
积累我们的编程经验,在此基础上还可以对软件进行一些修改。
除jad外小颖JAVA源代码反编译专家
V1.4终极版也是个很好的工具,但是只能对JDK1.4.2和之前的版本编译的程序反编译,而JDK5.0后
的文件就无能为力了,我们接着来讲一下小颖java源代码反编译专家的使用方法。
下载安装后打开程序的主界面如下:
我们以反编译qq2008beta1为例:
1.先将qq2008beta1解压
2.指定qq2008beta1的目录
3.指定输出文件夹的目录
4.点击开始反编译。
5.打开输出文件夹查看结果
我们打开a.java看一下内容:
注:小颖java反编译专家是基于jad1.5.7的,在反编译的时候有可能某个文件一直反编译不出,我们可以关掉
小颖java反编译专家找出不能成功反编译的文件,删除,接着反编译,最后再用jad1.5.8在dos下进行反编译。
进入dos,切换到目录下输入jad-s java*.class反编译所有小颖java反编译器未反编译成功的文件
从上图我们可以看出,虽然使用反编译工具jad但是CLASS文件仍不能完全的反编译出源代码中的一些方法,这就需要我们
对反编译出的文件进行一些必要的修改,否则即使重新打包成jar也不能正常的运行。