验证签名防止应用程序被篡改实验
一、实验目的
了解验证 apk 的签名的过程,检查应用程序是否被篡改。
二、实验环境与设备
系统:Windows Sever 2012 R2
其他:adt-bundle-windows, Eclipse, keytool
虚拟仿真环境拓扑如图1。

图1
三、实验内容
1.通过 android ADT生成签名 apk
打开 eclipse,在 eclipse 启动时的选择 workspace 窗口中选择桌面 FirstApp bak 文件夹。
图2
右键 FirstApp 项日文件夹,选择【Android Tools】选项卡里的【Export Signed Application Package】选项。
图3
然后选择打包的项目,选择好【FirstApp】后并且点击【Next】按钮。
图4
选择【Creat new keystore】选项,即创建一个新的签名文件,其中keytore储存了密匙和证书。
图5
然后填写相关信息,其中【Location】为签名文件保存路径与文件名,【Password】为签名库的密钥,【Confirm】为确认签名库的密钥,这里密码输入的是123456,填写完成后点击【Next】按钮。
图6
生成签名文件,继续填写相关信息,其中【Alias】为签名文件的别称,【Password】为签名件密钥,【Confirm】为签名文件确认密钥,【Validity】为签名文件的有效期,【First and Last Name】为合法人的姓名,【Organizational Unit】为公司部门,【Organization】为公司,【CityorLocality】为所在的地方或城市,【State or Province】为所在洲或省,【Country code】为国家编号,填写完成后点击【Next】按钮。
选择带签名文件包的保存路径,这里也选择c盘根目录,然后点击【Finish】按钮完成。
打开c盘目录,在目录空白处按下Shift键并点击鼠标右键选择【在此处打开命令窗口(W)】。
首先查找apk里的rsa文件,输入jar tf FirstApp.apk |findstr RSA的命令,得到META-INF/CERT.RSA。
图7
然后需要从apk中解压rsa文件,继续输入命令jar xf FirstApp.apk META-INF/CERT.RSA。
为了获取签名的fingerprints,输入命令keytool -printcert -file META-INF/CERT.RSA,得到了签名的信息,有所有者、发布者、有效期、证书指纹等。
图8
2.验证重打包的 aPp 签名
在桌面上有一个名为 FirstApp signed.apk 的文件,是使用其他签名文件签名的 FirstApp 程序在桌面打开 cmd终端。
首先查找 apk 里的 rsa 文件,输入 jar tf FirstApp signed.apk |findstr RsA 的命令,得到 META-INF/ZS KEYS 7 T.RSA然后需要从 apk 中解压 rsa 文件。继续输入命令 jar xf FirstApp signed.apk META-INF/ZS KEYST.RSA。
执行命令结束后就在桌面生成了 META-INF 文件夹。
获取签名的 fingenprints,输入命令 keytool -printcert -fle META-INF/ZS KEYST.RSA,得到了签名的信息有所有者、发布者、有效期、证书指纹等。

图9
两个 apk 是否同签名,比较签名的 MD5 码或 SHA1 码或者其他信息,一样就是没有经过篡改的,反之,就是的签名被篡改过。
这两个 app 的签名有明显的不同,所以肯定是经过重打包或重签名的。