导航:首页 > 源码编译 > 为什么有的dex文件可以反编译过来

为什么有的dex文件可以反编译过来

发布时间:2023-07-17 06:10:48

❶ 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文件的反编译,其实工具有很多, 包括:

❽ 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.其他,一些调整

阅读全文

与为什么有的dex文件可以反编译过来相关的资料

热点内容
dvd光盘存储汉子算法 浏览:757
苹果邮件无法连接服务器地址 浏览:962
phpffmpeg转码 浏览:671
长沙好玩的解压项目 浏览:144
专属学情分析报告是什么app 浏览:564
php工程部署 浏览:833
android全屏透明 浏览:736
阿里云服务器已开通怎么办 浏览:803
光遇为什么登录时服务器已满 浏览:302
PDF分析 浏览:484
h3c光纤全工半全工设置命令 浏览:143
公司法pdf下载 浏览:381
linuxmarkdown 浏览:350
华为手机怎么多选文件夹 浏览:683
如何取消命令方块指令 浏览:349
风翼app为什么进不去了 浏览:778
im4java压缩图片 浏览:362
数据查询网站源码 浏览:150
伊克塞尔文档怎么进行加密 浏览:892
app转账是什么 浏览:163