WeSeong 登录
← 返回文章列表
安卓

Android 简单代码分析,ADB(Android 调试桥)

Android 简单代码分析,ADB(Android 调试桥)

一、概述

本文将探讨用于分析 Android 恶意代码所需的概念。我们将以 AndroidManifest.xml 的结构为主,介绍在解包 APK 文件后如何进行代码分析。此外,我们将通过 ADB 实践,简单了解如何通过连接 Android 设备,了解基于 Linux 的目录结构。



Ⅱ. 针对 Android 恶意软件的初步概念

在使用像“jadx-gui”这样的工具来反编译 Android 应用程序 (APK) 文件时,了解其结构至关重要。 这种方法可以帮助我们通过代码分析来发现潜在的安全漏洞。 让我们简单了解一下 APK 文件的结构。


使用 jadx-gui 程序的示例 当解压 APK 文件时,其结构如下:这是不是您之前也见过?如果您有使用 Java 进行开发的经验,可能会觉得很熟悉。因为它是基于 Java 的 Android 平台,所以也适用于 Android 应用程序。 面向对象编程 (OOP)它采用面向对象编程的 Java 类结构。虽然它不直接提供开发者编写的代码,但足以进行代码分析。 "com.metasploit.stage" 表示该应用程序的整个包,其中包含 a~g 类,每个类负责不同的功能。 MainActivity, MainBroadcastReceiver, MainService它正在执行之前发布的 Android 应用组件的功能。当然,实际情况中,开发者可能不会使用明确的类名来表示其功能。在开发过程中,开发者可能会使用明确的类名,但由于他们都知道可以通过反编译来分析代码,因此… 在应用发布阶段,为了安全起见,我们会将其隐藏起来。


资源目录该应用程序使用的一些静态数据,例如文本、图像等。 META-INF, AndroidManifest.xml, Classes.dex, Resources.arscMETA-INF 包含应用程序的数字签名,其中包含用于验证的公钥。 AndroidManifest.xml其中包含包的信息以及权限应用的组成部分(如 Activity、BroadcastReceiver 等)的信息。Classes.dex 包含了应用程序运行所需的代码,这些代码已按照类进行整理,并转换为字节码,然后以 dex 格式进行优化。最后,Resources.arsc 包含了编译后的资源(如字符串、设计等)。






现在,让我们逐一了解需要分析的代码。首先,这张图片是 AndroidManifest.xml 文件。它包含了构成 Android 应用程序的各个组件,以及权限和硬件相关的信息。 我们可以通过查看这个文件,了解应用程序的整体功能。 当然,这并不能完全了解应用程序。 某些应用程序可能会包含一些实际未使用但仍然存在的权限信息,目的是为了区分当前安装在 Android 手机上的应用程序是否实际使用。 使用权限 在添加新的内容时,我发现… 通过尝试开启或关闭蓝牙、检查网络连接,或使用倾斜传感器等操作,来判断应用程序是否加载成功。 这在恶意软件应用程序以及普通应用程序中都可能发生,因为它们都需要使用权限。


※ 所有 Android 应用程序的包名不能重复。这是因为在基于 Linux 的 Android 操作系统中,通过包名和 PID 来管理进程。如图所示,包名为 'com.metasploit.stage',通常以 'com.' 开头,但这并非必须。


首先,我们简单地谈谈 `android:targetSdkVersion`。这指的是应用程序运行所需的最低版本。就像我们在运行 JAR 文件时需要确认 Java 版本一样,应用程序运行也需要满足这个版本信息。 在 `uses-permission` 部分,虽然可能不清楚具体含义,但如果简单地用英语翻译,我们可以了解到应用程序需要哪些权限才能运行。换句话说,这是一个应用程序声明,它需要哪些必要的硬件或数据才能运行。只有这样,Android 操作系统才能在确认后,真正使用这些硬件或数据。


※ 在安装或使用应用程序时,您可能会遇到权限请求。这通常是由开发者提出的,但实际上是将责任转移给用户。您可以简单地了解这些信息即可。



关于应用程序的活动、接收者和服务部分 安卓组件这部分定义了“intent”的构成方式,虽然细节还需要进一步学习,但“intent”这个词,在之前的帖子中已经有所提及,它指的是“入口”或“起点”,例如: android.intent.category.LAUNCHER这指的是应用程序中用于引导用户进入的图标。 简单回顾一下组件,我们继续: 活动这部分是用户界面 (UI)。 收音机这部分用于处理内部事件。 服务这部分是后台工作,虽然这里没有提及,但内容提供商负责提供共享数据。因此,我们可以用接收者部分作为例子。 android.intent.action.BOOT_COMPLETED这使得用户可以在手机启动后,直接启动应用程序。


※ 应用程序入口点很多。可以通过点击应用程序图标启动,也可以通过通知消息、后台音乐播放、或点击网络广告进入,例如进入酷安或KakaoTalk等应用程序。因此,在进行代码分析时,有时会从Activity开始。



Ⅲ. 亚洲开发银行实习

ADB(Android 调试桥)可以将它理解为一种针对 Android 系统的调试工具。 通过使用这个工具,用户可以进行各种操作,例如:查看设备的内部结构,或者识别应用程序中的恶意代码。

SDK 平台工具发布说明  |  安卓开发者  |  安卓开发者

您可以在这里下载,

Android 调试桥 (adb)  |  安卓开发者  |  安卓开发者

关于使用方法的详细信息,请参考此处。


简单地说,以下是一些常用的命令:

指令

说明

adb 设备

检查已连接的设备和模拟器,以及与 PC 相关的连接列表,使用“adb kill-server”命令断开连接。

使用 adb 命令安装 [apkfilename.apk] 文件

在设备上安装 APK 文件

使用 adb 命令卸载 [包名]

从设备上删除已安装的软件包

adb push [PC 路径] [Android 路径]

将电脑上存储的文件复制到设备上

使用 adb 命令将 [Android 路径] 复制到本地

将设备上存储的文件复制到电脑

adb shell

执行连接的设备 shell

adb logcat

连接设备的日志监控

使用 adb 连接 127.0.0.1:62001

通过 adb 连接到 127.0.0.1 的 62001 端口

adb shell pm list packages

查看已安装在连接设备上的所有软件包列表

adb shell pm list permissions

与连接的设备相关的应用程序权限列表

为了通过ADB进行实践,需要一个安卓设备,因此我安装了Nox Player并进行了实践。

诺克斯应用平台 - 在PC上安全、流畅地玩移动游戏。

此外,我还将下载的 ADB 文件的路径设置为环境变量,这样用户可以在任何位置轻松地使用它。

方法是在“设置”->“系统”中进行。


这些信息会被记录下来。 进入后,您会看到一些高级系统设置,点击即可。


存在一些环境因素。 进入后


只需点击该路径,然后点击“新建”,并将 ADB 文件路径直接输入即可。


现在,让我们尝试使用 ADB 命令连接设备。(不过,请务必先启动 Nox。)


当输入“adb devices”时,不会显示任何设备。那么,接下来我们需要找到正在运行的 Nox。


`tasklist` 命令可以查看当前正在运行的进程列表,而 `findstr` 命令可以只输出包含特定字符串的结果。`netstat -ano` 命令可以显示当前所有开放的服务器 IP 和端口。其中,对于 Nox,是通过 62001 端口进行连接。


最后,如果尝试成功建立连接,您就可以看到 adb shell 启动后,进入 Linux 命令行界面。 这样就表示连接成功。 如果您想断开连接,可以先退出 shell,然后使用 adb kill-server 命令来重置连接。


* 请注意以下目录 /data/app, /data/data, /system/vendor/lib, /proc, /storage/emulated/0在这些目录下,`/data` 目录是应用程序共享目录,其中包含常见的数据和 APK 运行文件等。`/system` 目录包含系统设置文件,`/proc` 目录则与进程相关。 想象一下 Linux 的文件结构。 最后一个目录 `/storage` 对应于 SD 卡。 对于个人用户的个人信息,类似于 Linux 系统中 `/home/用户名` 目录,这些信息也会存储在用户目录中。 这样做是为了防止其他普通用户访问。