首页
社区
课程
招聘
[原创] 某安全厂的面试题 Android病毒分析
发表于: 1天前 169

[原创] 某安全厂的面试题 Android病毒分析

1天前
169

前言

去年这个时候笔者面试一家安全厂的面试题目(两个字的hh),过了一年了翻出来了拿出来分享一下。技术面是通过了,最后可能是没有缘分吧。比较可惜。希望文章能给正在找工作的一点帮助。(分析报告纯古法0 ai辅助)

分析报告

分析人员: **

分析日期: 2025年6月23日

样本来源: **

1. 分析环境

分析工具:GDA,IDA PRO, Jeb Pro

分析设备:谷歌Pixel1

系统版本:Android 8.1

2. 威胁概述

2.1. 样本基本信息

样本类型:Android恶意应用程序

主要组成:包含两个DEX文件的复合型恶意软件

威胁等级:高危

3. 核心恶意功能

3.1. 屏幕解锁攻击模块

利用无障碍服务监听和记录用户输入的密码、图案

实施PIN码暴力破解攻击

密码信息存储在特定路径(/Config/sys/apps/loge/)

3.2. 虚拟货币钓鱼攻击

针对Trust Wallet等数字钱包应用

创建虚假交易界面进行钓鱼

监控BTC、ETH、USDT等主流虚拟货币余额

专门攻击Binance应用,通过恶意覆盖界面窃取用户资产

3.3. 远程访问木马(RAT)功能

连接远程控制服务器(103.118.247.217:7781)

具备屏幕截图、设备信息收集能力

支持远程控制和应用卸载操作

3.4. 权限绕过与持久化

针对小米、华为、OPPO等主流厂商进行权限绕过

自动获取无障碍权限和设备管理器权限

实施电池优化绕过,确保后台运行

3.5. 反检测与对抗分析

具备反虚拟机/模拟器检测能力

通过窗口拦截阻止用户卸载应用

保护关键服务和权限设置不被用户修改

3.6. 通信机制

使用TCP协议进行原始socket通信

采用Base64编码传输敏感信息

建立持久化的C&C通信连接

3.7. 总结

这是一个功能完整的高级持续性威胁(APT)样本,集成了密码窃取、虚拟货币盗取、远程控制等多种攻击手段,对用户财产安全和隐私构成严重威胁。

4. 动态行为分析

4.1. 静态配置分析

使用GDA工具查看AndroidManifest.xml文件,发现Apk疑似获取如下权限。

android.permission.MODIFY_AUDIO_SETTINGS 修改音频设置
android.permission.SEND_SMS 发送短信
android.permission.SET_WALLPAPER 设置壁纸
android.permission.READ_SMS 读取短信内容
android.permission.READ_CALL_LOG 读取通话记录
android.permission.READ_CONTACTS 读取联系人信息
android.permission.GET_ACCOUNTS 获取系统账户信息
android.permission.CAMERA 访问摄像头
android.permission.RECORD_AUDIO 录制音频
android.permission.ACCESS_COARSE_LOCATION 获取大概位置信息
android.permission.ACCESS_FINE_LOCATION 获取精确GPS位置
android.permission.CALL_PHONE 直接拨打电话
android.permission.DISABLE_KEYGUARD 禁用锁屏
android.permission.FOREGROUND_SERVICE 运行前台服务
android.permission.READ_EXTERNAL_STORAGE 读取外部存储
android.permission.RECEIVE_BOOT_COMPLETED 开机自启动
android.permission.WRITE_EXTERNAL_STORAGE 写入外部存储
oppo.permission.OPPO_COMPONENT_SAFE OPPO 厂商安全组件权限
oplus.permission.OPLUS_COMPONENT_SAFE OPLUS 厂商安全组件权限
com.huawei.permission.external_app_settings.USE_COMPONENT 华为外部应用设置组件权限
android.permission.INTERNET 网络访问权限

4.2. 执行分析

使用正常软件进行执行分析。

一共启动了两个活动窗口。

图片描述

引导用户启动无障碍,疑似模拟触摸影响用户输入。

图片描述
启动后会阻止用户关闭无障碍。

图片描述

5. 样本壳分析

5.1. Java层分析

5.1.1. 加密字符串算法分析

样本使用了字符串加密,来进行其特征,我们需要进行解密。

主要解密函数如下:

图片描述

可以看到是一个base64加密,并且进行字符串分割,分割元素是”ǘūď”。函数解密流程图。

图片描述

使用frida进行hook,获取所有字符串解密后结果。

图片描述

部分hook代码:

function hook_m_io(){
Java.perform(()=>{
var cls_j_m = Java.use("j.m");
if(cls_j_m == null){
return;
}
cls_j_m.io.overload("java.lang.String").implementation= function(str:string){
var ret_vaule = this.io(str)
console.log(str,"decode: ",ret_vaule);
return ret_vaule;
}
});
}

5.1.2. 主活动分析

使用GDA查看AndroidManifest.xml,查看主活动。

图片描述

在软件中并没有发现n0fon.izxjm.v84jv.MainActivity的主活动类。通过分析m类可以发现:

图片描述

样本重写了attachBaseContext方法,在执行MainActivity之前运行了部分逻辑

5.1.3. attachBaseContext函数分析

Dex自解压行为

样本首先打开文件

图片描述

文件名为:

“ZmLEj8eYxavEj3Rrd2pkLmRleMeYxavEj8eWx5bEjw==”:tkwjd.dex

“ZmLEj8eYxavEj3Rrd2pkLmRleMeYxavEj8eWx5bEjw==”:tkwjdd.dex

路径为:

图片描述

/data/data/n0fon.izxjm.v84jv/files/

并且判断文件是否存在

图片描述

样本最后执行解压自己的APK

图片描述
并且匹配.tkwjd关键字写入到缓冲区中,并且写入到文件缓冲器。我在apk文件中找到f.tkwjd文件

图片描述

解压完成后就会对文件进行解密

解密算法如下:

图片描述

解密完后就会执行label_30:分支中可以看到样本通过DexClassLoader加载了一个dex,并且加载了里面的类并且调用了方法。

图片描述

最后他会加载dex,执行attachBaseContextEx和setLoadFlag方法。

c.g.attachBaseContextEx分析

根据不同的指令集加载不同的so。

图片描述

修改文件名

图片描述

解密so

图片描述

从文件中解压并且解密

解密函数

图片描述

图片描述

可以发现so被ase进行加密了。

使用python模拟解密算法对本地加密过的so进行解密实际上他是一个zip文件。

图片描述

解压出来就是样本本身的so了。

5.1.4. J.onCreate函数分析

图片描述

主要是使用反射调用了m.a.onCreateEx,这里写了一个去字符串混淆脚本还原了真实代码。

Context劫持

将Context的外部引用指向恶意Application

图片描述

篡改ActivityThread

图片描述

获取ActivityThread实例(Android应用的主线程管理器),将mInitialApplication字段替换为恶意Application。

Application列表操作

图片描述

修改系统维护的所有Application列表,这确保系统认为恶意Application是合法的。

LoadedApk包含应用的包信息,将其中的Application引用替换为恶意版本。

图片描述

ApplicationInfo伪装

修改ApplicationInfo中的className,使系统认为恶意Application是应用的正式Application类。

生命周期接管

图片描述

调用恶意Application的onCreate

5.1.5. g.1内部类分析

这里主要做了一个重打包检测。

拿到ApplicationInfo

图片描述

通过apk拿到mf文件

图片描述

获取MANIFEST.MF文件的时间戳

图片描述

与原本的硬编码时间戳进行比较,如果不一样就是被篡改过。

5.1.6. Java层启动流程

图片描述

整个apk在java中启动流程就如上图。

5.2. Jni层分析

5.2.1. native_attach分析

从java层中可以知道java层调用了m.attach函数。

图片描述

图片描述

从ida中可以看到上面m.attach函数。

5.2.2. sub_15F6C函数分析

创建一个dex准备进行自解密。

Dex加密数据回填

图片描述

5.2.3. sub_17194分析

定位apk的位置

图片描述

5.2.4. sub_17264分析

进行解密

图片描述

通过反射Inmemorydexclassloader加载dex

图片描述

遍历dexfile,并且存储里面的元素。

图片描述

最后做了替换,在sub_19064函数中。

图片描述

最后返回

图片描述

5.3. 脱壳思路

由于主要使用的是Inmemorydexclassloader加载的dex,所以我们可以在BaseDexClassLoader获取到classload和文件缓冲区。如下图类之间关系。

图片描述

这里采用的是定制Aosp进行修改。主要使用Aosp8.1系统,在BaseDexClassLoader构造进行插桩Dump所有dex文件。部分代码:

图片描述

一共Dump如下文件(前缀dump_是脱壳机添加,后面为源文件名)。

图片描述

6. 静态行为分析

6.1. 主文件分析

由于有多个Dex文件这里使用Python脚本对文件进行甄别。通过Hash比较,文件大小以及文件格式。

图片描述

发现有两个dex:

b409bdef6a255e52d6aa27ad68c938e7c886d1ea35b4cda27d9f8c42c418fe4d

49049c73c3aa8722d569a90e4be5742b15c68d526a99b984826a37eee1265a12。通过jeb pro观察。

6.2. MainActivity类行为分析

反虚拟机/模拟器检测

图片描述

恶意WebView配置,恶意网站4a1K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3c8G2N6g2)9J5k6h3N6S2L8h3g2K6M7Y4N6X3i4K6u0W2j5$3!0E0

图片描述

恶意隐藏进程 Activity被销毁时启动后台Activity保持存在

图片描述

6.3. ClickUnlock屏幕密码解锁破解模块分析

利用无障碍监听输入密码

图片描述
记录图案

图片描述

检测消息完成后保存图案

图片描述

保存密码到这个路径下"/Config/sys/apps/loge/pwdss.text"

图片描述

利用无障碍模拟破解用户密码

图片描述

PIN密码暴力破解

图片描述

屏幕唤醒和解锁启动

图片描述

6.4. 虚拟币钓鱼模块Trust

虚假交易界面,部分代码

图片描述

钱包名窃取

图片描述

监控BTC余额

图片描述

监控etc余额

图片描述

监控USDT余额

图片描述

6.5. Binance应用程序转账攻击模块

检测Binance应用攻击触发

图片描述

恶意覆盖界面

图片描述

最后把数据存放到变量中

6.6. 远程访问木马模块

建立与远程控制服务器的连接

图片描述

应用卸载操作

图片描述

图片描述

设备信息收集

图片描述

屏幕截图控制

图片描述

6.7. 远程控制溯源分析

在n0fon.izxjm.v84jv.servziz.initializeService 类中查找到了攻击方的IP地址

图片描述

使用base64进行解密,可以获得以下信息。

服务器IP地址: 103.118.247.217
服务器端口: 7781

连接的一些信息

图片描述

6.8. 后台工作服务

主要是位置前台的服务连接

图片描述

6.9. 无障碍服务模块以及远控具体实现

服务器地址以及端口

图片描述

通过解码IP地址如下:

103.118.247.217:7781

截图底层实现

图片描述

屏幕内容扫描底层实现

图片描述

PIN码监控部分代码

图片描述

密码保存

图片描述

密码存储位置 :/sdcard/Config/sys/apps/loge/

存储结构:

pwdss.txt # 成功验证的解锁密码

pwdsz.txt # 当前输入的密码

pwd.txt # 备用密码文件

pwdtype.txt # 密码类型标识

log-YYYY-MM-DD.txt # 按日期的活动日志

应用活动监控

图片描述

Trust Wallet攻击实现

图片描述

6.10. 权限绕过

电池管理系统

小米绕过

图片描述

华为绕过:

图片描述

OPPO绕过:

图片描述

无障碍权限自动获取:

图片描述

系统静音功能

图片描述

6.11. 窗口拦截 NewUnInstall

阻止用户卸载

图片描述

通过关键词检测

图片描述

图片描述

解码后主要是:自启动管理、权限管理、应用权限、后台活动、电池优化、无障碍服务、设备管理器、系统权限。阻止用户进行设置。

特定权限设置拦截

图片描述

无障碍服务保护

图片描述

6.12. 网络协议分析

主要使用的是原始socket进行通信的,使用的是TCP协议。

图片描述

数据包格式

图片描述

录制发送

图片描述

总结

希望对你有帮助。如果有啥疑问也可以直接在评论区提出来。文章不限制,觉得还可以的话请帮我点个赞吧。


[内核课程]《Windows内核攻防实战》!从零到实战,融合AI与Windows内核攻防全技术栈,打造具备自动化能力的内核开发高手。

最后于 1天前 被BitWarden编辑 ,原因: 修改错别字
收藏
免费 0
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回