【安卓逆向】安卓病毒介绍及其简单案例分析

目录

引言

一、Android 病毒介绍及分析方法

1.1 Android 病毒预览

1.2 Android 病毒分析必备知识

1.3 Android 病毒的常见类型及恶意行为

1.3.1 常见病毒类型

1.3.2 常见病毒行为

1.4 病毒激活条件

1.5  Android 病毒的传播方式

1.6  Android 病毒分析的一般方法

二、经典安卓简单病毒案例分析

2.1 病毒分析-免流服务器

2.2 病毒分析-王者荣耀刷皮肤

2.3 病毒分析-秒抢红包


引言

        随着智能手机的普及,Android 系统成为了全球用户最广泛使用的移动操作系统之一。然而,Android 的开放性也使其成为了病毒和恶意软件的主要目标。Android 病毒不仅威胁用户隐私和财产安全,还可能对设备系统造成严重破坏。为了更好地理解和防范这些威胁,本文将从 Android 病毒的基本概念入手,详细介绍其常见类型、恶意行为、传播方式及分析方法。此外,本文还将通过几个经典案例,深入剖析 Android 病毒的运作机制。

一、Android 病毒介绍及分析方法

1.1 Android 病毒预览

        Android 病毒种类繁多,为了直观展示其危害,本文将以锁机病毒为例,深入分析其运作机制,帮助读者更直观地理解 Android 病毒的威胁。

1.2 Android 病毒分析必备知识

在分析 Android 病毒时,掌握 Android 的四大组件及权限相关知识至关重要。

(1) Activity - Android 的窗口界面

Activity 是用户与应用交互的界面,病毒常通过伪装成正常应用的 Activity 来诱骗用户。

(2)Service - Android 的后台服务

Service 在后台运行,病毒利用其执行恶意操作而不被用户察觉。

(3)BroadcastReceiver - 广播接收器/全局回调

BroadcastReceiver 用于接收系统广播,病毒通过监听特定广播触发恶意行为。

(4)ContentProvider - 内容提供商/注册表

ContentProvider 管理应用数据共享,病毒可能通过其窃取或篡改数据。

(5) 清单文件中权限的声明

AndroidManifest.xml 文件中的权限声明,病毒通过申请敏感权限实施恶意操作。

1.3 Android 病毒的常见类型及恶意行为

1.3.1 常见病毒类型

(1)信息窃取 (privacy)
   名称:a.privacy.GpsSpy.a (窃听幽灵)

(2)恶意扣费 (payment)
   名称:a.payment.suad.a (扣费内鬼)

(3)远程控制 (remote) 
   名称:a.remote.DieSms.a (致命短信)

(4)资费消耗 (expense) 
   名称:a.expense.vimob.a (TT 僵尸)

(5)诱骗欺诈 (fraud)

(6)流氓行为 (rogue)

(7)系统破坏 (system)

1.3.2 常见病毒行为

(1)获取用户手机信息
   - 使用 `TelephonyManager` 类获取手机号、MAC 地址、设备 ID、IMSI 号、SIM 卡序号、手机型号等。  
   - 后续操作:上传服务器或通过第三方服务获取详细位置。

(2)发送短信
   - 使用 `SmsManager` 类发送单条或多条短信,内容通常为通知病毒作者安装成功。

(3)获取联系人列表
   - 使用 `getContentResolver().query()` 获取联系人信息。  
   - 后续操作:上传服务器、发送到指定邮箱或群发带短 URL 的短信以扩散病毒。

(4)获取短信数据
   - 使用 `getContentResolver().query()` 获取短信内容。  
   - 后续操作:上传服务器、发送到指定邮箱、屏蔽控制短信或私自回复扣费短信。

(5)获取安装应用列表
   - 使用 `getPackageManager().getInstalledPackages()` 和 `getRunningAppProcesses()` 获取应用列表。  
   - 后续操作:上传服务器或检测是否有杀毒软件。

(6)获取 Root 权限
   - 使用 `Runtime.getRuntime().exec(cmd)` 执行底层命令。  
   - 后续操作:静默下载插件、加载恶意插件或静默安装 APK 文件。

(7)激活设备管理器防止卸载
   - 使用 `DevicePolicyManager` 和 `android.app.action.ADD_DEVICE_ADMIN` 激活设备管理器。  
   - 后续操作:隐藏自身图标。

(8)私自关闭 WiFi 并开启移动网络
   - 使用 `setWifiEnabled()` 和 `setMobileDataEnabled()` 控制网络连接。  
   - 后续操作:连接指定服务器上传程序包信息。

1.4 病毒激活条件

病毒安装后不一定立即启动,常见的激活条件包括:
(1)检测用户划屏解锁。
(2)检测用户开机。
(3)检测网络变化。

这些信息通常注册在 `AndroidManifest.xml` 文件中,熟悉四大组件和权限有助于快速定位恶意代码。

1.5  Android 病毒的传播方式

(1)浏览器搜索关键词 
   诱惑用户下载,如搜索“美女图片”、“激情视频”。

(2)短信传播下载地址 
   诱导用户下载,如短信内容为“孩子成绩”、“老婆丈夫出事”。

(3)捆绑正常 APP 
   伪装广告诱导用户下载。

(4)二维码 
   通过扫描二维码传播病毒。

(5)其他方式 
   加壳加密、免杀等技术手段。

1.6  Android 病毒分析的一般方法

分析 Android 病毒的步骤如下:

(1)上传至分析平台
   使用金山火眼或腾讯哈勃等平台初步分析病毒样本。

(2)反编译 APK 文件
   将 APK 文件反编译为可读代码,注意文件名应改为数字或英文。

(3)导入 IDE 分析
   将反编译后的代码导入 IDE,便于查看代码跳转。

(4)查看 AndroidManifest.xml
   找到入口类,查看申请的权限、广播监听类和服务类。

(5)定位关键 API
   搜索并分析关键 API,结合上下文理解病毒流程。

(6)安装病毒样本
   在测试手机中安装病毒样本,使用杀毒软件观察拦截的敏感 API。

(7)抓包分析
   使用抓包工具分析病毒上传的数据。

(8)动态分析加密字符串
   通过断点调试解析加密字符串,必要时修改 smali 代码。

(9)检查资源目录
   若未找到敏感 API,检查资源目录中是否存在可疑文件,如恶意 APK 或 SO 文件。

(10)分析 SO 文件 
    若病毒通过 SO 文件执行恶意代码,需具备 ARM 汇编知识。

通过以上步骤,可以有效分析 Android 病毒的运作机制,并采取相应的防护措施。

二、经典安卓简单病毒案例分析

所有样本程序安装均在模拟器中进行

2.1 病毒分析-免流服务器

点击安装核心,会有root权限申请:
Runtime.getRuntime().exec(cmd)

当安装核心之后,重启模拟器,会发现开机之后,有锁屏窗口,还发送大量短信

通过AndroidKiller反编译,分析组件和权限信息

再分析activity对应的布局文件

直接查看java代码中的az调用,az调用了copyAppToSystem

其中执行的命令有:
(1)获取root

(2)修改system目录权限
mount -o remount, rw /system/
(3)拷贝文件到系统目录
cp /storage/sdcard0/stk3.apk /system/app/
(4)修改文件权限
chmod 0777 /system/app/stk3.apk
(5)退出命令行
exit

stk3.apk的来源在onCreate函数中可以找到

根据以上分析,可以看出,stk3.apk才是真正的病毒文件,它被释放到SD中和系统目录中。
(1)/storage/sdcard0/stk3.apk
(2)/system/app/stk3.apk

免流服务器-清除病毒

删除sd卡中的stk3.apk
(1)进入shell
选用androidkiller中adb,执行 adb shell
(2)切换到SD目录
cd /storage/sdcard0/
(3)删除病毒
rm stk3.apk

删除system/app中的stk3.apk
(1)使用cd 切换根目录
(2)使用cd 切换到system/app
cd system/app
(3)删除病毒
rm stk3.apk

病毒分析-免流服务器-stk3.apk
Stk3.apk模仿系统应用痕迹很深。

从MainActivity找到 llxfc服务,在服务的代码中找到密码

密码:TFB4
解锁之后,可以使用模拟器中文件管理器删除病毒

2.2 病毒分析-王者荣耀刷皮肤

锁机密码:6699
特征字符串:lockNow,resetPassword
删除病毒时需要取消激活设备管理器,才能删除

2.3 病毒分析-秒抢红包

激活之后,显示的是上图界面,可以输入密码进行解锁,当重启之后,还会有密码,PIN码锁机,根据上一个案例,找特征字符串就可以解锁。

锁机密码是:8985

病毒分析-秒抢红包-第一层密码解密
从资源文件找到按钮ID以及代码

在代码中找到响应函数

使用smali注入方式,注入Log代码在解密函数的末尾,打印返回值

由于这个apk资源编译有问题,所以采用的方法就是将smali代码转为dex文件,然后再将源apk中的dex文件替换,再签名的方法。
编译smali代码为的dex命令:java -jar smali-2.2.0.jar a smali

使用Android监视器监控到日志信息:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/73147.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于LabVIEW的脚本化子VI动态生成

该示例展示了一种利用LabVIEW VI脚本(VI Scripting)技术,通过程序化方式动态生成并替换子VI的解决方案。核心逻辑为:基于预定义的模板VI,根据用户选择的数学操作(加法或乘法),自动生…

机器学习之超参数优化(Hyperparameter Optimization)

超参数优化(Hyperparameter Optimization) 1. 简介 在机器学习和深度学习中,超参数(Hyperparameters) 是在训练之前需要设定的参数,例如学习率(learning rate)、批量大小(batch size)、神经网络的层数等。与训练过程中自动学习的模型参数(如权重和偏置)不同,超参…

Manus 演示案例:谷歌公司运营模拟器游戏体验

一、项目背景与愿景 在科技行业蓬勃发展的当下,谷歌作为行业巨头,其成长历程充满了无数值得深入探究的决策智慧。这些决策不仅塑造了谷歌的辉煌,也为全球企业的发展提供了宝贵的借鉴。本项目旨在打造一款以谷歌公司发展为蓝本的运营模拟器游戏…

es-索引详解

在 Elasticsearch 中,**索引(Index)**是核心概念之一,类似于关系型数据库中的“表”。索引用于存储、组织和检索文档(Document)。以下是关于 Elasticsearch 索引的详细解析: 1. 索引的基本概念 …

基于策略模式的智能提示语生成器设计与实现——以Tkinter GUI开发为例

基于策略模式的智能提示语生成器设计与实现——以Tkinter GUI开发为例 一、引言:智能化时代的提示工程工具 在人工智能技术广泛应用的时代背景下,如何与AI模型进行有效交互已成为关键技能。本文介绍的"AI任务需求与提示语策略生成器"正是基于…

01 | Go 项目开发极速入门课介绍

提示: 所有体系课见专栏:Go 项目开发极速入门实战课。 你好,欢迎学习本课程。本课程是一个 Go 项目开发极速入门课程。旨在帮助刚学习完 Go 基础语法的 Go 开发者,快速掌握如何开发一个功能相对全面的 Go 项目。 根据课程设计目标…

密闭空间可燃气体监测终端:守护城市命脉,智驭燃气安全!

近年来,陕西省高度重视燃气安全,出台了一系列政策文件,旨在全面加强城镇燃气安全监管,防范化解重大安全风险。2023年,陕西省安委会印发《全省城镇燃气安全专项整治工作方案》,明确要求聚焦燃气经营、输送配…

大白话react第十八章React 与 WebGL 项目的高级拓展与优化

大白话react第十八章React 与 WebGL 项目的高级拓展与优化 1. 实现 3D 模型的导入与动画 在之前的基础上,我们可以导入更复杂的 3D 模型,并且让这些模型动起来,就像在游戏里看到的角色和场景一样。这里我们使用 GLTF 格式的模型&#xff0c…

有关Java中的多线程

学习目标 ● 掌握线程相关概念 ● 掌握线程的基本使用 ● 掌握线程池的使用 ● 了解解决线程安全方式 1.为什么要学习线程? ● 从1946年2月14日世界上第一台计算机在美国宾夕法尼亚大学诞生到今天,计算和处理的模式早已从单用户单任务的串行模式发展到了多用户多…

Spring Boot集成EasyExcel

1. 初始化Spring Boot项目 首先,使用Spring Initializr(https://start.spring.io/)生成一个基本的Spring Boot项目。选择以下依赖项: Spring WebLombok (用于减少样板代码)SLF4J (用于日志记录) 2. 添加依赖 在你的pom.xml文件…

(2025|ICLR|厦大华为,LoSA,基于表示互信息的动态层级稀疏率,基于重构误差的秩分配)LLM 的动态低秩稀疏自适应

Dynamic Low-Rank Sparse Adaptation for Large Language Models 目录 1. 引言 1.1 关键词 2. 方法 2.1 预备知识 2.2 层级稀疏率确定 2.3 稀疏感知的秩分配 2.4 动态稀疏与适配 3. 实验 3.1 实验设置 3.2 语言建模 3.3 零样本任务 3.4 N:M 稀疏性 3.5 消融实验 …

p5.js:sound(音乐)可视化,动画显示音频高低变化

本文通过4个案例介绍了使用 p5.js 进行音乐可视化的实践,包括将音频振幅转化为图形、生成波形图。 承上一篇:vite:初学 p5.js demo 画圆圈 cd p5-demo copy .\node_modules\p5\lib\p5.min.js . copy .\node_modules\p5\lib\addons\p5.soun…

linux 进程和计划管理

查看进程 在Linux系统中,有多个命令可以用来查看进程 以下是一些常用的命令: ps命令:用于查看当前系统中的进程状态。 基本用法:ps -ef,该命令会以完整格式显示所有进程的详细信息,包括用户ID、进程ID、父…

DeepSeek 多模态大模型 Janus-Pro 本地部署教程

下载模型仓库 git clone https://github.com/deepseek-ai/Janus.git 国内下载仓库失败时,可以使用以下代理: git clone https://github.moeyy.xyz/https://github.com/deepseek-ai/Janus.git 准备 Conda 3.12 虚拟环境 conda create --name deepseek7B p…

Qt开源控件库(qt-material-widgets)的编译及使用

项目简介 qt-material-widgets是一个基于 Qt 小部件的 Material Design 规范实现。 项目地址 项目地址:qt-material-widgets 本地构建环境 Win11 家庭中文版 VS2019 Qt5.15.2 (MSVC2019) 本地构建流程 克隆后的目录结构如图: 直接使用Qt Crea…

ARM 嵌入式处理器内核与架构深度剖析(2): ARM 处理器架构剖析

目录 一、ARM处理器架构剖析 1.1. 指令集架构(ISA) 1.2. 寄存器集 1.3. 存储模型 1.4. 异常模型 二、架构设计精要 2.1 处理器模式与特权分级 2.2 寄存器银行化技术 2.3 指令集演化 三、微架构核心技术 3.1 流水线创新 3.2 内存子系统 3.3 …

Flutter 按钮组件 TextButton 详解

目录 1. 引言 2. TextButton 的基本用法 3. 主要属性 4. 自定义按钮样式 4.1 修改文本颜色 4.2 添加背景色 4.3 修改按钮形状和边距 4.4 样式定制 5. 高级应用技巧 5.1 图标文本组合 5.2 主题统一配置 5.3 动态交互 6. 性能优化与注意事项 6.1 点击区域优化 6.…

std::ranges::views::split, lazy_split, std::ranges::split_view, lazy_split_view

std::ranges::views::split, std::ranges::split_view C20 中引入的用于分割范围(range)的组件,允许将输入范围按特定分隔符或条件分割成多个子范围。以下是详细说明和示例: 基本概念 1. 功能 分割范围:将输入范围&…

c++ constraints与concepts使用笔记

c constraints与concepts使用笔记 1. 模板参数缺乏约束的问题2. Concepts 基本概念3. Concept 的定义与使用4. requires 表达式详解5. requires 从句 vs requires 表达式完整示例:约束矩阵运算 1. 模板参数缺乏约束的问题 问题分析: 传统模板参数没有语…

Qt | 屏幕截图实现

01 全局截屏控件 1. 鼠标右键弹出菜单。 2. 支持全局截屏。 3. 支持局部截屏。 4. 支持截图区域拖动。 5. 支持图片另存为。 演示 点击按钮即可截图 源码: 通过网盘分享的文件:screenwidget屏幕截图 链接: https://pan.baidu.com/s/1PZfQlUXNIoZKEfEtLNV2jQ?pwd=5jsg 提…