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

server/2025/3/13 16:11:33/

目录

引言

一、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.ppmy.cn/server/174659.html

相关文章

Linux练级宝典->动态库和静态库

动静态库的原理 我们知道可执行文件前的4步骤 预编译->编译->汇编->链接 预处理: 完成头文件展开、去注释、宏替换、条件编译等,最终形成xxx.i文件。编译: 完成词法分析、语法分析、语义分析、符号汇总等,检查无误后将…

《深度解析DeepSeek-M8:量子经典融合,重塑计算能效格局》

在科技飞速发展的今天,量子计算与经典算法的融合成为了前沿领域的焦点。DeepSeek-M8的“量子神经网络混合架构”,宛如一把钥匙,开启了经典算法与量子计算协同推理的全新大门,为诸多复杂问题的解决提供了前所未有的思路。 量子计算…

MySQL中 IN 到底走不走索引?

文章目录 前言数据库表结构查询sqlEXPLAIN介绍EXPLAIN 的输出每列解释 强制走索引查询时添加条件(复合索引字段)查询小时查询分钟 总结 前言 在 MySQL 中,IN 语句是否能够利用索引取决于多个因素,包括但不限于查询的具体形式、表的统计信息、索引的选择…

使用expect工具实现远程批量修改服务器密码

使用expect工具实现远程批量修改服务器密码 linux服务器安装Expect工具 1、首先查看系统中是否有安装expect。 # whereis expect 2、Expect工具是依赖tcl的,需要先安装tcl #wget https://sourceforge.net/projects/tcl/files/Tcl/8.4.19/tcl8.4.19-src.tar.gz …

LuaJIT 学习(1)—— LuaJIT介绍

文章目录 介绍Extensions Modulesbit.* — Bitwise operationsffi.* — FFI libraryjit.* — JIT compiler controlC API extensionsProfiler Enhanced Standard Library Functionsxpcall(f, err [,args...]) passes arguments例子: xpcall 的使用 load*() handle U…

利用java实现数据分析

1 问题 在日常生活中,对于数据的处理,为了使数据更加直观,我们可以使用柱状图,饼图,折线图等来呈现,同时也可以对数据直接进行一些处理,那怎样用java来处理这类问题呢? 2 方法 代码清…

emacs使用mongosh的方便工具发布

github项目地址: GitHub - csfreebird/emacs_mongosh: 在emacs中使用mongosh快速登录mongodb数据库 * 用途 在emacs中使用mongosh快速登录mongodb数据库, 操作方法: M-x mongosh, 输入数据库名称,然后就可以自动登录,前提是你已经配置好了…

蓝桥杯省赛真题C++B组2024-握手问题

一、题目 【问题描述】 小蓝组织了一场算法交流会议,总共有 50 人参加了本次会议。在会议上,大家进行了握手交流。按照惯例他们每个人都要与除自己以外的其他所有人进行一次握手(且仅有一次)。但有 7 个人,这 7 人彼此之间没有进行握手(但这…