APK反编译、重新打包、签名全过程

APK反编译、重新打包、签名全过程

  • 前言
    • 代码查看神器jadx
    • APK解包打包工具apktool
    • APK打包
    • APK签名

前言

  这几天突然对我手机里某个小作坊APP很感兴趣,想改一点点内容,让他不能监视我(你懂的!嘿嘿),所以把我经历的反编译到重新打包整个过程记录下来,希望对喜欢折腾这方面的同学感兴趣,也可以互相交流,增长经验。
  我们平常下载的APP理论上来讲都能反编译,但并不是说你反编译了就能无限魔改了。APP都有反混淆机制,所以我们反编译看到的代码都是混淆代码,有的穿插着大量无用代码,有的将函数做了加密机制,所以读起来很困难。除非你是个狂热爱好者,一般人应该不会进行大改。
  主要用到两个工具就可以完成所有工作,jadx和apktool。

代码查看神器jadx

  这个神器操作非常简单,只要把你想反编译的APK拖进gui界面就行了。关于怎么样安装,请点链接: jadx下载地址。我是linux,安装好后打开bin目录下的jadx-gui界面就是下面这个样子:jadx截图
  因为加入了混淆机制,所以左侧的项目结构比较混乱,需要靠你的Ctrl+f的能力了。本身jadx也支持点击函数跳转功能,已经很不错了。这个工具的目的是让你能看到可读的代码,并不是用来修改和打包的,如果想要修改和打包,就要用到下一个工具:apktool。

APK解包打包工具apktool

  安装说明直接进入官方链接: apktool官方安装页面,根据你自己的系统下载对应的版本。
  首先,执行以下命令来将你要修改的apk解包:

apktool d 原APK.apk -o 文件名

  d代表解包,原APK.apk就是你要解包的APK,默认当前文件夹下,可以根据自己的APK位置修改。
  -o代表解包输出位置,文件名自己定义,如果不写路径就是当前文件夹下。
  执行完上面命令后生成一个文件夹,里面文件大致就是这个样子:
      apktool解包后截图
  AndroidManifest.xml就是大家比较了解的声明文件,核心代码都集中在smali文件夹里,有的apk解析完后smali是分很多个的,因为代码文件太大,一个smali装不下,要分包处理。res文件夹就是对应资源文件了,包括string.xml都在里面。估计一般大家用到的也就这几个文件。
  用VS code可以打开看下,smali文件夹里全是后缀为smali的文件,都是根据源代码编译过的,仔细读下还是能看明白的。而且根据上一节jadx看到的源代码,都可以对应到相关的smali文件代码。根据你自己的需求修改内容吧。
  如果你想了解下smali语法,可以看这篇文章:smali文件语法手册
在这里插入图片描述

APK打包

  修改完你的代码后,接下来就是重新打包了,执行以下语句打包:

apktool b APK文件名 -o my.apk

  b代表打包,APK文件名就是你要打包的整个文件名,默认当前文件夹下,可以根据自己的位置修改。
  -o代表打包输出位置,默认当前文件夹下,根据自己的位置修改,my.apk为你自定义的打包后的apk名字。
  至此,你已经成功90%。虽然你已经生成了自己的APK,但是它是不能安装的,因为还需要做签名。

APK签名

1.keytool工具生成keystore文件
  安装了JDK后,自带keytool工具,可以在命令行下输入keytool看到说明:
      keytool工具
  OK,那么输入下面的命令生成keystore文件。

keytool -genkey -alias 1.keystore -keyalg RSA -validity 36500 -keystore 2.keystore

  其中,1.keystore是别名,因为因一个证书库中可以存放多个证书,通过别名标识证书。RSA是密钥算法,可以选择的密钥算法有:RSA、DSA、EC。36500是证书有效天数,我这里相当于100年。2.keystore是当前生成的证书。命令回车后会让你填口令、姓氏、单位名称等信息,随便填就好了,最后y确认就生成了证书。类似于下面这个样子:
    keystore生成
  接下来使用JDK自带工具jarsigner进行签名(只支持V1签名)。如果你想兼容V2签名,可以用Android Studio的自带工具apksigner(比较麻烦,还得装Android Studio,请自行搜索相关教程),反正我用V1签名也是能安装的。把你重新打包好的APK准备好,输入以下命令进行签名:

jarsigner -verbose -keystore 2.keystore -signedjar my_signed.apk my.apk 1.keystore

  其中,2.keystore就是上一步生成的证书名, my_signed.apk是签名后的APK,名称自定义。my.apk是上一节重新打包的APK,1.keystore是上一步的keystore的别名。回车后根据提示输入上一步的口令就生成了签名APK:my_signed.apk。
  接下来就把my_signed.apk扔到你手机上安装吧!哈哈,是不是很easy!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

greatsam

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值