apktool工具用法,反编译、回编译、加密,以及修改AndroidManifest.xml

时间:2024-04-11 07:34:07

由于工作中需要用到这些东西,自己琢磨了半天,将流程记录下来,文采不好,望见谅。

如果要修改AndroidManifest.xml,如果直接拿到原apk文件进行修改,想想就算了不可能滴。

要修改AndroidManifest.xml需要将原apk进行反编译,编译出来之后则可以修改。

反编译和回编译需要使用到的工具有:

1 、apktool 2.0  和 apktool-install-windows-r04-brut1.tar.bz2(两个包缺一不可啊)

2、签名apk文件需要用到jdk环境,所以前提先安装jdk。 
签名文件需要用到keytool.exe和jarsigner.exe,这两个文件都在jdk的bin目录下: 

apktool工具用法,反编译、回编译、加密,以及修改AndroidManifest.xml

重重之重的环境就是安卓SDK

步骤以及用到的一些指令:

将1中的两个包解压到同一个文件夹下,总共会有三个文件:aapt.exe,apktool.bat,apktool.jar

在命令行下定位到apktool.bat文件夹,输入以下命令:使用命令行apktool d -f <apk_path> -o <outfile_path>,如下图:

apktool工具用法,反编译、回编译、加密,以及修改AndroidManifest.xml

<apk_path>:原apk文件所在目录

<outfile_path>:输出目标文件

另外,可能会出现如下错误:

apktool工具用法,反编译、回编译、加密,以及修改AndroidManifest.xml

问题1:WARNING:Could not write to (C:\Users\****\AppData\Local\apktool\framework), using C:\Users\WBB53E~1.WAN\AppData\Local\Temp\ instead...

解决办法:在C:\Users\****\AppData\Local自己创建\apktool\framework这个文件夹即可;

问题2:Exception in thread “main” java.lang.NullPointerException

解决办法:删除C:\Users\Administrator\apktool\framework\1.apk的apk文件即可

问题3:Exception in thread "main" brut.androlib.AndrolibException: Could not decode ars
c file

解决办法:apktool.jar的版本太低,如果使用高版本不会出现异常

反编译基本结束,然后你可以随心所欲修改里面的内容了,别改过分了

--------------------------------------------------------------------------------------------------------

开始回编译

特别注意:你要反编译的文件尽量要放在C盘的根目录里

使用命令行apktool b <outfile_path>

apktool工具用法,反编译、回编译、加密,以及修改AndroidManifest.xml

打包apk后的文件在目录C:\HelloAndroid下,生成了两个文件夹:

build

dist

其中,打包生成的HelloAndroid.apk,在上面的dist文件夹下,回编译OK,但是你现在去安装回编译的apk是不行的,会显示安装包损坏,安装失败,因为没有签名。。。

--------------------------------------------------------------------------------------------------------------

签名apk文件:

在2中已经提到连个工具就是利用jdk环境签名apk文件,在jdk中的bin运行cmd,直接敲入:

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

命令解释:

Keytool 选项 描述 
-genkey 产生一个键值对(公钥和私钥) 
-v 允许动作输出 
-alias 键的别名。只有前八位字符有效。 
-keyalg 产生键的加密算法。支持DSA和RSA。 
-keysize 产生键的长度。如果不支持,keytool用默认值1024 bits.通常我们用2048 bits 或更长的key。 
-dname 专有名称,描述谁创建的**。该值被用作自签名证书的颁发者和主题字段。注意你可以不在命令行指定。如果没有指定keytool会提示你(CN, 
OU, and so on)。 
-keypass 键的密码。 主要为了安全起见,如果没提供,keytool会提示你输入。 
-validity 键的有效期,单位:天 
-keystore.keystore 用于存储私钥的文件。 
-storepass 私钥存储文件的密码。 主要为了安全起见,如果没提供,keytool会提示你输入。这个密码不会存储在你的shell历史记录中。

回车后会让你输入一些东西,看着填就行了:

apktool工具用法,反编译、回编译、加密,以及修改AndroidManifest.xml

最后输入y确定。 

在当前目录下回生成一个key.keystore文件,就是所需要的签名。

现在签名和apk已经有了,接下来就是要合并了,用到2中的另外一个工具:jarsigner

命令如下:

jarsigner -verbose -keystore key.keystore -signedjar (原apk).apk (目标apk名字).apk key.keystore

注意空格!

命令行解释:

Jarsigner 选项 描述 
-keystore.keystore 包含你私钥的存储文件 
-verbose 显示输出动作。 
-sigalg 签名算法,用 SHA1withRSA. 
-digestalg 消息摘要算法,用 SHA1. 
-storepass 存储文件的密码。 主要为了安全起见,如果没提供,jarsigner会提示你输入。这个密码不会存储在你的shell历史记录中。 
-keypass 私钥的密码。 主要为了安全起见,如果没提供,jarsigner会提示你输入。这个密码不会存储在你的shell历史记录中。

最后回车,输入之前设置的密码,回车,就签名完毕了: 

apktool工具用法,反编译、回编译、加密,以及修改AndroidManifest.xml

OK,基本已经完工,修改后的apk就可以成功安装到设备上了。