反编译.dex文件

version m5

以 Contacts程序为例,解释
1. Contacts程序的位置
2. Contacts程序的classes.dex的位置
3. 导出class
4. 反编译

Contacts.App就是模拟器里的联络人程序,google还没有发布源码,想在里面改些东西,文档里并无明示,就只好自己找源码了。

1. 找到Contacts.App的位置
自带的程序都在/system/app下

$ adb shell
# cd /system/app
# ls
GoogleAppsProvider.apk
MasfProxyService.apk
MediaProvider.apk
SettingsProvider.apk
TelephonyProvider.apk
ContactsProvider.apk
Browser.apk
Contacts.apk
Development.apk
Fallback.apk
GTalkSettings.apk
Home.apk
GoogleApps.apk
Maps.apk
Phone.apk
ImProvider.apk
gtalkservice.apk

Contacts.apk就是Contacts程序,ContactsProvider.apk提供Contact Content Provider(content://contacts/)对联络人的读与写。

可以用adb pull把这些包抓出来。实际上它就是个zip包,里面包含有这样的目录结构

META-INF/
res/
AndroidManifest.xml
classes.dex
resources.arsc

classes.dex即是编译后的代码。不过里面所有的xml文档皆不可读,只有res下的一些图片可以看到。

2. classes.dex的位置
Dalvik的缓存里面存有classes.dex的副本,我们也可以访问他们。

# cd /data/dalvik-cache
# ls
system@framework@core.jar@classes.dex
system@framework@ext.jar@classes.dex
system@framework@framework.jar@classes.dex
system@framework@framework-tests.jar@classes.dex
system@app@Browser.apk@classes.dex
system@app@Contacts.apk@classes.dex
system@app@Development.apk@classes.dex
system@app@Fallback.apk@classes.dex
system@app@GTalkSettings.apk@classes.dex
system@app@GoogleApps.apk@classes.dex
system@app@GoogleAppsProvider.apk@classes.dex
system@app@Home.apk@classes.dex
system@app@ImProvider.apk@classes.dex
system@app@Maps.apk@classes.dex
system@app@MasfProxyService.apk@classes.dex
system@app@MediaProvider.apk@classes.dex
system@app@Phone.apk@classes.dex
system@app@SettingsProvider.apk@classes.dex
system@app@TelephonyProvider.apk@classes.dex
system@app@gtalkservice.apk@classes.dex
system@app@ContactsProvider.apk@classes.dex

3. 导出class
这里的.dex并不是.jar文件,他是Dalvik自己定义优化的可执行文件,所以也不能直接把他看成jar导出。模拟器里提供了一个叫做dexdump的工具。

# dexdump
dexdump: no file specified
Copyright (C) 2007 Google, Inc.

dexdump: [-d] [-f] [-h] dexfile...

-d : disassemble code sections
-f : display summary information from file header
-h : display file header details

用他就可以把可读的class导出了

# dexdump -d -f -h system@app@Contacts.apk@classes.dex >> Contacts.apk.dump
# dexdump -d -f -h system@app@ContactsProvider.apk@classes.dex >> ContactsProvider.apk.dump

得到的两个文件Contacts.apk.dump和ContactsProvider.apk.dump。然后将之pull出来

4. 反编译
MS还没人找到把他反编了的办法,不过里面好像还有那么点意思,就是读起来费劲了点。
至于xml文件的格式,据说是叫做 wbxml,二进制xml文件,怎么转回来正在研究中。

reference

How to decompile .dex file on Android

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值