Android APK文件拆解方法

Android APK文件拆解方法

以下操作皆在Win环境下完成,默认已经安装了Android开发的需要各种杂七杂八的东西(其实这里需要只是JRE而已……)。

1 解压apk文件。 apk文件实质上只是一个压缩包,所以随便用点winrar什么的解开就好。通常会得到以下一些东西: AndroidManifest.xml classes.dex \META-INF \res 在Android App开发中的你看到Manifest文件是不是很亲切呢。不过很遗憾,这里的xml文件是经过格式化(或者叫序列化……爱谁谁)的,自然是没办法阅读。classes.dex则是Android使用的Dalvic虚拟机所支持的字节码文件,当然也是没法读的。\res里主要保留了一些资源文件,drawable里的图片基本是原封不动的保留下来了,而各种xml文件则和AndroidManifest.xml一样变成了不易读的格式。\META-INF里的东西暂时不用理会。 Android App开发的过程中打交道最多的自然是各种java类和对应的各种xml设定文件了。要拆解apk文件,最终目的当然是取得java文本和xml文本(图片什么的算是福利吧= =+)。So we begin.

2 取得java文本 Google为我们指出了一条康庄大道:把dex文件反编译为jar文件。工具地址在http://code.google.com/p/dex2jar/。这是一个命令行工具,解压后cmd进入其目录,可以看到dex2jar.bat这样一个批处理文件。最简单的命令使用格式是: dex2jar \classes.dex 如此,在classes.dex所在的目录下就生成了你所需要的jar文件,其文件名通常为classes.dex.dex2jar.jar。不过,到这里得到的jar文件依然是不易读的,此时进入下一步骤:Java Decompiler。工具地址在http://java.decompiler.free.fr/,截至目前其版本号是0.3.3。通过这个工具打开刚才得到jar文件,便可以通过一个与Eclipse环境类似的UI中一窥各种java文本的全貌了。

3 取得xml文本 依然是Google……写到这里不由得出了一身冷汗。APKTool,工具地址在http://code.google.com/p/android-apktool/。同样属于命令行工具,Win环境的各位需要下载的是apltool和apktool-install-windows两个文档。下载之后把所有的文件都解压到同一个目录下,即保证appt.exe、apktool.bat、apktool.jar三个文件在一起。这时通过cmd进入其所在目录,最简单的命令使用格式是: apktool d 这样apktool就会把apk文件解开到target路径中。\res目录中的东西基本可以看做是原装的,包括需要参考的各种xml文本;而java文本则被其转译成了一种后缀为smali的文件,虽然没有之前得到的java文本直观,不过在某些特殊情况下还是具备参考意义。

以上dex2jar和apktool两个工具的牛逼用法留待各位牛人自行折腾罢!

在Android Emulator中可以找到一个名为dexdump的程序

首先要把apk的class.dex dump出来、 :

具体步骤:1.用winrar或者winzip打开apk,直接拖出来。

2.用android sdk1.1版本以上的一个dexdump工具把class.dex文件dump成文本:

把刚才的class.dex文件放在和dexdump工具同目录 用命令窗口执行 :

dexdump.exe -d classes.dex > spk.dump.txt

意思是将classes.dex dump出来 形成一个txt文件。

下一步就要读懂这个txt文件了,先从header中可以看清楚这个应用的总体信息,有几个类,包括内部类 ,header只是了解概况。要详细去分析下面的每一个class才能真正理解这个软件的设计过程。最好的方法是一边研究里面的opcode一边打开api来查看里面调用到的类和方法,减少误解的机率。。

opcode就是介于高级编程语言和二进制代码之间的一层中间码,operation

code 叫操作码。读懂opcode主要是熟悉里面的逻辑跳转以及一些个别助记符的含义。。

通过opcode你就可以清晰的知道里面每个方法资源的调用过程和逻辑跳转过程。做过的例子都有点复杂,就不举例了。。当然,要破解整个apk最好是翻译opcode和应HexWorkShop查看资源文件相结合比较合理和轻松,尤其是ManiFest.xml这个文件,一定要看清楚里面的activity和service receiver,permissions 这几个部分的信息,这可能会成为整个破译流程的关键部分 。。。能够说的经验暂时就只有这么多,正着手写一个工具专门用来翻译opcode成java代码。。这是一个复杂的过程,普通的资源调用只需要匹配相关的文本就能翻译过来,但是一些复杂的跳转和个别特殊表达式需要费时费力去想

相关推荐

airpods镌刻一般几天发货
365bet娱乐app

airpods镌刻一般几天发货

📅 09-04 👀 3624
正在阅读:整合平台新主力 APU A8-5600K性能测试整合平台新主力 APU A8-5600K性能测试
手游异界套怎么做?如何快速打造?
365bet娱乐app

手游异界套怎么做?如何快速打造?

📅 09-06 👀 7783
奶酪魏:在街边尝一口旧时宫廷的味道
365bet娱乐app

奶酪魏:在街边尝一口旧时宫廷的味道

📅 07-22 👀 439
怎么剥生菱角小窍门 古代剥菱角的方法?
365网站平台网址

怎么剥生菱角小窍门 古代剥菱角的方法?

📅 08-22 👀 7687
2021埃及足球世界排名:第46,积分1432(附队员名单)
羹的五笔怎么打?
365网站平台网址

羹的五笔怎么打?

📅 07-08 👀 8208
企业年金一般交多少?
365bet娱乐app

企业年金一般交多少?

📅 07-05 👀 1488
点点借款宽限几天:放款时间、条件与失败后的再借问题