APK反编译之二:工具介绍

作者:lpohvbe | http://blog.csdn.net/lpohvbe/article/details/7983907

前面一节我们说过,修改APK最终是通过修改smali来实现的,所以我们接下来介绍的工具就是如何把APK中的smali文件获取出来,当然同时也需要得到AndroidManifest.xml等文件。直接修改APK后缀为ZIP得到的xml文件是不能直接打开的,需要转换一下格式才能查看和修改。横观所有的工具中,最最最强大的当然还是ApkTool,所以下面后重点介绍!OK,开始正题。

一、查看xml文件

如果只是简单的需要查看xml中的内容(例如只是想看看AndroidManifest.xml中的配置信息、主启动Activity、permission权限或布局文件等等),那么可以使用AXMLPrinter2.jar这个工具。使用方法很简单,例如想查看AndroidManifest.xml文件内容,为了方便,把AndroidManifest.xml和AXMLPrinter2.jar放到同一个目录下,在cmd中定向到该目录并输入:

  1. java -jar AXMLPrinter2.jar AndroidManifest.xml > tmp.txt

则会在该目录下创建一个tmp.txt文档,内容就是解码后的AndroidManifest.xml的内容。

这个方法有个缺点就是只能查看,不能修改后再转换回原格式的xml文件,需要修改xml文件内容的,下面会有介绍。

二、查看java源代码

直接解压apk只得到Dalvik VM执行的classes.dex文件,要通过这个dex文件查看java源代码的话,需要使用dex2jarjd-gui这两个工具。

我下载的是官方版本的dex2jar-0.0.9.9,解压后可以看到一大堆的bat和shell脚本。不过我们只需要用到其中的d2j-dex2jar或dex2jar.bat(Windows下)。具体操作步骤是:

1、把需要反编译的apk文件后缀改为zip,解压后取出其中的classes.dex文件,为了方便还是放到dex2jar-0.0.9.9目录下(和dex2jar.bat同一目录);

2、打开cmd,定位到该目录后输入:

  1. d2j-dex2jar.bat  classes.dex

几秒后程序就会在该目录下生成了一个classes-dex2jar.jar文件,这个jar文件就是原java代码编译后产生的文件;

3、打开jd-gui软件,点击左上角的“Open a file”按钮并找到2步骤生成的classes-dex2jar.jar文件,找到你想查看的java文件,还原度还是挺高的。如果有需要把java代码保存下来,点击File-Save Sources或者Save All Sources把当前java文件或全部java文件保存起来。

注意的是,这些java代码(基本上)不能直接重新编译,因为可能存在代码混淆,而且复杂一点的逻辑有时候还原不回来,显示出很奇怪的代码,所以这个软件还不是很完善,但是用来参考原java代码逻辑够用了。

三、获取和修改smali文件

获取smali文件是反编译的第一步,获取的方法有两种:

1、baksmali.jar和smali.jar

baksmali.jar用来把dex或odex文件解析为一个一个的smali文件,使用命令:

  1. java -jar baksmali.jar -x classes.dex

它会在目录下生成一个文件夹(默认是out),里面保存的就是这个dex中的smali文件,我们可以打开查看和修改,修改完毕后,使用smali.jar打包回dex文件:

  1. java -jar smali.jar out -o classes.dex

其中out就是刚才使用baksmali.jar创建的文件夹名字。

这样修改后,直接放回zip中然后把后缀改为apk是不能直接安装到机子上测试的,因为你修改了里面的文件,还需要使用签名工具进行重新签名(稍后介绍)。

2、ApkTool——目前最强大的反编译工具

以上所有工作,除了查看java源代码,其实有一个工具可以帮你轻松做到,那就是由一个外国开发者制作的ApkTool.jar工具。它可以反编译apk中的资源文件、解码xml文件、生成smali文件,还能把修改后的工程逆向生成apk文件。换言之,有了它可以抛弃AXMLPrinter2.jar、smali.jar和baksmali.jar了,使用也相当的方便。

(1)、反编译apk得到smali和资源文件

例如要反编译的apk为zheshiyige.apk,那么把该apk与ApkTool放到同一目录,cmd执行:

  1. java -jar apktool.jar d zheshiyige.apk APKFiles

等待一段时间后(视乎apk文件大小),可以看到该目录下生成了一个APKFiles文件夹,里面就是我们需要的解码后的资源文件、xml文件和smali文件等。xml文件不需要再使用AXMLPrinter2.jar来解码即可直接查看。

(2)、回编译成apk文件

对反编译得到的文件进行修改后把它回编译也是很简单的:

  1. java -jar apktool.jar b APKFiles

同样等待一段时间后,如果修改正确没有错误的话,回编译产生的apk将会在APKFiles下的dist文件夹中,当然它也是没有重新签名的,不能直接安装使用。

四、对Apk进行签名

关于签名,可以有些童鞋会感到疑惑,下面先简要提一提:

1、为什么需要签名?

(1)发送者的身份认证,由于开发商可能通过使用相同的PackageName来混淆替换已经安装的程序,以此保证签名不同的包不被替换;

(2)保证信息传输的完整性,签名对于包中的每个文件进行处理,以此确保包中内容不被替换,防止交易中的抵赖发生,Market对软件的要求。

2、签名的一些说明

(1)所有的应用程序都必须有数字证书,Android系统不会安装一个没有数字证书的应用程序;

(2)Android程序包使用的数字证书可以是自签名的,不需要一个权威的数字证书机构签名认证;

(3)如果要正式发布一个Android应用,必须使用一个合适的私钥生成的数字证书来给程序签名,而不能使用adt插件或者ant工具生成的调试证书来发布;

(4)数字证书都是有有效期的,Android只是在应用程序安装的时候才会检查证书的有效期。如果程序已经安装在系统中,即使证书过期也不会影响程序的正常功能;

(5)Android将数字证书用来标识应用程序的作者和在应用程序之间建立信任关系,而不是用来决定最终用户可以安装哪些应用程序;

(6)签名后需使用zipalign优化程序。

3、如何签名

签名工具有不少,这里仅提及其中的一个:signapk.jar。signapk.jar本来就是包含在android源码包中的一个工具,用它可以把上面经过反编译-回编译后得到的apk进行签名,由于直接使用signapk.jar进行签名很麻烦,而且最终使用的是下面最后谈及的综合工具,所以这里仅提及签名流程:

(1)、使用OpenSSL生成公钥/私钥对;

(2)、使用signapk.jar和(1)的公私玥对对apk进行签名。

这样经过签名后的apk才能安装到设备上进行测试。

五、推荐一个网友制作的综合工具:ApkTool + SignApk

程序员是最怕麻烦的,所以早就有网友用脚本把所有操作都帮我们整理好了,它其实就是帮我们做好了自动反编译、自动回编译和签名的工作,不用再每一次都输入大串的命令。需要下载的请点击下面的链接,使用方式直接打开就知道,说明中已经说得很明白了。

==工具下载链接请戳我== 

六、其他辅助工具

      1、UltraFileSearch:这是个很!有!用!的软件!UltraFileSearch 允许你指定多个文件掩码和多驱动器和/或文件夹在同一时间,它能够整理出的文件和文件夹根据自己的性质(如更新日期),找到其中包含某特定词或句子的所有文件。

2、如果使用NotePad++修改smali文件,推荐使用一个语法高亮文件userDefineLang.xml,使用方法:放置到C:\Users\<用户名>\AppData\Roaming\Notepad++下即可。

 

Reference:

Android apk 签名: http://www.cnblogs.com/not-code/archive/2011/05/15/2047057.html

原文地址:https://www.cnblogs.com/eustoma/p/8993243.html

时间: 2024-08-06 21:49:31

APK反编译之二:工具介绍的相关文章

linux下的APK反编译软件及过程介绍

需要工具: 1.apktool apk打包工具 下载地址:http://android-apktool.googlecode.com/files/apktool1.5.2.tar.bz2 安装:直接解压即可,是一个apktool.jar文件,通过 $java -jar apktool.jar 来运行,依赖于java运行环境 2.dex2jar dex转化jar工具 下载地址:http://dex2jar.googlecode.com/files/dex2jar-0.0.9.15.zip 安装:直

Android反编译和二次打包

参考:APK反编译 一.工具介绍: 1.解压工具 2.JDK 3.apktool: aapt.exe,apktool.bat,apktool.jar;三个在同一目录结合使用,用来反编译apk,反编译生成smali字节码文件,提取apk中的资源文件,apk重新打包. 4.dex2jar:该工具作用是将classes.dex文件,翻译出程序的源代码.图片.XML配置.语言资源等文件(如果apk未加固),反编译出文件,使用jd-gui工具进行查看: 5.jarsigner.exe:签名工具,将重新打包

APK Multi-Tool强大的APK反编译工具终极教程

一.APK Multi-Tool介绍    APK Multi-Tool 是APK Manager的升级版,是一个强大的APK反编译工具,集多种功能于一身,是居家必备.做ROM必选的工具!    这是一个比较方便的适合非开发者的小工具,可以对一些APK程序做自己喜欢的修改!    目前官方最新版是APK Multi-Tool 1.0.3 ,官方网站是:http://apkmultitool.com 二.汉化说明    此版本基于官方 APK Multi-Tool 1.0.3 (05/17/201

APK反编译得工具总结(转载)

Android反编译技术总结 转自UncleChen's Blog,作者:UncleChen 一.Apk反编译工具及其使用方法 1.原理 学习反编译之前,建议先学习一下Apk打包的过程,明白打包完成后的Apk里面都有什么文件,各种文件都是怎么生成的. 这里有两篇AndroidWeekly中推荐过的好文章: 浅析 Android 打包流程 Android构建过程分析 Apk技术也有非常多的技术可以学习,主要都是围绕着如何减小体积,如何提高打包速度展开,这里先不多说了.下面是一张基本的Apk文件结构

android APK反编译工具的使用及工具下载(mac)

工具名称.介绍及下载地址: apktool(获取资源文件) 作用:获取资源文件,可以提取出图片文件和布局文件进行使用查看. 下载地址: dex2jar(获取源码文件) 作用:将apk反编译成java源码(classes.dex转化成jar文件). 下载地址: jd-gui(查看源码) 作用:查看APK中classes.dex转化成出的jar文件,即源码文件 下载地址: 反编译流程: 一.apk反编译得到程序的源代码.图片.XML配置.语言资源等文件 下载上述工具中的apktool,解压得到3个文

Android APK反编译教程(带工具)

工具介绍:工具下载 apktool     作用:资源文件获取,可以提取出图片文件和布局文件进行使用查看 dex2jar    作用:将apk反编译成java源码(classes.dex转化成jar文件) jd-gui       作用:查看APK中classes.dex转化成出的jar文件,即源码文件 反编译教程: apk反编译得到程序的源代码.图片.XML配置.语言资源等文件 下载上述工具中的apktool,解压得到3个文件:aapt.exe,apktool.bat,apktool.jar

安卓应用反编译(二)-APK包反编译

第二章 APK包反编译 被编译器处理过的代码和资源已经打包成了APK,有的甚至被转化成了二进制文件.但是我们也有一些方法,把这些编译过的内容给变回原来的样子,这个过程叫做-反编译. 反编译分为两个部分:一个是资源文件,一个是java文件.so文件是c++编译的结果,可以认为是不可反编译的(反编译成汇编指令,估计大部分人也看不懂). 2.1 反编译资源文件 APK tool是反编译的有力工具,据说是谷歌提供的官方的反编译工具,可以把APK目录解包,资源文件全部还原成编译前的样子,而dex文件反编译

apk反编译工具

反编译工具: apktool:资源文件获取,可以提取出图片文件和布局文件进行使用查看 dex2jar:将apk反编译成Java源码(classes.dex转化成jar文件) jd-gui:查看APK中classes.dex转化成出的jar文件,即源码文件 使用步骤: 1.apk反编译得到程序的源代码.图片.XML配置.语言资源 在cmd中定位到apktool所在文件夹下,输入命令apktool.bat d -f  xx.apk(apk名字)  xx(生成文件存放位置). apktool.bat

Android APK反编译就这么简单 详解(附图)

在学习Android开发的过程你,你往往会去借鉴别人的应用是怎么开发的,那些漂亮的动画和精致的布局可能会让你爱不释手,作为一个开发者,你可能会很想知道这些效果界面是怎么去实现的,这时,你便可以对改应用的APK进行反编译查看.下面是我参考了一些文章后简单的教程详解. (注:反编译不是让各位开发者去对一个应用破解搞重装什么的,主要目的是为了促进开发者学习,借鉴好的代码,提升自我开发水平.) 测试环境: win 7 使用工具: CSDN上下载地址: apktool (资源文件获取)  下载