A. 如何反编译android 的apk/dex/odex,获得源码
关于APK,DEX的介绍
当我们编译一个安卓项目的时候,整个项目会被打包成一个 .apk文件。这个文件其实是一个标准的zip文件,因此可以用解压缩工具打开。这个apk文件一般都包含程序的代码(在classes.dex文件中), 资源文件, 证书, manifest 文件等。 其中对我们最重要的是classes.dex文件,因为编译后的字节码(bytecode)都是放在这个文件中。我们后面讲的反编译就是针对这个dex文件来的。
反编译普通的APK文件:
对于普通的APK/DEX文件的反编译,其实工具有很多, 包括:
ByteCode Viewer: 一个可视化的集成工具,说实话,不太好用,不够稳定,生成代码质量中等。
dex2jar + jd_gui: 这两个工具组合还可以, 用起来比ByteCode Viewer麻烦一些,但比较稳定,生成代码质量中等。
在线反编译工具JADX: http://www.javadecompilers.com/apk , 这是基于SourceForge上的JADX的开源工具来实现的。本来以为在线反编译质量不会好,但出人意料的是:JADX是我发现的最好的反编译工具, 不但使用简单(直接上传,转换,下载就ok),而且反编译出来的代码质量很高,特别是变量命名方面,可读性很不错。
反编译ODEX文件:
Android 5.0 Lollipop以后,Google用ART代替了以前的Dalvik,对于普通的app来说我们仍然可以用上面的方法来把dex文件反编译成Java源代码。但对于系统预装的App,特别是类似应用商店,播放器等, 你会发现这些应用的apk文件中找不到对应的classes.dex文件,而是会发现在其子目录下有个.odex文件。 那如何反编译这个odex文件呢?我通过google查了查,知道应该用baksmali,但从github上下载了几个版本都不行,报各种不同错误。经过反复搜索和尝试,终于找到了这篇文章
: http://www.naldotech.com/how-to-deodex-applications-on-android-5-0-lollipop/ 。 具体方法如下:
1. 从这里下载工具包, 解压缩到本地。 这里的baksmali的版本是2.0.3. 不同版本的baksmali针对的Android内核不同。有时候高版本反倒不好用。
2. 打开工具所在目录, 按住shift键, 点击鼠标右键,打开windows命令窗口
3. 把 odex文件拷贝到该目录
4. 在命令窗口运行: oat2dex.bat *.odex. 正常情况下,应该显示OK等信息。如果报错的话,说明这个文件无法转换,后面的也不用试了。
5. 运行 oat2dex.bat *.odex temp.dex . 运行后会创建一个temp.dex文件。
6. 运行 java -jar baksmali-2.0.3.jar -a 21 -x temp.dex -o source . 运行后会创建一个source的文件夹,并将temp.dex反编译到该文件夹。-a 21 表明的是Android内核的版本21
7. 运行 java -jar small-2.0.3.jar -a 21 source -o classes.dex, 反编译为classes.dex文件。
需要注意的是:由这种方式反编译成的classes.dex 文件相比原生的classes.dex 还是缺少了些信息,因此反编译这种classes.dex 文件后生成的java代码可读性会更差些。
8. 用在线工具JADX 来把 classes.dex 最终反编译为java代码。
B. macbook 可以使用apk解析工具吗
豌豆夹有mac版的,可以用来安装apk到手机
C. android中 如何才能显示类的意思 见图片
要看源码还是要看开发者提供的类的注释?Note代表的意思是如果你想更深入的了解该类,那必须加载源码。因为jar包中只有class文件,没有.java文件。
D. 如何把apk反编译成java代码
一、找到apk中的class.dex:
把apk文件改名为.zip,然后解压缩其中的class.dex文件,它就是java文件编译再通过dx工具打包成的。
1、把class.dex拷贝到dex2jar.bat所在目录,直接拖动class.dex到dex2jar.bat,生成classes.dex.dex2jar.jar。
或者:1.在cmd下进入dex2jar.bat所在路径,然后输入“dex2jar.bat XXX”,XXX指的是你要反编译的apk中的classes.dex文件所在路径及名称,比如:我的dex2jar.bat在D:\Android\apk_decode\dex2jar-0.0.7-SNAPSHOT路径下, classes.dex在D:\Android下,所以: 你进入dex2jar.bat路径下后,输入dex2jar.bat D:\Android\classes.dex,这样会生成一个jar文件。
2.用rar解压出jar文件中的class文件,然后用jad或DJ Java Decompiler反编译工具将.class文件反编译成.java文件
3、运行JD-GUI工具,打开上面的jar文件,在File下有个Save JAR Source,它可以生成src源代码。
E. 如何反编译android应用并重新打包
下载apktool:http://www.softpedia.com/get/Programming/Debuggers-Decompilers-Dissasemblers/ApkTool.shtml
运行 java -jar apktool.jar -f d <APK>文件反编译
运行java -jar apktool.jar -f b <反编译目录>重新打包
可以参考:http://blog.csdn.net/vipzjyno1/article/details/21039349/
F. android源码被混淆了怎么还原
android源码被混淆了还原方法为:
1、得到 classes.dex文件;直接用机器上的解压软件 打开 .apk 文件,解压出 classes.dex 文件。
2、还原.jar文件;这一步需要用到一个工具 dex2jar (谷歌的代码库里有http://code.google.com/p/dex2jar/)下载完了,解压,然后把第一步的 产物(即那个classes.dex文件)放到 dex2jar的解压目录(解压目录里 有 dex2jar.bat 文件,检查一下,没有的话说明目录不对)。
3、查看.jar文件;这一步就是传统的 反编译 了,需要工具辅助,这里用到的工具是jd-gui(http://java.decompiler.free.fr/?q=jdgui)下载系统对应的版本,解压,(xp系统)会看到一个 .exe文件,没错就是 单文件绿色版,双击,选择 第二步 生成的 .jar,即可。
G. jeb android decompiler怎么用
就是Android的开发工具 现在只要有 Eclipse(老牌Java开发工具) Google自己出的Android Studio(新出的ide,去年Google发布的,个人感觉还不是很完善) netbeans的话也可以开发 但是用的人相对较少,主要还是前两种 个人比较推荐 eclipse
H. 安卓系统的JD和ROM 什么意思啊
JD应该是一种反编译器JAVA Decompiler,或者是一种源代码,安卓系统采用了很多的Java源代码。
而ROM就是通常所说的系统固件。每个安卓版本都有对应的固件可以刷。
I. android的apk文件中并没有源码那在软件安装后为什么还能用
集成apk时把源码集成进去了。可以反编译出来。反编译步骤
1、把 class.dex 拷贝到 dex2jar.bat 所在目录,直接拖动 class.dex 到 dex2jar.bat,生成 classes.dex.dex2jar.jar。
2、用 rar 解压出 jar 文件中的 class 文件,然后 用jad 或 DJ Java Decompiler 反编译工具将 .class 文件反编译成 .java 文件
3、运行 JD-GUI工具(绿色软件),打开上面的 jar 文件,在File下有个 Save JAR Source,它可以生成 src 源代码。
J. android 开发DICOM, 想要用dcmtk 怎么编译成jar
目前,比较流行的JAVA反编译工具有近30种,其中有三款堪称精品:一、应用广泛的JAD在众多的JAVA反编译工具中,有几种非常着名的工具使用了相同的核心引擎——JAD,其中主要包括:FrontEndPlus、mDeJava、DecafePro、CavajJavaDecompiler、DJJavaDecompiler、NMI’sJavaClassViewer和国产的JAVA源代码反编译专家。JAD本身是一个命令行工具,没有图形界面,上述的这些工具大多是在JAD内核的基础之上加了一个图形界面而已。这么多种产品的共同选择,足可证明JAD在JAVA反编译领域中的尊贵地位。JAD是使用MicrosoftVisualC++开发的,运行速度非常快,可以处理很复杂的JAVA编译文件。众多的参数使JAD可以灵活应付多种加密手段,令反编译的代码更加优化和易读。由于JAD参数太多,没必要一一解释,其中有几个最常用的如下(以JAD1.5.8f版本为例):-d-用于指定输出文件的目录-s-输出文件扩展名(默认为:.jad),通常都会把输出文件扩展名直接指定为.java,以方便修改的重新编译。-8-将Unicode字符转换为ANSI字符串,如果输出字符串是中文的话一定要加上这个参数才能正确显示。最常用的反编译指令如下所示:Jad–dc:\javasource–s.java-8javatest.class这条指令将当前目录下的javatest.class反编译为javatest.java并保存在c:\javasource目录里,其中的提示输出为中文,而不是Unicode代码。二、源码开放的JODEJODE是全球最大的开源项目网站Sourceforge.net的成员,在所有的JAVA反编译器中,JODE的反编译效果是最好的,尤其是对付一些常见的加密手段,例如混淆技术等,更是出类拔粹。JODE本身也是纯JAVA开发的,最近越来越多的JAVA反编译软件也选择JODE来做它们的核心引擎,例如JCavajJavaDecompiler、BTJ(BackToJava)、jEdit’sJavaInsightplugin等。JODE是一个可运行的JAR文件,在windows环境下双击即可运行。需要特别说明的是,JODE不是通过常规的Open->File的方式来加载JAVA编译后的类文件(*.class)或是类包(*.jar)的,而是通过在Options菜单中的SetClasspath来实现的,单独的类文件可以将它的上一级目录作为Classpath输入,然后再选择ReloadClasspath即可。新加入的类包或是类的名字会在左侧窗口出现,双击类包名可以目录树结构,双击需要反编译的类名则在右上角的窗口中直接显示反编译后的源代码。三、独树一帜的DAVADAVA不是一个独立的JAVA反编译器,而是JAVA代码优化工具Soot的一部分。Soot和JODE一样是纯JAVA开发的,也是一个独立的JAR包,但却不能通过双击直接运行,而是象JAD一样在命令行状态运行。Soot对环境变量的配置要求非常严格,通常情况下要对CLASSPATH做如下设置:SetCLASSPATH=%CLASSPATH%;c:\sootdir\sootclasses-2.1.0.jar;.;其中的c:\sootdir\是下载的soot类包放置的路径,CLASSPATH末尾的.;代表了当前目录,如果不加上这个的话Soot经常会报一个找不到类的错误。DAVA是作为Soot的一个参数使用的,通常的用法如下:Javasoot.Main–fdava–dc:\javasourcejavatest注意最后的类名不用带.class后缀,因为它默认是处理class文件,这个操作与前述的JAD的参数效果相同。DAVA采取了流程优化的方式进行反编译,与传统反编译思路不尽相同,但却对改变流程类的加密方法有独特的反编译效果。上述的三种工具各有千秋,但效果都非常不错。经测试,它们基本上都可以把JDK自带的一些例程完全反编译,然后不加任何修改可再编译成功,并能正常运行!