从零开始学Android应用安全测试(Part2)

在上一篇文章中,我们为测试安卓应用程序设置了一个移动渗透平台。到目前为止,你需要保证你已经配置好你的虚拟设备,安装完安卓命令行工具,以及前一篇文章所提及的一些工具(drozer, dex2jar, apktool)。

在这一篇文章中,我会带领大家了解一些信息收集技术,我们将看到如何反编译一款安卓应用程序,分析安卓应用程序的签名以及其他一些东西。

关于虚拟设备这一点,如果你正在寻找一款符合你需求的安卓应用测试平台,那么你可以去看看Android Tamer[https://androidtamer.com/ ]。

提取应用中的信息

首先,确认下你系统中的InsecureBankv2是我们的最新版本。当然,建议你做一个git pull将所有更新都合并到你的主分支中。

1

完成之后,我们就来对这个apk文件进行一些分析,将apk文件复制到一个独立的文件夹中。就向Ios的ipa文件一样,apk文件也是一个打包文件,所以你可以通过将文件后缀从.apk修改为.zip然后就可以进行提取了。

2

进入提取文件后的文件夹中,你可以看到许多的文件

3

让我来简单的进行一下描述:

AndroidManifest.xml——AndroidManifest.xml 是每个android程序中必须的文件。它位于整个项目的根目录,描述了package中暴露的组件(activities, services, 等等),他们各自的实现类,各种能被处理的数据和启动位置。从安全角度来看,它包含了应用程序中所有使用到的组件信息,同时它还会显示应用程序使用的permissiosns信息,我强烈建议大家可以在谷歌文档中多看看。

在我们所要讨论的漏洞中就会讨论到安卓应用组件中的一些东西。

Assets——这个被用来存储一些原始资源文件,存储在里面的东西会编译到apk文件中。

Res——用于储存像图片,版式文件等

META-INF——这个里边存储的是关于签名的一些信息

classes.dex——这里面就是编译的应用程序代码,如果你要进行反编译操作,那么你需要先将dex文件转换为jar文件,然后用java编译器进行读取。

存储公钥证书的CERT.RSA文件是在META-INF 文件夹下面,找出公钥证书的信息可以键入一下命令

keytool -printcert -file META-INF/CERT.RSA

4

请注意,在经过反编译,编译然后重新部署到其他设备之后还可以对这个apk文件中的代码进行修改。但是,一旦修改了这个apk文件之后,就会丢失其完整性,那么我们就需要重新弄一个public/private key。

说到这里,推荐大家去了解下如何创建自己的public/private key

[http://developer.android.com/tools/publishing/app-signing.html]

一旦完成应用程序的编译工作,你可以使用jarsigner工具对其完整性进行验证。

5

现在我们就来使用dex2jar这款反编译工具,dex2jar接受输入为.apk后缀的文件,然后将其转换为jar文件。

6

完成操作之后,你可以在JD-GUI中打开,并浏览其源代码。

7

现在我们就可以通过浏览其源代码找到一些潜在的漏洞,我们可以清楚的注意到对这个apk文件进行逆向,并浏览其源代码是多么的简单。这里我们需要注意的是,我们之所以能够这么简单就得到源代码是由于这款App没有对其源码进行模糊处理。像Google提供的Proguard工具就可对代码进行模糊处理。虽然对App源码进行模糊处理并非是万无一失的方法,但是至少还是有一部分作用,在今后的文章中我们可能就会遇到对代码进行了模糊处理的案例。

在本节中,我们了解到如何从一款App中提取信息。

文章来源:FreeBuf黑客与极客(FreeBuf.COM)

上一篇:从零开始学Android应用安全测试(Part1)

下一篇:谷歌正为Gmail开发PGP端到端加密技术