Android deodex(odex 反编译工具的使用)

需要进行deodex的原因
今天在破解MOTO双卡双待手机APN设置的时候, 发现靠网上搜集的信息不足以完成任务, 于是只能自己针对现有手机进行破解。
我遇到的问题是, 如何判断当前的手机是MOTO双卡双待手机, 以及此手机中的APN切换是操作哪些数据库,逻辑是怎样的。
于是使用adb pull 将手机中/system/app/, /system/framework/ 下所有的东西都拉取到本地。 理论上应该通过反编译这些apk和jar包中某些就能够解决问题。
但是我发现所有的apk包和jar包都进行了odex处理,据说这么处理能够让系统一次性加载整个包, 从而提高运行时的效率。(我们的应用是否也有类似的需求?)
进行odex处理后, 所有的apk或者jar包都变成了两个文件: 1. test1.jar 2. test1.odex; 1. test2.apk 2. test2.odex
发现test1.jar和test2.apk中不包含任何代码, 于是只能反编译odex文件。 我们的目的是为了看到代码, 分4步:
1. 准备工具: 
    准备dex2jar工具, http://code.google.com/p/dex2jar/
 
2. deodex 将odex文件转换为smali
示例:
java -jar baksmali-1.4.2.jar -a 7 -x /home/workspace/test1.odex -d /home/workspace/ -o /home/workspace/test1deodex

命令说明:
baksmali
-a <api_level>-x <odex_file>-d <framework_dir> -o <output_dir>
 
3. 将smali打包为dex
java -jar smali-1.4.2.jar /home/workspace/test1deodex/ -o /home/workspace/test1.dex
 
4. 将dex反编译为jar包
sh dex2jar.sh /home/workspace/test1.dex
 
拿到jar包后就能通过jd-gui看到反编译的代码了。
原文地址:https://www.cnblogs.com/yakashop/p/2918200.html