安卓apk反编译、修改、重新打包、签名全过程

首先明确,反编译别人apk是一件不厚道的事情。代码是程序员辛苦工作的成果,想通过这种手段不劳而获,是不对的。这也说明,代码混淆是非常重要的。本文抱着学习的态度,研究在一些特殊的情况下如果有需要,该怎么反编译apk。

工具简介

apktool,编译和反编译apk,从apk中提取图片和布局资源

dex2jar,将可运行文件classes.dex反编译为jar源码文件

jd-gui,查看jar源码文件

反编译

apktool安装

Windows系统:

1. 首先确保系统安装有Java

2. 下载apktool.bat脚本

3. 下载最新版本的apktool.jar,并且重命名为apktool.jar

4. 将apktool.bat和apktool.jar放在同一目录下,就可以在命令行窗口使用了。

5. 其他系统请参考链接

用法

可以直接在命令行执行apktool.bat查看帮助。这里介绍两个最常用的:

反编译

apktool.bat d [-s] -f <apkPath> -o <folderPath>

注:若不选择文件夹路径直接输 :apktool.bat d -f 1.apk -o 1 将默认生成在系统目录C:\Users\Administrator;

一. 这里需要用到另外两个工具,下载dex2jar并解压。下载jd-gui,这是一个带UI的应用程序。

二. 将需要反编译的apk的后缀名改为.zip或者.rar,然后解压到一个文件夹,得到其中的classes.dex文件。

三. 将classes.dex复制到解压后的dex2jar-2.0文件夹下。从命令行进入到该目录,执行

d2j-dex2jar.bat classes.dex

会生成由classes.dex反编译得到的jar文件,classes-dex2jar.jar。

四. 然后使用jd-gui打开classes-dex2jar.jar,就可以查看源码了。

如果apk在发布的时候加过混淆处理,那么我们也只能得到混淆后的版本。想通过阅读源码来破解别人的apk,难度较大,不过有兴趣可以网上去研究。

修改代码

如果只修改apk相应的资源,那么只要在res文件夹下找到相应的文件替换。

修改代码比较麻烦,因为反编译出来的结果中只有smali文件,即Java虚拟机支持的汇编语言。

如果确实需要修改代码,就得对照smali文件和从classes.dex反编译出来的源码了,按照smali的规范来改动即可。相当于写汇编,难度较大。

五.签名apk文件:

(如何查看签名信息:将签名后的apk文件后缀名改为zip,然后将里面的META-INF文件夹解压出来:输入命令:keytool -printcert –file <签名文件RSA的路径>)

签名文件需要用到keytool.exe和jarsigner.exe,这两个文件都在Java jdk的bin目录下:

1,打开命令行输入以下命令然后回车:

keytool -genkey -alias key.keystore -keyalg RSA -validity 30000 -keystore key.keystore

-genkey 产生证书文件
-alias 产生别名
-keystore 指定密钥库的.keystore文件中
-keyalg 指定密钥的算法,这里指定为RSA(非对称密钥算法)
-validity 为证书有效天数,这里我们写的是30000天

出现如下图所示随便照着填填

2,生成出来的keystore要与apk在同一目录下(一般都默认在系统目录没有修改路径的话C:\Users\Administrator)

命令行再输入以下命令然后回车:

jarsigner -verbose -keystore key.keystore -signedjar xxx-signed.apk xxx-unsigned.apk key.keystore

xxx-signed.apk 指签名后的apk文件名
xxx-unsigned.apk 原来的apk文件名
-verbose 指定生成详细输出 
-keystore 指定数字证书存储路径

这样,就完成了对一个apk的签名过程,然后就可以安装使用了。注意如果你的手机上原来就有这个apk,需先卸载,不然无法安装。

发表评论

电子邮件地址不会被公开。 必填项已用*标注