❶ dex文件被破坏,如何反编译apk或者此dex呢
可以使用 apktool工具反编译 apk ,会把dex文件反编译为samli源码。
也可直接把dex文件从apk文件解压出来,用dex2jar工具把它转换成jar文件,这样就可以用jd-gui工具看到java源码了。
❷ 为什么我无法使用反编译工具将classes.dex文件反编译
类似的问题我也遇到过,貌似并非所有的classes.dex都能反编译,
你可以试试其他的classes.dex看看。
❸ android APK+Dex文件反编译及回编译工具的使用说明
本工具执行安装后,直接在【鼠标右键】生成快捷键,自动关联APK、DEX、Odex、Zip等文件。只要在电脑任意“非分区根目录”,【鼠标右键】点击相关文件,即可编译操作。如,反编译APK及DEX文件,反编译后生成可编译的同名文件夹,汉化修改完成后,对文件夹点击【鼠标右键】根据文件夹反编译前的文件类型,现在【使用 APKDB编译】即可!
同时,针对apk和zip文件增加签名操作,只要【鼠标右键】点击,选择【使用 APKDB编译】选择【[S]签名APK文件】即可!签名前无需删除原来的【META-INF】签名数据。本工具会判别apk还是zip并自动删除签名数据。
❹ 如何反编译 android 中 /data/dalvik-cache/arm 下的文件
所有的 apk 内包含一个 classes.dex 文件。在 Dalvik上,apk包里的 dex文件在安装的时候会通过 dexopt 转化成另一个格式,叫odex(Opitimized dex),然后存在 /data/dalvik-cache里面,如:
/data/dalvik-cache/data@[email protected]@classes.dex
虽然文件后缀还是 .dex,但是这个dex和apk内的那个已经不一样了。这个文件是针对当前机器的硬件对 dex 文件进行了定制化,也就是说把这个放到别的设备上,不一定能运行。
PS: 在要编译 rom 的时候,如果参数加上 "WITH_DEXPREOPT=true",会在 /system/app/ 下同时生成 .apk 和 .odex 文件(注意,这里后缀又用的 .odex,但实际上和系统在 /data/dalvik-cache/ 下的 .dex文件是一样的)
ART
在 ART上,apk 包里的 dex文件在安装的时候通过 dex2oat,也会生成一个后缀为 .dex 的文件,放在 /data/dalvik-cache中,如:
/data/dalvik-cache/arm/system@app@[email protected]@classes.dex
/data/dalvik-cache/arm64/system@vendor@app@[email protected]@classes.dex
这个文件后缀叫 .dex ,但是这个文件又不一样了,这个既不是 dex 也不是 odex,用 dex2jar 的无法进行反编译的。文件格式也完全不同,因为这其实就是一个实打实的 elf文件,这个文件已经可以直接在机器上运行了。
为何 pm.jar 是空的?
首先来了解一下 ROM 的编译选项,看一下编译的时候能做什么事情, 大致了解就行了 。
编译选项
WITH_DEXPREOPT
使能编译时生成 OAT,避免第一次开机时编译耗时,但会增大 system分区的空间消耗
DONT_DEXPREOPT_PREBUILTS
使能后,将不会对 Android.mk中包含了 include $(BUILD_PREBUILT)的 Apk进行 oat,例如 Gmail,它很可能会在后期通过商店自行升级,而升级后系统中的 oat文件则没有意义了,但又无法删除,会造成空间的浪费(oat比dex文件要大)
WITH_DEXPREOPT_BOOT_IMG_ONLY
仅仅针对 boot.img进行oat优化(boot.img中包含 boot.art和 boot.oat)
LOCAL_DEX_PREOPT ture|false|nostripping
可用于各个 Android.mk,对每个 package进行单独配置,当设置为 true时,dex文件将会从 apk中剔除,如果不想剔除可使用 nostripping WPRODUCT _DEX PREOPT_*
WPRODUCT__DEX_PREOPT_*
PRODUCT_DEX_PREOPT_BOOT_FLAGS
这里的参数将会传至 dex2oat,控制 boot.img的编译优化行为。
PRODUCT_DEX_PREOPT_DEFAULT_FLAGS
控制除 boot.img 外,其他(如 jar, apk)的 OAT编译行为 例如:
PRODUCT_DEX_PREOPT_DEFAULT_FLAGS := --compiler- filter=interpret-only
$(call add-proct-dex-preopt-mole- config,services,--compiler-filter=space)
WITH_DEXPREOPT_PIC ture|false
使能 position-independent code,这样在dex2oat编译生成的 odex文件在运行时将不必再从 /system 下拷贝到 /data/dalvik-cache/ 目录下, 可以节省 /data 空间
WITH_ART_SMALL_MODE true|false
设置为 true 时,将只编译处于 boot classpath 里的类,其他的均不编译,这样既能加快第一次开机时间,因为大部分必要的类已经编译过了; 同时也能节省不少空间,因为 APP 都未进行编译。缺点是可能损失一性能,这可能要平时觉察不出,但在跑分软件上会有所体现
编译选项的经典配置
为了提高第一次开机速度,WITH_DEXPREOPT是必须使能的,这样则在编译阶段会完成 dex2oat的操作,避免在开机时间去做这个转码,节省了开机时间(6min以上缩短2min内)。
但会引起一个缺点,那就是 apk中还是包含了 class.dex(dexopt生成的),同时在对应的apk文件夹中又生成了已经转码成oat的 class.odex(dex2oat生成的),相当于这部分重复,造成了大量的空间浪费。
为了把 apk包里的 class.dex去除,节省空间,可以打开 DEX PREOPT DEFAULT := ture。
然而,这样开机速度是快了,而且节省了不少system空间,但开机后,我们会发现即使在 system中已经存在 class.odex的 apk,第一次开机后还是会在 /data下面生成 class.odex,如data/dalvik-cache/arm64/system@app@[email protected]@classes.dex,这是何解?原来 Google为了提高安全性,在每一台机器开机时都会在之前的机器码加一个随机的偏移量,这个偏移量是随机的,每台机器都不相同,而 data分区下的这些文件就是从 system下的 class.odex加上偏移而来。
❺ 求助dex工具怎么反编译
反编译apk工具使用最广泛的就是apktool,这里先说一下整个流程用到的工具有:
1.apktool,下载后拿到apktool.bat和apktool.jar,然后把这两个工具放到C:\Windows底下。这个工具的作用主要是得到apk的资源文件和配置文件
2.dex2jar 下载这个工具解压后放到任意盘都可以,后面主要用这个根据apk的classes.dev文件生成供jd-gui工具解析的jar。
3.jd-gui上一步提到其作用,和2一样,也是下载后放到任意盘即可,到时候只要运行jd-gui.exe打开上一步生成的jar即可查看源码,下面对这个工具不再赘述
下面详细说一下前面两个工具类的详细用法:
先说apktool的用法:
1.下载后拿到apktool.bat和apktool.jar,然后把这两个工具放到C:\Windows底下
2.cmd打开后默认是你的计算机,默认的不用改,直接输入apktool,如果出现如下图的效果,即表示准备已就绪
接下来,apktool d f:\app-debug.apk f:\app像这样输入,这里的f:\app-debug.apk是你的将要被反编译的apk的绝对路径,后面的f:\app是apk反编译后资源文件将要放入的文件夹,不需要事先新建好,在这里写好就行了,输入完回车,如果成功的话,即可在文件夹中看到资源文件,这里apktool的流程算完了。
接下来说一下第二个工具,dex2jar的使用流程:
1.把你将要反编译的apk的扩展名改成压缩包的扩展名(rar\zip等),然后对其解压,找到classes.dev文件,将之复制后贴到dex2jar底下,效果如如下:
接下来又要写命令了,同样cmd,然后转换到你的dex2jar目录,然后输入dex2jar.bat classes.dev,然后回车即可在dex2jar.目录中看到一个classes_dex2jar.jar。好了,完了,贴图
得到classes_dex2jar.jar了,前面说了jd-gui的作用了,直接打开这个就行了,得到的就是源代码了
❻ android手机的apk文件中的class.dex文件是什么是做什么用的呢
简单说就是优化后的android版.exe。每个apk安装包里都有。相对于PC上的java虚拟机能运行.class;android上的Davlik虚拟机能运行.dex。
作用
让dalvik能够运行。
dex好处
可以直接用DexClassLoader类加载,动态加载。于是只要在dex上加壳,在程序运行时脱壳,就可以规避静态反编译的风险。
(6)为什么有的dex文件可以反编译过来扩展阅读
使用dex文件的原因
在Android系统中,一个App的所有代码都在一个Dex文件里面。Dex是一个类似Jar的包,存储了很多Java编译字节码的归档文件。
因为Android系统使用Dalvik虚拟机,所以需要把使用Java Compiler编译之后的class文件转换成Dalvik能够执行的class文件。
❼ 如何反编译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代码。
❽ Android APK+Dex文件反编译及回编译工具的最新版本
v.1.8.1 正式版 2013.12.30*.更新,重新整合右键菜单*.新增,支持zip刷机包Sideload线刷功能(需要CWM Recovery支持)*.新增,编译时可保留APK文件原始签名(Apktool v2.0.0b8版)*.新增,多语言选项:支持简体,繁体*.更新,Apktool v2.0.0b8(测试版)*.更新,smali/baksmali v2.0.2*.修复,查看DEX源码出错问*.增强,对繁体中文的支持。*.更新,显示APK自身图标(Apkshellext v2.3)*.修复,部分代码与系统不兼容问题*.更新,APK优化工具Zipalign (22.3版)*.更新,adb工具支持Android4.4*.修复,修复批量编译*.修复,回编译保留旧文件失败问题(与系统时间格式相关)*.修复,Odex合并问题*.修复,Apk优化失败问题*.修复,APK文件安装器出错问题*.修复,安装框架文件出错问题*.修复,64位系统签名优化出错问题*.更新,Java Decompilier 至 v0.3.5*.更新,Dex2jar 至 v0.0.9.15*.增强,对API 19的支持!*.优化,重新执行脚本*.其他,一些微调整
v.1.7.2 正式版 2012.09.051.更新,Apktool v1.5.0 (2012.9.2)2.更新,smali/baksmali 至 v1.3.3版3.更新,APK优化工具Zipalign (2012.6.25版)4.优化,Odex合并到APK或JAR功能(可选择系统版本)5.增强,支持(JB)Android v4.1.1 编译6.增强,与手机助手的兼容性7.其他,一些调整