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

您所在的位置:网站首页 app修改版本号过官方检测吗是真的吗 APK反编译、重新打包、签名全过程

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

2024-07-14 17:55| 来源: 网络整理| 查看: 265

APK反编译、重新打包、签名全过程 前言代码查看神器jadxAPK解包打包工具apktoolAPK打包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!



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3