前言:记一次Android逆向操作。通过Android逆向去除恶意收费或其他功能等。
声明:本文仅用于开发者学习借鉴,不鼓励任何人进行破解、抄袭等违法行为!
需要用到的工具
一、APK反编译
1. 原理
APK即为AndroidPackage的缩写,也就是Android系统安装包。简单来说就是zip格式的压缩文件。将其解压可发现res文件夹(存放资源文件)、AndroidManifest.xml清单文件、META-INF文件夹(存放签名等信息文件)、classes.dex文件(由Java代码编译而成)。因此,反编译即为将classes.dex文件还原为java代码。本文使用jadx进行反编译。
2. 反编译
双击jadx-gui.bat启动,将对应的apk文件拖入即可。在左侧可以看到各类配置文件和由classes.dex及classes2.dex反编译而成的源代码。jadx主要的便利在于可以开启反混淆、CTRL单击跳转、全局搜索等等。我们还可以将其另存为Gradle项目并在Android Studio中进行编辑测试。为了避免麻烦的配置,本文采用apktool进行解码并在单个文件中进行编辑。
二、代码修改
打开命令行,或在下载的apktool文件夹内打开命令行,键入apktool
出现版本等一系列信息后即可正常使用。
1.解码
在命令行中键入apktool d myapk.apk -o apkfile
其中myapk.apk
为你需要解码的apk名称,-o apkfile
为输出到apkfile文件夹中。
2.修改
在文件夹中能看到各种资源文件和smali文件夹。Smali是Android虚拟机的反汇编语言。dex文件反编译之后就是Smali代码。因此要对源码改动,我们则需要修改smali文件。
在jadx反编译后的源代码中,我们可以清楚地看到java源代码,因此只要善于利用全局查找对照修改即可。当然,要对源代码进行复杂的变动,掌握Smali语言是必要的。
3.打包
修改完成后在命令行中键入apktool b apkfile -o newapk.apk
即可将文件夹打包成新的apk文件。
三、APK签名
1.生成密钥文件
使用keytool生成密钥文件(JDK1.4以后自带)
keytool -genkey -alias keystore -keyalg RSA -validity 36500 -keystore myapk.jks
详细说明:keytool -genkey -alias 【别名】 -keyalg 【加密算法】 -validity 【有效时间】 -keystore 【密钥文件名/密钥完整路径】
可以使用keytool -genkey --help
查看各个参数的帮助文档
2.进行V1+V2签名
解压下载的ApkSignTools.7z。双击运行ApkSignTools.exe。编辑密钥配置,其中的路径、密码、别名与先前生成的密钥一致。接着导入待签名Apk,选择新v1&v2签名,然后获取签名后的Apk即可。
Comments NOTHING