apk反编译与apk重建

前言

本文记录知识点:apktool工具的使用,包括apk的反编译和apk的重建;apk的重签名和签名密钥库的自定义生成。

apktool的下载和使用

  1. 在任意目录下新建文件夹,并取名apktool(随意),在官网上下载对应的apktool.bat和apktool.jar文件。
  2. (官网链接:https://ibotpeaches.github.io/Apktool/install/)
  3. 把下载的jar文件改名为apktool.jar(因为下载的jar包是带版本的,如apktool.2.4.0.jar),并将两个文件放在apktool文件夹下(任意文件夹都可以,只要同目录);
  4. 因为bat文件中使用了jar包,所以我们可以ctr+r打开命令行窗口,并进入apktool文件夹目录,运行bat文件进行对应操作;
  5. 把要反编译的apk放入apktool文件夹;
  6. 在命令行输入命令apktool.bat d -f xxx.apk,即可把apk反编译,生成的工程放在apktool目录下,可查看和修改。生成工程的目录可在上述命令后补充,不写,默认在同目录下;
  7. 在查看或者修改完成之后,可以重建apk。在命令行输入apktool.bat b -f xxx,即可在反编译得到的工程目录的dist子目录下,找到重建的apk;
  8. 除了上述指令外,可自行在apktool的官网查看更多不同作用的指令;
  9. 截图展示:
    apktool工具目录:
    目录展示
    反编译apk命令:
    在这里插入图片描述
    重建apk命令:
    在这里插入图片描述
    apk生成目录:
    在这里插入图片描述

apk重签名

因为重建的apk不再拥有之前的签名,所以会安装失败。解决方案就是给apk重新签名。给apk签名需要有签名密钥,所以我们先生成密钥,再给apk进行签名。需要注意的是,不同版本的jdk,对应生成密钥的命令不同,签名的命令也不同,所以在进行生成密钥和重签名时,要使用jdk对应的命令。现在用jdk1.8版本举例。

自定义签名密钥

我们可以利用jdk生成自定义的密钥库,步骤:
1.管理员打开命令行窗口。win10在所有程序中展开windows系统,右键命令提示符,以管理员权限打开,其他系统在附件里面找到命令提示符。
2.keytool -genkey -alias android -keyalg RSA -validity 20000 -keystore android.keystore
3.命令窗口进入到jdk的bin目录,并输入上述命令,根据提示填写对应信息,遇到是否确认,填写y,回车。-validity 2000代表有效期天数,需要输入密码时,默认密码为android,输入时不要用输入法,密码输入时时看不见的,正常出入就行,命令完成后,bin目录中会生成android.keystore。

重签名

我们可以用jdk的bin目录中的jarsigner对sdk进行重签名,步骤:
1.命令窗口进入jdk的bin目录,使用1.8命令:jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore android.keystore -storepass android -signedjar my_apk_sign.apk my_apk_unsign.apk alias_name
2.注意JDK1.8 算法发生了变化,需要指定 -sigalg 和 -digestalg
3.android.keystore是之前生成的自定义keystore,my_apk_unsign.apk为需要重签名的sdk,my_apk_sign.apk为新生成的已签名的sdk名称,它会生成在对应目录下,alias_name为密钥密码,默认为android。

截图展示

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

拓展

如果我们想简单的查看sdk中的文件信息,比如androidmanifest.xml的信息,我们可以直接把sdk的后缀改在rar,将sdk变成压缩文件进行查看。但是解压后androidmanifest.xml文件是乱码,我们可以用对应工具进行解码,解码工具为AXMLPrinter2,它是个jar包,需要安装java运行库才能运行。执行命令为:java -jar AXMLPrinter2 AndroidManifest.xml > AndroidManifest.txt,在对应目录下找到新生成的txt文件,就能正常查看了。

猜你喜欢

转载自blog.csdn.net/u014146238/article/details/96477461