Odex文件反编译为Jar包

目前在研究Android手机字体的灵活设置问题,归类各手机厂商的实现方式:

1:在主体商店设置字体后,手机需要重起

2:在主题商店设置字体后,立即生效

方案1的效果已基本实现,但是方案二的效果有基础轮廓,但是还是好奇,所以用友商的手机过来看看究竟。

当通过Adb进入到友商系统时,全是.Odex的文件,原本的.Jar已经被预优化。因此面临.Odex的反编译问题。

首先列出需要的工具:

A:smali/baksmali

B:dex2jar

C:jadx

附件中有添加对应工具,本文档只记录对应的方法。

本文以Framework.odex文件的反编译为目标,介绍反编译的方法和步骤:

假设所有工具已经下载到位,统一放在Decompile目录下,目录结构如图所示:

Decompile

    |————smali

                    |

                    ——smali

                    ——baksmali

    |————dex2jar

                    |

                    ——d2j*.bat

    |————jadx

                    |

                    ——jadx-ui.bat

步骤:

1.进入到Decompile目录,Adb连接对应设备,执行以下命令:

    adb pull /system/framework/framework.odex 

2.执行java -jar smali\baksmali-2.1.3.jar,会有如下打印

usage: java -jar baksmali.jar [options] <dex-file>

disassembles and/or dumps a dex file

 -?,--help prints the help message then exits.

                                            Specify twice for debug options

                                ......

 -X,--experimental enable experimental opcodes to be

                                            disassembled, even if they aren't

                                            necessarily supported in the Android

                                            runtime yet

3.执行java -jar smali\baksmali-2.1.3.jar -a 16 -x framework.odex -d .

   会有如下错误:

    Error occurred while loading boot class path files. Aborting.

    org.jf.util.ExceptionWithContext: Cannot locate boot class path file /system/framework/telephony-msim.odex

        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)

4.执行adb pull /system/framework/telephony-msim.odex,并且继续执行步骤3,如果有类似步骤3的抱错,参考步骤4执行,直到步骤3完全正常,跳转到步骤5 

5.baksmali 执行成功后,会产生out 目录,里面放的是中间文件。执行如下命令:

    java -jar smali\smali-2.1.3.jar -a 16 -o classes.dex out,如果out目录之前已经存在,请先删除。

6.执行dex2jar\d2j-dex2jar.bat classes.dex,classes-dex2jar.jar 就是我们要的Jar包

7.将classes-dex2jar.jar 拖动到jadx\jadx-gui.bat上打开,即可察看源码。

注:其实也可以在执行完步骤5之后,直接使用jadx打开dex文件。

  

猜你喜欢

转载自blog.csdn.net/u011494885/article/details/83341471
今日推荐