一、概述
学习分析 Android 恶意软件所需的概念。探索如何在解压 APK 文件时进行代码分析,重点关注 AndroidManifest.xml 的结构。通过 ADB 练习,简要介绍如何连接 Android 设备以及基于 Linux 的目录结构。
二、Android恶意软件分析 为了概念理解
'jadx-gui' 就像一个程序 Android 应用程序apk)在解压缩文件时,我们需要了解其结构。这是通过代码分析来寻找漏洞的方法。我们来看看 apk 文件的结构。

jadx-gui 按程序分样 apk 文件解压缩后的结构你以前见过吗? Java任何从事开发工作的人都会对它很熟悉。 Java 基于 Android因此, Android 应用程序也 OOP(Object Oriented Programming)在面向对象编程中 Java Class 它具有结构,虽然它并不能确切地告诉你开发人员编写的原始代码,但却足以分析代码。com.metasploit.stage'"包"指整个应用程序,其中 a~g 类执行各自的功能。 MainActivity, MainBroadcastReceiver, MainService我在之前的一篇文章中谈到了这个问题。 Android 该应用程序扮演了一个组件的角色。当然,类的实际角色可能并不完全由类名来表示。在开发过程中,我们使用了明确的类名,但事实上,参与开发的每个人都知道,通过反编译可以进行代码分析。 在商业化(应用程序部署)阶段,我们出于安全考虑会将其隐藏。
资源目录应用程序使用的静态数据包括文本、图像等 META-INF, AndroidManifest.xml, Classes.dex, Resources.arsc有的。 META-INF是一份包含应用程序签名公钥的证书 AndroidManifest.xml是授权应用程序的包信息或组件(组件) Activity, BroadcastReceiver 其中包含诸如 Classes.dex已将上述源代码组织成类,并将其转换为可执行应用程序的字节码 dex 这是一种针对格式优化的形式。最后, Resources.arsc有编译资源(字符串、设计等)。

现在我们来看看进行代码分析时需要考虑的每个要点。首先,上图显示 AndroidManifest.xml。 Android 该文件包含构成应用程序的组件、与权限相关的信息以及与硬件相关的信息。我们之所以首先打开这个文件,是为了了解整个应用程序的功能。当然,这并不能告诉我们所有信息。有些应用程序包含的与权限相关的信息实际上并未使用,因为该应用程序目前已安装。 Android 这是为了区分手机是否用于真实的用途。 uses-permission 我们添加项目时,让我们来看看 您可以通过打开和关闭蓝牙、检查网络连接或在应用程序加载时使用加速度计等方式来了解情况。 不仅针对恶意代码应用程序,而且针对普通用户应用程序也是如此,原因是一样的。 uses-permission有些情况下,它包括
所有 Android 应用程序必须具有唯一的包名,因为 Linux 基础的 Android 操作系统管理这些包名和 PID通过 进程。在上图中,包名为 'com.metasploit.stage',通常以 com. 开头,但不一定。

首先, android:targetSdkVersion 简单地说,运行应用程序为了 这是最低要求的版本。我们 Jar 在运行文件时 Java 与版本检查一样,应用程序必须满足上述版本要求才能执行和运行。 uses-permission 如果你看到某个部分,即使你不完全了解,也可以简单地将其翻译成英文。 Android您能看到特定系统使用的权限是什么吗?也就是说,应用明确请求使用的权限列表,用于基本数据、硬件等。这些权限应当是预定义的。 Android 操作系统允许在验证后使用实际的硬件或数据。
※ 在安装或使用应用程序时,您可能会遇到权限请求。开发人员通过这种方式将责任转移给用户,但您可以简单地接受这些请求…

application的 activity, receiver, service 该部分 Android 组件关于其结构的详细部分仍需要进一步研究,但 intent我在之前的帖子中提到了这一点,但它指的是一个入口点,也是一个示例。 android.intent.category.LAUNCHER向用户显示的用于进入应用程序的图标就是我们所说的组件。简而言之,组件是一个 activity是向用户显示的部分UI)而且 broadcastreceiver内部事件处理为了 而且 services这是背景任务部分,这里不显示 content provider这是指提供共享数据的部分。 另外一个例子是 receiver 在 android.intent.action.BOOT_COMPLETED 中,它允许手机在启动完成后启动应用程序。
※ Android 有许多入口点。您可以通过按下图标、点击网络广告、在后台播放音乐或在收到通知消息后进入 Coupang 或 KakaoTalk 等应用程序来启动应用程序。虽然这不属于逆向工程,但在分析代码时通常会从某个 activity 开始。
三、ADB 练习
ADB(Android Debug Bridge)Android 调试为了 Tool您可以使用此功能执行各种任务,例如检查设备的内部结构或在多个应用程序中识别恶意代码应用程序。 Windows它可以帮助您实现这一点。
SDK 平台工具发行说明 | Android 开发人员 | Android Developers
您可以在这里下载它,
Android 调试桥接(adb) | Android 开发人员 | Android Developers
有关如何使用 的详细信息,请访问此处。
为了简要介绍这些命令, 、
命令 | 说明 |
adb devices | 检查连接到 PC 的设备和模拟器列表,并使用 "adb kill-server" 断开连接 |
adb install [apkfilename.apk] | 在设备上安装 apk 文件 |
adb uninstall [包名] | 删除安装在设备上的软件包 |
adb push [PC 位置] [android 位置] | 将存储在 PC 上的文件复制到设备 |
adb pull [android 路径] | 将设备上存储的文件复制到 PC |
adb shell | 运行连接设备的 shell |
adb logcat | 监控连接设备日志 |
adb connect 127.0.0.1:62001 | 连接到位于 127.0.0.1 的端口 62001 上的 adb |
adb shell pm list packages | 查看已在连接设备上安装的所有软件包的列表 |
adb shell pm list permissions | 连接设备上的应用程序的权限列表 |
ADB通过 要进行此项练习,您需要一个 Android 设备,因此我安装并运行了 Nox Player.
Nox AppPlayer - 在 PC 上安全地享受移动游戏,无延迟。
最后,我们将下载的 ADB 文件路径注册为环境变量,这样就可以从任何路径方便地使用了。
要执行此操作,请前往"设置"-"系统"

输入信息。一旦输入完毕,中间会显示"高级系统设置"。点击它,

存在环境变量。请输入

我 Path单击它,然后单击"创建"。 ADB 您只需粘贴文件路径即可。
现在,我们来尝试使用 ADB 命令连接设备。(在此之前,请确保运行 Nox。)

所以 adb devices如果输入这个,就不会出现任何设备。所以现在, Nox我会去找的。

tasklist 列出当前运行的进程,而 findstr 仅输出与特定字符串相匹配的结果。netstat -ano 列出所有当前打开服务器的 IP 地址和端口。对于 Nox,它连接到端口 62001。

最后, 请尝试以这种方式连接, 如果连接正常, adb shell用 Linux 您可以看到外壳打开。这表示连接正常。如果您要删除连接, exit离开外壳后 adb kill-server您可以初始化连接。
有几个目录需要您了解: /data/app, /data/data, /system/vendor/lib, /proc, /storage/emulated/0. 第一个目录 /data 是应用程序共享目录,其中存储了公共数据和 apk 可执行文件。 /system 是系统配置文件部分,而 /proc 是与进程相关的目录。请参考 Linux 中的文件结构。最后, /storage 指向 SD 卡。对于个人用户信息,它存储在用户帐户目录中,就像在 Linux 中创建的 /home/user 帐户目录一样。这样做是为了防止其他普通用户访问这些信息。
登录