在上一章中,我们了解了 Android 安全及其系统结构的基本知识。本章将了解如何建立 Android 渗透试验环境包括下载和配置 Android SDK 和 Eclipse。我们将深入了解 ADB,了解如何创建和配置 Android 虚拟设备(AVD)。
2.1 建立开发环境
为了构建 Android 应用程序或创建 Android 虚拟设备需要配置开发环境来运行这些应用程序。因此,我们需要做的第一件事就是下载 Java 开发工具包(JDK),其中包括 Java 运行时的环境(JRE):
为了下载 JDK,我们需要访问http://www.oracle.com/technetwork/java/javase/downloads/index.html,并根据我们的平台下载 JDK 7。就像下载并运行下载的可执行文件一样简单。在下面的屏幕截图中,您可以看到 安装在我的系统上Java:一旦我们下载并安装 JDK,我们需要在我们的系统上设置环境变量,以便从任何路径执行 Java。对于 Windows 用户,我们需要右键单击My Computer(我的电脑)图标,然后选择Properties(属性)选项。接下来,我们需要从顶部选项卡列表中选择Advanced system settings(高级系统设置)选项:一旦我们进入System Properties右下角可以看到(系统属性)对话框Environment Variables...(环境变量)选项。当我们点击它时,我们可以看到另一个窗口,包括系统变量及其值System variables(系统变量)部分:在新的弹出对话框中,我们需要单击Variables(变量)下PATH文本框,并键入 Java 安装文件夹的路径:对于 Mac OS X,编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/编辑/.bash_profile并将 文件Java 路径追加PATH变量。在 Linux 在机器中,我们需要编辑./bashrc文件并附加环境变量行。这里是命令:$ nano ~/.bashrc $ export JAVA_HOME=`/usr/libexec/java_home -v 1.6` or export JAVA_HOME=`/usr/libexec/java_home -v 1.7` 也可以通过从终端运行以下命令来检查 Java 安装配置是否正确:$ java --version一旦我们下载并配置 Java 下一步是下载环境变量http://developer.android.com/sdk/index.html中提供的 Android ADT 包。ADT 包是由 Android 团队准备的完整包包包括配置 ADT 插件,Android SDK 工具,Android 平台工具,最新 Android 平台和模拟器的 Android 系统图像 Eclipse。这大大简化了早期下载和使用 Android SDK 配置 Eclipse 的整个过程,因为现在一切都提前配置好了。一旦我们下载 ADT 包,我们可以解压并打开 Eclipse 文件夹。启动时,ADT 包会要求我们配置 Eclipse 工作区。workspace(工作空间)所有 Android 将存储应用程序开发项目及其文件的位置。在这种情况下,我默认保留了所有内容,并选择了它们Use this as the default and do not ask me again(以此为默认值,不再问我)复选框:一旦完全启动,我们可以继续创建 Android 虚拟设备。Android 虚拟设备用于特定版本的 Android 模拟器配置。模拟器与 Android SDK 软件包提供的虚拟设备,开发人员可以操作正常设备的应用程序,并在实际设备上与之互动。这不是 Android 设备但仍想创建 设备Android 应用程序的开发者也很有用。注
这里要注意的一个有趣的特性是,在 Android 模拟器在 中运行ARM 在上面,模拟的一切都与真实设备完全相同。然而,在 iOS 中,我们的模拟器只是模拟环境,没有相同的组件和平台。
2.2 创建 Android 虚拟设备
为了创建Android我们需要执行以下操作:
访问 Eclipse 顶栏,然后点击 Android 图标旁边的设备图标。这将打开一个新的Android Virtual Device Manager(Android 虚拟设备管理器)窗口包含所有虚拟设备的列表。点击是一个很好的选择New创建新的虚拟设备。我们也可以从终端运行 android 命令并访问工具,然后管理 AVD 来启动 Android 虚拟设备。或者,我们可以简单地指定 AVD 名称,使用模拟器-avd [avd-name]命令启动特定的虚拟设备。这将打开一个需要 的新窗口Android 虚拟设备配置的所有属性(尚未创建)。如下截图所示,我们将配置所有选项:一旦点击OK并返回到 AVD 管理器窗口,我们将看到新的 AVD。现在,只要选择新的 AVD,然后单击Start...(开始)启动我们创建的虚拟设备。它可能需要很长时间来加载你的第一次使用,因为它正在配置所有的硬件和软件来给我们真正的电话体验。在之前的配置中,为了节省虚拟设备的启动时间,选择Snapshot复选框也是一个不错的选择。一旦设备加载,我们现在可以访问我们的命令提示符并使用 android 命令检查设备配置。这两个进制文件位于安装/sdk/tools文件夹下的adt-bundle文件夹中。我们设置位置sdk文件夹中的tools和platform-tools文件夹的位置就像我们以前使用的环境变量一样。运行以下命令:android list avd 我们可以在下面的屏幕截图中看到,上面命令的输出显示了我们系统中所有现有的 Android 虚拟设备列表:我们将继续使用 ADB 或 Android Debug Bridge 开始使用设备,我们已经在上一章看到了。我们也可以在终端中执行emulator -avd [avdname]命令运行模拟器。2.3 渗透试验实用工具
现在,让我们详细了解一些有用的 Android 实用Android Debug Bridge,Burp Suite 和 APKTool。
Android Debug Bridge
Android Debug Bridge 是一个客户端 – 服务器程序允许用户连接到模拟器或Android 设备交互。它包括客户端(在系统上运行)、处理通信的服务器(也在系统上运行)以及在模拟器和设备上作为后台过程运行的保护程序。客户端用于 ADB 通信默认端口始终为 5037,设备使用从 555 到 5585 端口。
让我们继续,通过运行adb devices命令开始与启动的模拟器交互。它将显示模拟器启动并运行并连接到 ADB:
C:\Users\adi0x90\Downloads\adt-bundle\sdk\platform-tools>adb devicesList of devices attachedemulator-5554 device
在某些情况下,即使模拟器正在运行或设备已连接,您也不会在输出中看到设备。在这种情况下,我们需要重新启动 ADB 服务器,杀死服务器,然后再次启动:
C:\Users\adi0x90\Downloads\adt-bundle\sdk\platform-tools>adb kill-serverC:\Users\adi0x90\Downloads\adt-bundle\sdk\platform-tools>adb start-server* daemon not running. starting it now on port 5037 ** daemon started successfully *
我们也可以使用它pm所有ADB 中使用:
adb shell pm list packages
如下面的屏幕截图所示,我们将获得安装在设备上的所有软件包列表,这可能在未来阶段有用:
另外,我们可以使用它dumpsys meminfo然后是adb shell命令,获取所有应用程序及其当前内存占用的列表
我们也可以得到它logcat(这是读取 Android 设备事件日志的工具),并将其保存到特定文件,而不是在终端上打印:
adb logcat -d -f /data/local/logcats.log
此处的-d指定转储完整日志文件并退出标志,-f将标志指定为文件,而不是在终端上打印。我们在这里使用/data/local位置,而不是任何其他位置,因为这个位置可以写在大多数设备中。
我们也可以使用它df命令检查文件系统一和可用的空间和大小:
在 Android SDK 还有一个很棒的工具,叫 MonkeyRunner。该工具用于自动化和测试 Android 应用程序,甚至与应用程序交互。例如,我们可以使用 10 自动触摸、敲击和事件来测试应用程序adb shell中使用monkey 10命令:
[email protected]:/ # monkey 10monkey 10Events injected: 10## Network stats: elapsed time=9043ms (0ms mobile,0ms wifi,9043ms not connected)
我们可以在 ADB 使用它们。我们将继续下载其他我们将来使用的工具。
Burp Suite
下一章中使用的最重要的工具之一是 Burp 代理。我们将使用它来拦截和分析网络流量。通过拦截流量数据,可以评估和发现应用程序中的许多安全漏洞。在以下步骤中执行此操作:
我们现在从官方网站http://portswigger.net/burp/download.html下载 burp 代理。下载安装后,需要打开 Burp 窗口,如下图屏幕截图所示。您还可以使用以下命令安装 Burp:java –jar burp-suite.jar 我们可以在下面的截图中看到,我们已经运行了 Burp 并显示默认界面:在 Burp Suite 在工具中,我们需要单击Proxy(代理)选项卡并访问Options(选项)选项卡配置代理设置。在Options选项卡中,我们可以看到默认选项被选中,这是127.0.0.1:8080。这意味着从我们的系统端口8080发送的所有流量都将由 Burp Suite 拦截并显示在其窗口。我们还需要选择默认代理127.0.0.1:8080并单击Edit(编辑)检查隐藏的代理选项。接下来,我们需要访问Request handling选项卡(请求处理)并选择Support invisible proxying (enable only if needed)(支持不可见代理(只在需要时使用)复选框:最后,我们使用它invisible选项操作代理:一旦设置了代理,我们将启动我们的模拟器和我们刚刚设置的代理。我们将使用以下模拟器命令http-proxy选项:emulator -avd [name of the avd] -http-proxy 127.0.0.1:8080 我们可以在下面的截图中看到如何使用命令:因此,我们已经配置了 Burp 代理和模拟器导致现在所有模拟器流量通过 Burp。在这里,您正在访问使用 SSL 网站可能会遇到问题,这些问题将涉及到以下章节。
Android 反向工程中最重要的工具之一是 APKTool。它是反向第三方和封闭的二进制 Android 设计应用程序。这个工具将是我们未来章节逆向主题和恶意软件分析的重点之一。开始使用 APKTool,请执行以下步骤:
为了下载 APKTool,我们需要访问https://code.google.com/p/android-apktool/downloads/list。我们需要下载两份文件:apktool1.5.3.tar.bz2,其中包含 apktool另一个文件取决于平台 – 无论是 Windows,Mac OS X 还是 Linux。一旦下载和配置完成,为了方便,我们还需要 APKTool 添加到我们的环境变量中。另外, 最好APKTool 设置为环境变量,或首先安装在/usr/bin中。然后我们可以从我们的终端运行 APKTool,如下图所示:总结
在本章中,我们使用 Android SDK,ADB,APKTool 和 Burp Suite 建立了 Android 渗透试验环境。这些是 Android 最重要的工具熟悉的最重要的工具。
在下一章中,我们将学习如何逆向和审计 Android 应用程序。我们还将使用一些工具,如 APKTool,dex2jar,jd-gui 和一些我们自己的命令行必杀技。