Android 将odex文件转换为dex文件

Android 将odex文件转换为dex文件,android,dex,smali,Android,Dex,Smali,我想将odex文件转换为dex文件。我已经从系统中提取了框架文件夹。我试过下面的命令 java -jar baksmali-2.1.2.jar -d system/framework -x temp.odex 但产生了错误-错误消息如下所示 Error occurred while loading boot class path files. Aborting. org.jf.util.ExceptionWithContext: Cannot locate boot class path f

我想将odex文件转换为dex文件。我已经从系统中提取了框架文件夹。我试过下面的命令

java -jar baksmali-2.1.2.jar -d system/framework -x temp.odex
但产生了错误-错误消息如下所示

 Error occurred while loading boot class path files. Aborting. org.jf.util.ExceptionWithContext: Cannot locate boot class path file /system/framework/core.jar
        at org.jf.dexlib2.analysis.ClassPath.loadClassPathEntry(ClassPath.java:277)
        at org.jf.dexlib2.analysis.ClassPath.fromClassPath(ClassPath.java:182)
        at org.jf.baksmali.baksmali.disassembleDexFile(baksmali.java:67)
        at org.jf.baksmali.main.run(main.java:113)
        at org.jf.baksmali.main.main(main.java:322)
我在android系统框架文件夹中找不到“core.jar”。

请尝试以下方法:

java -jar baksmali-2.1.2.jar -c boot.oat -d system/framework/arm/boot.oat -x temp.odex
boot.oat的特定路径可能不同


另外请注意,baksmali还不支持对N预览图像进行去索引。

这对我来说很有效
adb pull/system/framework/arm/boot.oat/tmp/framework/boot.oat
放置apk和odex文件
baksmali.jar-x-c boot.oat-d/tmp/framework APKname.odex-o APKname
我不确定我是否理解正确您的问题(如果我错了,请纠正我),但是如果您试图将odex转换为dex,我已经在这里回答了类似的问题:

无论如何,据我所知,你有两个选择:

  • 请遵循以下指南:
  • 或者使用在RE stackexchange上评论我的答案的用户指出的
    oat2dex

祝你好运

从2017年6月9日起,巴克斯马里发生了变化。它是这样工作的

java -jar baksmali-2.2.0.jar d SamsungInCallUI.odex -o SamsungInCallUI
然后组装dex文件

java -jar smali-2.2.0.jar ass SamsungInCallUI -o SamsungInCallUI.dex

这是@kakopappa答案的扩展

如果您是mac/linux用户,请从获取最新版本的baksmali和smali jar,并将其放入文件夹中,然后将此方法添加到.bash_配置文件中

将baksmali和smali jar放入计算机中,并从终端将其分配给这些变量

BAKSMALI_JAR_PATH=“”

SMALI_JAR_PATH=“”

注意:编辑后的值应类似于 BAKSMALI_JAR_PATH=“/Users/rabbit/tools/BAKSMALI-2.2.7.JAR” SMALI_JAR_PATH=“/Users/rabbit/tools/SMALI-2.2.7.JAR”

在终端中复制粘贴此脚本并重新启动终端。这是一个快捷功能,可以添加到
.bash\u profile
中,方便您使用

    echo "BAKSMALI_JAR_PATH="$BAKSMALI_JAR_PATH >> ~/.bash_profile
    echo "SMALI_JAR_PATH="$SMALI_JAR_PATH >> ~/.bash_profile
    echo >>
    function odextodex() {
       odex_file_name=$1
       deassembled_file=${odex_file_name%.odex}
       java -jar $BAKSMALI_JAR_PATH d $1 -o $deassembled_file
       java -jar $SMALI_JAR_PATH ass $deassembled_file -o $deassembled_file.dex
       rm -rf $deassembled_file
    }

执行此类型的操作后,
odextodex
filename.odex-您应该会在当前目录中看到filename.jar文件。

这与dalvik有关吗?还是艺术?我试过了,但又犯了一个错误。加载启动类路径文件时出错。流产。org.jf.util.ExceptionWithContext:在org.jf.dexlib2.analysis.ClassPath.loadClassPathEntry(ClassPath.java:2 77)在org.jf.dexlib2.analysis.ClassPath.fromClassPath(ClassPath.java:182)在org.jf.baksmali.baksmali.decomposedexfile(baksmali.java:67)找不到引导类路径文件boot.oat在org.jf.baksmali.main.run(main.java:113)和org.jf.baksmali.main.main(main.java:322)上,正如我所说,到boot.oat的具体路径可能不同。我这样尝试过。java-jar baksmali-2.1.2.j ar-x-c boot.oat-d system/framework Test.odex-o Test.apk。但产生了错误。加载启动类路径文件时出错。流产。org.jf.util.ExceptionWithContext:无法在org.jf.dexlib2.analysis.ClassPath.loadClassPathEntry(ClassPath.java:277)org.jf.dexlib2.analysis.ClassPath.fromClassPath(ClassPath.java:182)org.jf.baksmali.baksmali.org.jf.baksmali.baksmali.main.run(main.java:113)org在org.jf.baksmali.main.main(main.java:322)上,确保boot.oat文件位于系统/框架中,这应该是代码
java-jar-baksmali-2.1.2.jar-x-c boot.oat-d system/framework temp.odex-o temp
I从系统/框架中拉出boot.oat并重试。但同样的错误再次出现。
system/framework
只是您电脑上boot.oat的路径,如果您只是在不移动boot.oat的情况下拉动system/framework,那么路径将是
system/framework/arm
,您必须确保此路径指向PC上的boot.oat。请尝试以下代码
java-jar baksmali-2.1.2.jar-x-c boot.oat-d system/framework/arm temp.odex-o temp
谢谢。谢谢你的帮助,我成功了。我用oat2dex试过了。但是埃罗被制造出来了。错误消息是“OAT Hader Checking..:失败!OAT2DEX文件检查文件失败”。谢谢。我成功了。