信安报告|APK二次打包

概念

二次打包的概念,即对已经编译发布的apk文件,即已经使用签名文件进行正式签名的应用文件进行自己的修改之后,再次签名打包发布的过程称为二次打包。


实验

工具准备

环境准备:Java 和 adb

工具准备:

adb/android-sdk

dex2jar

jd-gui

apktool.jar

apktool.bat(需要自己制作,代码如下)

--代码分割线--

@echo off

if "%PATH_BASE%" == "" set PATH_BASE=%PATH%

set PATH=%CD%;%PATH_BASE%;

java -jar -Duser.language=en "%~dp0\apktool.jar" %1 %2 %3 %4 %5 %6 %7 %8 %9

--代码分割线--

keytool(包含在Java/jdk/bin/目录下)

jarsigner(包含在Java/jdk/bin/目录下)

signedjar(包含在Java/jdk/bin/目录下)

查看APK文件目录结构

电脑连接手机,打开手机的开发者模式和usb调试功能,手机切换到APP的界面,在命令行中键入以下命令:

adb shell dumpsys activity activities

查看APK文件目录结构

查看Java源码

下载APP的apk文件,将后缀名apk改为zip,再进行解压缩,其中包含dex文件,它是我们反编译的目标,以classes.dex为例。

将classes.dex置于dex2jar文件夹目录下,在命令行键入以下命令:

d2j-dex2jar classes.dex

其将会生成classes-dex2jar.jar和classes-error.zip两个文件。

使用jd-gui工具打开classes-dex2jar.jar文件,即可查看APK文件的Java源码,并进行分析。

修改smail代码并重新生成dex文件

将原来的APK文件与apktool.jar置于同一目录下,在命令行键入以下命令:

java -jar apktool.jar d [文件名].apk

其将在当前目录下生成一个smail文件夹,根据分析的Java源码修改smail文件。

将修改好的smail文件夹与apktool.batapktool.jar置于同一文件夹下,在命令行键入以下命令:

apktool.bat b [文件夹名]

一般来说在其smail文件夹下会生成两个文件夹,分别名为dist和build。

dist中存着修改后的apk,若dist没有生成,可以将build下生成的dex文件替换原先的dex文件(替换方法:将apk文件修改为zip再解压,进行替换)。

重签名

打开zip解压生成的文件夹,找到META-INF文件夹,删除其子目录下MANIFEST.MF之外的所有其他文件。

之后,将所有文件重新压缩成zip文件,然后修改后缀名zipapk

将修改后的apk文件置于Java\jdk\bin\目录下,在命令行键入以下命令:

keytool -genkey -alias androidauto.keystore -keyalg RSA -validity 20000 -keystore android.keystore

信安报告|APK二次打包

其将会生成自签名证书,其中**库口令和名字必填。

Java\jdk\bin\目录下的命令行中输入:

jarsigner -keystore android.keystore -storepass [**库口令] -signedjar [签名后的文件名].apk [未签名的文件名].apk androidauto.keystore