实验课程

THIS NAME

实验课程

当前位置: 首页 >> 实验课程 >> 正文

移动安全-使用APKTool反编译APK实验

发布日期:2024-03-05    作者:张旭     来源:     点击:

使用APKTool反编译APK实验

一、实验目的

学习使用 ApkTool 反汇编工具的方法,査看反汇编文件的目录结构,学习 Smali 语言的基本语法,并通过案例初步认识 apk 破解的过程。

二、实验环境与设备

操作系统:Windows Sever 2012 R2

其他:adt-bundle-windows,ApkTool,signapk

拓扑如下图。

17685

1

三、实验内容

1安装Apktool

apktool.bat apktool.jar 放到任一同级目录下

E:\Applications\Apktool

添加该目录路径到 Path 环境变量

右键此电脑->属性->系统->高级系统设置->高级->环境变量,打开环境变量

修改 Path 变量,添加 E:\Applications\Apktool到变量中

undefined

2

验证是否安装成功

打开cmd,输入apktool 命令,显示如下图,表示安装成功:

undefined

3

2. 使用Apktool

配置Java环境要想使用Apktool工具,必须先配置Java环境,需要安装JDK 1.8以上的版本。JDK的安装与配置:Java环境搭建,配置环境变量准备一个apk文件用于反编译的练习

A010

4

apk文件打开后样式如下:

undefined

5

反编译Apk文件

反编译apk文件分为四步:

解包apk文件

对解包后的apk文件进行修改

重新打包apk文件

apk文件进行签名(签名以后才能够安装到手机)

解包Apk文件

切换到apk所在的路径,并输入以下命令,解压apk文件到当前文件夹:

apktool d app-release.apk

apktool d app-release.apk

显示如下图,表示解压成功:

undefined

6

解压后在app-release.apk文件的同级目录下,得到同名文件夹 app-release

undefined

7

修改Apk文件

反编译的目的就是为了修改原来的apk文件,修改成自己想要的样子。

原先的的apk样式为红色的 Hello World!,此处我想修改成蓝色的 Hello Android!,步骤如下:

1.使用 vscode 打开 app-release 文件夹,找到路径 res/layout/activity_main.xml,修改其中的颜色和文本代码如下:

android:textColor="#0000FF"

android:text="Hello Android!"

android:textColor="#0000FF"

android:text="Hello Android!"

2.修改后的 activity_main.xml 文件内容如下

undefined

8

undefined

9

打包Apk文件

1.META-INF文件夹,这里面包含旧的签名文件,用不到该文件夹,因此删除它

undefined

10

2.使用以下命令打包文件夹,生成新的apk文件

apktool b app-release

apktool b app-release

undefined

11

undefined

12

签名Apk文件

1.生成密钥库文件,即keystore文件

使用以下命令生成keystore文件:

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

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

以上各个参数的含义如下:

-genkey:这个参数表示keytool要生成一个新的密钥对和一个自签名的证书

-alias android_keystore:这个参数指定了生成的密钥对和证书的别名(alias),此处别名为android_keystore,这个别名在密钥库中用于唯一标识这个特定的密钥对和证书

-keyalg RSA:这个参数指定了用于生成密钥对的算法,即RSA算法。RSA是一种广泛使用的非对称加密算法,它使用一对密钥:一个公钥用于加密数据,另一个私钥用于解密数据

-validity 20000:这个参数设置了证书的有效期,以天为单位,此处证书的有效期是20000

-keystore android.keystore:这个参数指定了密钥库(keystore)的文件名,即android.keystore。密钥库是一个用于存储密钥对和证书的数据库文件

当使用keytool生成密钥对和证书时,命令执行过程需要输入信息:

密钥库的密码:此处我填写为 123456

密钥对和证书的所有者姓名、组织单位、城市或地区、省//郡、国家代码等,这些信息将被包含在生成的证书中,用于标识证书的所有者。

undefined

13

此时就在当前目录下,生成了一个android.keystore文件:

2.将刚刚生成的android.keystore文件,拷贝到未签名的apk文件同级目录下,切换到该路径下,输入以下命令,进行签名:

jarsigner -verbose -keystore android.keystore -signedjar app-release-signed.apk app-release.apk android_keystore

jarsigner -verbose -keystore android.keystore -signedjar app-release-signed.apk app-release.apk android_keystore

以上各个参数的含义如下:

jarsigner:这是 Java 开发工具包 (JDK) 中的一个工具,用于对 JAR 文件、APK 文件等进行签名

-verbose:这个参数用于输出详细的签名过程,当使用这个参数时,jarsigner 会显示更多关于签名步骤的信息,这有助于调试和了解签名过程的具体情况

-keystore android.keystore:这个参数指定了密钥库文件的路径和名称,即 android.keystore

-signedjar app-release-signed.apk app-release.apk:这个参数指定了签名后的 APK 文件的输出路径和名称,即 app-release-signed.apk,这个文件是原始 APK 文件 app-release.apk 经过签名后的结果

android_keystore:这个参数指定了密钥库中用于签名的密钥对的别名,别名是在使用 keytool 生成密钥对时指定的,它用于在密钥库中唯一标识这个特定的密钥对

undefined

14

此时就在当前目录下,生成了一个app-release-signed.apk文件:

3.将新生成的app-release-signed.apk文件,拖入到夜神模拟器中安装,然后点击打开即可

如果夜神模拟器中原先存在该同名应用,需要先卸载掉,然后再安装,否则可能出现一直在安装中,导致安装不成功的情况。

undefined

15

上一条:移动安全-验证签名防止应用程序被篡改实验 下一条:Hadoop大数据技术-MapReduce基础实战

关闭