乐于分享
好东西不私藏

从技术角度告诉你:为什么’黄赌毒’APP碰不得

从技术角度告诉你:为什么’黄赌毒’APP碰不得

声明: 本报告仅供安全研究使用,请勿用于非法目的。

现在手机上网,充满诱惑的链接随处可见,一定要谨慎对待。这个是我上网过程中看到的,索性下载下来进行分析,一定不要在真机运行,风险很高的。我是通过模拟器运行的。

一、样本基础信息

1.1 基本信息

项目
详情
应用名称
加藤视频
包名
odt.coisukjlpe.mtwpzov
版本
4.3.3
版本代码
1
编译SDK
Android 13 (API 33)
最低SDK
Android 7.0 (API 24)
架构
Flutter (ARM64-v8a)
签名
未验证

1.2 APK结构分析

APK结构:├── AndroidManifest.xml├── classes.dex (多个)├── resources.arsc├── lib/│   ├── arm64-v8a/│   │   ├── libapp.so (13MB)        # Flutter编译代码│   │   ├── libflutter.so           # Flutter引擎│   │   └── librsa_bridge.so        # RSA加密模块│   ├── armeabi-v7a/│   └── x86/├── assets/│   └── flutter_assets/│       └── assets/│           ├── product.a            # 服务器标识配置│           └── ...└── res/

1.3 DEX文件清单

文件
描述
classes.dex
主DEX文件,包含应用入口
classes2.dex
辅助DEX
classes3.dex
辅助DEX
classes4.dex
辅助DEX

二、核心恶意功能技术分析

2.1 APK签名块隐藏配置技术 🔴

这是该样本的核心隐藏技术,通过APK签名块(APK Signing Block)存储C2配置信息,绕过静态分析。

2.1.1 配置文件提取逻辑

文件sources/w7/c.java

// 提取channel IDpublic static String c(File file) {    // 魔数: 1903654775 = 0x71776572 (ASCII "qwer")    return e.d(file, 1903654775);}// 提取完整配置public static b a(File file) {    Map<String, String> mapB = b(file);    if (mapB == null) {        return null;    }    String str = mapB.get("channel");    mapB.remove("channel");    return new b(str, mapB);}

文件sources/w7/e.java

// 根据ID提取字节数组public static byte[] a(File file, int i10) {    ByteBuffer byteBuffer;    Map<Integer, ByteBuffer> mapB = b(file);    if (mapB == null || (byteBuffer = mapB.get(Integer.valueOf(i10))) == null) {        return null;    }    return c(byteBuffer);}// 将字节数组转为Stringpublic static String d(File file, int i10) {    byte[] bArrA = a(file, i10);    if (bArrA == null) {        return null;    }    try {        return new String(bArrA, "UTF-8");    } catch (UnsupportedEncodingException e10) {        e10.printStackTrace();        return null;    }}

2.1.2 APK签名块解析

文件sources/w7/a.java

// 定位APK签名块private static final void b(FileChannel fileChannel) {    // 魔数1: 2334950737559900225L = 0x20504B4458425031L ("APK Sig Block 42")    // 魔数2: 3617552046287187010L = 0x3234206B6F746F42L ("Block 42 ")    if (byteBufferAllocate.getLong(8) != 2334950737559900225L ||         byteBufferAllocate.getLong(16) != 3617552046287187010L) {        throw new f("No APK Signing Block before ZIP Central Directory");    }}

2.1.3 上下文调用接口

文件sources/w7/g.java

// 从ApplicationInfo获取sourceDirprivate static String a(Context context) {    try {        ApplicationInfo applicationInfo = context.getApplicationInfo();        if (applicationInfo == null) {            return null;        }        return applicationInfo.sourcedir;    } catch (Throwable unused) {        return null;    }}// 对外APIpublic static String b(Context context) {    return c(context, null);}public static String c(Context context, String str) {    b bVarD = d(context);    return bVarD == null ? str : bVarD.a();}

2.1.4 技术原理

APK文件格式:┌─────────────────────────────────────────┐│ ZIP Local File Header                   │├─────────────────────────────────────────┤│ ZIP Central Directory                   │├─────────────────────────────────────────┤│ APK Signing Block                      ││ ┌─────────────────────────────────────┐ ││ │ Block Size (8 bytes)                │ ││ │ ID-value Sequence:                  │ ││ │   • 0x71776572 → channel/config   │ ││ │   • 0x00000001 → 其他配置         │ ││ │   • ...                            │ ││ │ Block Size (8 bytes)               │ ││ └─────────────────────────────────────┘ │└─────────────────────────────────────────┘

2.1.5 攻击价值

特点
说明
静态分析绕过
传统工具无法直接提取
自动化沙箱失效
运行时才提取配置
多渠道分发
不同channel对应不同C2
便于更新
修改channel即可切换C2

2.2 多图标动态伪装技术 🔴

该样本实现动态图标切换,可伪装成7个不同的合法应用。

2.2.1 Activity-alias配置清单

文件resources/AndroidManifest.xml

<!-- 主Activity - 原始应用 --><activity    android:name="com.example.flutter_jtvideo.MainActivity"    android:exported="true">    <intent-filter>        <action android:name="android.intent.action.MAIN"/>        <category android:name="android.intent.category.LAUNCHER"/>    </intent-filter></activity><!-- 伪装: 爱奇艺 --><activity-alias    android:name="com.example.flutter_jtvideo.Aiqy"    android:label="爱奇艺"    android:icon="@mipmap/app_icon_qiyi"    android:enabled="false"    android:targetActivity="com.example.flutter_jtvideo.MainActivity">    <intent-filter>        <action android:name="android.intent.action.MAIN"/>        <category android:name="android.intent.category.LAUNCHER"/>    </intent-filter></activity-alias><!-- 伪装: 百度云盘 --><activity-alias    android:name="com.example.flutter_jtvideo.Baidu"    android:label="百度云盘"    android:icon="@mipmap/app_icon_bd"    android:enabled="false"    android:targetActivity="com.example.flutter_jtvideo.MainActivity"/><!-- 伪装: 小红书 --><activity-alias    android:name="com.example.flutter_jtvideo.Redbook"    android:label="小红书"    android:icon="@mipmap/app_icon_red"    android:enabled="false"    android:targetActivity="com.example.flutter_jtvideo.MainActivity"/><!-- 伪装: 东方财富 --><activity-alias    android:name="com.example.flutter_jtvideo.East"    android:label="东方财富"    android:icon="@mipmap/app_icon_a"    android:enabled="false"    android:targetActivity="com.example.flutter_jtvideo.MainActivity"/><!-- 伪装: 一起学 --><activity-alias    android:name="com.example.flutter_jtvideo.Study"    android:label="一起学"    android:icon="@mipmap/app_icon_study"    android:enabled="false"    android:targetActivity="com.example.flutter_jtvideo.MainActivity"/><!-- 伪装: 计算器 --><activity-alias    android:name="com.example.flutter_jtvideo.Calc"    android:label="计算器"    android:icon="@mipmap/app_icon_calc"    android:enabled="false"    android:targetActivity="com.example.flutter_jtvideo.MainActivity"/><!-- 伪装: 天气 --><activity-alias    android:name="com.example.flutter_jtvideo.Weather"    android:label="天气"    android:icon="@mipmap/app_icon_weather"    android:enabled="false"    android:targetActivity="com.example.flutter_jtvideo.MainActivity"/>

2.2.2 动态切换实现

文件sources/com/example/flutter_jtvideo/MainActivity.java

// 关键常量定义private final String f5479k = "com.example.app/packages";private final String f5480l = "com.example.flutter_jtvideo/wallet_launcher";private final String f5481m = "com.example.wallet";// 动态切换图标 - P()方法private final void P(String str) {    PackageManager packageManager = getPackageManager();    String packageName = getPackageName();    // 步骤1: 获取所有Activity    ActivityInfo[] activities = getPackageManager()        .getPackageInfo(packageName, 513).activities;    // 步骤2: 禁用所有Activity组件    Iterator it = linkedHashMap.entrySet().iterator();    while (it.hasNext()) {        Map.Entry entry = (Map.Entry) it.next();        ComponentName componentName = new ComponentName(packageName, str10);        // 2 = COMPONENT_ENABLED_STATE_DISABLED        // 1 = DONT_KILL_APP        packageManager.setComponentEnabledSetting(componentName, 2, 1);    }    // 步骤3: 启用指定伪装图标    ComponentName componentName2 = new ComponentName(packageName, str13);    // 1 = COMPONENT_ENABLED_STATE_ENABLED    packageManager.setComponentEnabledSetting(componentName2, 1, 1);    // 步骤4: 重启应用以应用更改    U();}

2.2.3 Flutter通道调用

// 处理图标切换请求private static final void Q(MainActivity this$0, i call, j.d result) {    if (call.f7589a.equals("changeIcon")) {        try {            this$0.P((String) call.a("actionName"));            result.success(Boolean.TRUE);        } catch (Exception e10) {            Log.e("AppIcon", "切换图标失败: " + e10.getMessage());            result.error("CHANGE_ICON_ERROR", e10.getMessage(), null);        }    }}

2.2.4 攻击场景还原

阶段1: 初始安装┌────────────────────────────────────────────┐│ 用户安装APK                                ││ 显示为 "加藤视频" (成人内容)               │└────────────────────────────────────────────┘                     ↓阶段2: 远程控制┌────────────────────────────────────────────┐│ C2服务器下发指令                           ││ 切换图标为 "爱奇艺"                        │└────────────────────────────────────────────┘                     ↓阶段3: 钓鱼攻击┌────────────────────────────────────────────┐│ 用户以为是正版爱奇艺                       ││ 输入账号密码                               ││ 凭证被窃取                                 │└────────────────────────────────────────────┘

2.3 设备指纹收集与反调试 🟠

2.3.1 完整设备信息收集

文件sources/i9/b.java

// 收集设备完整信息public void onMethodCall(i iVar, j.d dVar) {    if (!iVar.f7589a.equals("getAndroidDeviceInfo")) {        dVar.notImplemented();        return;    }    HashMap map = new HashMap();    // 硬件信息    map.put("board", Build.BOARD);           // 主板    map.put("bootloader", Build.BOOTLOADER); // 引导程序    map.put("brand", Build.BRAND);          // 品牌    map.put("device", Build.DEVICE);        // 设备    map.put("display", Build.DISPLAY);      // 显示    map.put("fingerprint", Build.FINGERPRINT); // 指纹    map.put("hardware", Build.HARDWARE);    // 硬件    map.put("host", Build.HOST);    map.put("id", Build.ID);    map.put("manufacturer", Build.MANUFACTURER); // 制造商    map.put("model", Build.MODEL);          // 型号    map.put("product", Build.PRODUCT);      // 产品    // CPU信息    map.put("supported32BitAbis", Arrays.asList(Build.SUPPORTED_32_BIT_ABIS));    map.put("supported64BitAbis", Arrays.asList(Build.SUPPORTED_64_BIT_ABIS));    map.put("supportedAbis", Arrays.asList(Build.SUPPORTED_ABIS));    // 构建信息    map.put("tags", Build.TAGS);    map.put("type", Build.TYPE);    // 关键: 是否物理设备    map.put("isPhysicalDevice", Boolean.valueOf(!c()));    // 关键: Android ID (设备唯一标识)    map.put("androidId", a());    // 系统功能    map.put("systemFeatures", Arrays.asList(b()));    // 版本信息    HashMap map2 = new HashMap();    map2.put("baseOS", Build.VERSION.BASE_OS);    map2.put("previewSdkInt", Build.VERSION.PREVIEW_SECURITY_PATCH);    map2.put("securityPatch", Build.VERSION.SECURITY_PATCH);    map2.put("codename", Build.VERSION.CODENAME);    map2.put("incremental", Build.VERSION.INCREMENTAL);    map2.put("release", Build.VERSION.RELEASE);    map2.put("sdkInt", Build.VERSION.SDK_INT);    map.put("version", map2);    dVar.success(map);}

2.3.2 关键信息提取方法

// 获取Android IDprivate String a() {    return Settings.Secure.getString(this.f9387f, "android_id");}// 获取系统功能列表private String[] b() {    FeatureInfo[] systemAvailableFeatures = this.f9388g.getSystemAvailableFeatures();    // ... 提取所有硬件/软件功能}

2.3.3 反调试/模拟器检测算法

private boolean c() {    // 检测通用设备标识    if (Build.BRAND.startsWith("generic") || Build.DEVICE.startsWith("generic")) {        return true;    }    // 检测指纹    String str = Build.FINGERPRINT;    if (str.startsWith("generic") || str.startsWith("unknown")) {        return true;    }    // 检测QEMU/模拟器CPU    String str2 = Build.HARDWARE;    if (str2.contains("goldfish") || str2.contains("ranchu")) {        return true;  // Android Emulator    }    // 检测模拟器型号    String str3 = Build.MODEL;    if (str3.contains("google_sdk") || str3.contains("Emulator") ||         str3.contains("Android SDK built for x86")) {        return true;    }    // 检测Genymotion    if (Build.MANUFACTURER.contains("Genymotion")) {        return true;    }    // 检测VirtualBox    String str4 = Build.PRODUCT;    if (str4.contains("sdk_google") || str4.contains("google_sdk") ||         str4.contains("sdk") || str4.contains("sdk_x86") ||         str4.contains("vbox86p") || str4.contains("emulator") ||         str4.contains("simulator")) {        return true;    }    return false;}

2.3.4 检测指标总结

检测项
检查值
说明
品牌检测
“generic”
通用设备=模拟器
指纹检测
“generic”/”unknown”
测试镜像
CPU检测
“goldfish”/”ranchu”
QEMU模拟器
型号检测
“Emulator”/”google_sdk”
官方模拟器
厂商检测
“Genymotion”
第三方模拟器
产品检测
“vbox86p”/”emulator”/”simulator”
虚拟化特征

2.3.5 收集信息用途

信息
用途
android_id
设备唯一标识,持续追踪
device/model/brand
设备指纹
isPhysicalDevice
判断是否在分析环境
security_patch
寻找已知漏洞
system_features
发现可用攻击面

2.4 深度链接劫持 🟠

2.4.1 自定义URL Scheme

文件resources/AndroidManifest.xml

<!-- 支付回调劫持 --><activity ...>    <intent-filter>        <action android:name="android.intent.action.VIEW"/>        <category android:name="android.intent.category.BROWSABLE"/>        <data android:scheme="hqbpays"/>    </intent-filter></activity><!-- 应用启动劫持 --><activity ...>    <intent-filter>        <action android:name="android.intent.action.VIEW"/>        <category android:name="android.intent.category.DEFAULT"/>        <category android:name="android.intent.category.BROWSABLE"/>        <data android:scheme="lxspvideo"/>    </intent-filter></activity>

2.4.2 攻击原理

正常流程:用户点击 hqbpays://xxx → 银行APP → 完成支付攻击流程:用户点击 hqbpays://xxx → 恶意APP拦截 → 显示钓鱼页面 → 窃取支付信息

2.5 钱包启动模块 🔴

2.5.1 Flutter Method Channel定义

文件sources/com/example/flutter_jtvideo/MainActivity.java

// Channel名称private final String f5479k = "com.example.app/packages";private final String f5480l = "com.example.flutter_jtvideo/wallet_launcher";private final String f5481m = "com.example.wallet";// 注册Channel@Overridepublic void o(a flutterEngine) {    super.o(flutterEngine);    // 图标切换Channel    new j(flutterEngine.j().k(), this.f5479k).e(new j.c() {        @Override        public void onMethodCall(i iVar, j.d dVar) {            MainActivity.Q(this.f134f, iVar, dVar);        }    });    // 钱包启动Channel    new j(flutterEngine.j().k(), this.f5480l).e(new j.c() {        @Override        public void onMethodCall(i iVar, j.d dVar) {            MainActivity.R(this.f135f, iVar, dVar);        }    });}

2.5.2 钱包启动实现

// 处理钱包启动请求private static final void R(MainActivity this$0, i call, j.d result) {    l.e(this$0, "this$0");    l.e(call, "call");    l.e(result, "result");    // 检查方法名    if (!l.a(call.f7589a, "launchWallet")) {        result.notImplemented();        return;    }    // 获取传入的URL    String str = (String) call.a("url");    if (str == null || p.p(str)) {        result.success(Boolean.FALSE);        return;    }    try {        // 创建Intent        Intent intent = new Intent("android.intent.action.VIEW");        intent.setData(Uri.parse(str));        // 指定目标包名 (外部钱包APP)        intent.setPackage(this$0.f5481m);  // "com.example.wallet"        // 设置启动标志        intent.addFlags(268435456);  // FLAG_ACTIVITY_NEW_TASK        // 启动钱包APP        this$0.startActivity(intent);        result.success(Boolean.TRUE);    } catch (ActivityNotFoundException e10) {        Log.e("WalletLauncher", "钱包应用未安装: " + e10.getMessage());        result.success(Boolean.FALSE);    } catch (Exception e11) {        Log.e("WalletLauncher", "打开钱包失败: " + e11.getMessage(), e11);        result.success(Boolean.FALSE);    }}

2.5.3 攻击场景

┌────────────────────────────────────────────────────────────┐│ 阶段1: 诱导充值                                              ││ 用户观看视频 → 提示"开通VIP会员" → 引导充值                │└────────────────────────────────────────────────────────────┘                            ↓┌────────────────────────────────────────────────────────────┐│ 阶段2: 打开钱包                                              ││ 调用launchWallet → 打开外部"钱包"APP                        ││ (可能是另一个恶意软件,用于窃取支付凭证)                    │└────────────────────────────────────────────────────────────┘                            ↓┌────────────────────────────────────────────────────────────┐│ 阶段3: 窃取资金                                              ││ 用户输入支付密码/银行卡信息 → 资金被转走                   │└────────────────────────────────────────────────────────────┘

三、危险权限深度分析

3.1 权限请求清单

文件resources/AndroidManifest.xml

<!-- 网络权限 --><uses-permission android:name="android.permission.INTERNET"/><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/><uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/><uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/><uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/><!-- 存储权限 --><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.READ_MEDIA_IMAGES"/><uses-permission android:name="android.permission.READ_MEDIA_AUDIO"/><uses-permission android:name="android.permission.READ_MEDIA_VIDEO"/><!-- 电话权限 --><uses-permission android:name="android.permission.READ_PHONE_STATE"/><!-- 相机/音频 --><uses-permission android:name="android.permission.CAMERA"/><uses-permission android:name="android.permission.FLASHLIGHT"/><uses-permission android:name="android.permission.RECORD_AUDIO"/><!-- 系统权限 --><uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/><uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/><uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/><uses-permission android:name="android.permission.FOREGROUND_SERVICE"/><!-- 其他 --><uses-permission android:name="android.permission.BLUETOOTH"/><uses-permission android:name="android.permission.WAKE_LOCK"/><uses-permission android:name="android.permission.VIBRATE"/><uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>

3.2 权限风险矩阵

权限
风险等级
攻击利用场景
READ_PHONE_STATE
🔴极高
IMEI、IMSI、电话号码、运营商
MANAGE_EXTERNAL_STORAGE
🔴极高
完全文件控制、窃取所有数据
SYSTEM_ALERT_WINDOW
🔴极高
弹窗覆盖银行APP、钓鱼攻击
REQUEST_INSTALL_PACKAGES
🔴极高
静默安装其他恶意APP
CAMERA
🔴极高
偷拍、扫码攻击、摄像头劫持
RECORD_AUDIO
🔴极高
语音窃听、环境录音
READ_EXTERNAL_STORAGE
🔴高
读取相册、文档、下载文件
READ_CONTACTS
🔴高
联系人窃取、社交工程
ACCESS_FINE_LOCATION
🔴高
位置追踪、行踪分析
RECEIVE_BOOT_COMPLETED
🟡中
开机自启、持久化运行
BLUETOOTH
🟡中
蓝牙攻击、近场渗透
INTERNET
🟡中
数据外传、C2通信

3.3 攻击面分析

权限组合攻击矩阵:READ_PHONE_STATE + READ_EXTERNAL_STORAGE    ↓    窃取: IMEI + 相册照片 + 账号文件SYSTEM_ALERT_WINDOW + INTERNET    ↓    攻击: 弹窗钓鱼 + 远程控制CAMERA + RECORD_AUDIO + INTERNET    ↓    攻击: 偷拍偷录 + 实时传输REQUEST_INSTALL_PACKAGES + INTERNET    ↓    攻击: 下载安装更多恶意软件

四、C2服务器与IOC提取

4.1 主C2服务器

类型
地址
来源
C2主域名
jlgdyf.com
libapp.so字符串提取
恶意脚本
https://ijppzch.jlgdyf.com/jt-cg-jason.js
libapp.so字符串提取

4.2 标识域名

文件resources/assets/flutter_assets/assets/product.a

xuhie6x.fzmhe5lai.app2d3scvm.fzmhe5lai.appbjsetk5.fzmhe5lai.app5qt417b.fzmhe5lai.appq2mazta.fzmhe5lai.app

4.3 URL Scheme

Scheme
用途
hqbpays
支付回调劫持
lxspvideo
应用深度链接

4.4 API端点清单

端点
功能
风险
/dd/luckyTurntable/draw
幸运转盘抽奖
🔴赌博
/dd/order/pay/getTypeList
获取支付方式
🔴诈骗
/dd/pkg/game/list
游戏列表
🔴赌博
/user/im/orderList
订单管理
🟡数据
/user/im/getAgentOnline
客服在线
🟡诱导
/user/im/reportBehavior
行为上报
🟡追踪
/wxuser/user/info/activeLogin
活跃登录
🟡追踪

4.5 完整IOC列表

IOC = Indicators of Compromise(威胁指标)

域名/URL:- jlgdyf.com- ijppzch.jlgdyf.com- fzmhe5lai.app (及其子域名)URL Scheme:- hqbpays- lxspvideo包名:- odt.coisukjlpe.mtwpzov- com.example.wallet方法Channel:- com.example.app/packages- com.example.flutter_jtvideo/wallet_launcher

五、第三方SDK分析

5.1 依赖清单

SDK
版本
风险
说明
flutter_inappwebview
?
🔴高
WebView控制、JS执行
com.azhon:appupdate
?
🔴高
APK下载更新
ExoPlayer
?
🟢低
视频播放(合法)
Glide
?
🟢低
图片加载(合法)
OkHttp3
?
🟡中
网络库(合法)
ZXing
?
🟢低
条码扫描(合法)

5.2 高风险组件分析

5.2.1 flutter_inappwebview

该组件允许在WebView中执行JavaScript,并提供了丰富的回调接口:

// 可能的风险:- JavaScript注入攻击- Cookie/Token窃取- WebView漏洞利用- 远程页面加载

5.2.2 com.azhon:appupdate

该组件用于APK更新,可能被利用于:

// 可能的风险:- 下载执行额外恶意载荷- 静默更新恶意功能- 绕过官方应用市场

六、攻击链完整还原

6.1 阶段化攻击流程

┌─────────────────────────────────────────────────────────────────┐│ 阶段1: 初始感染                                                  │├─────────────────────────────────────────────────────────────────┤│ 传播途径:                                                        ││   • 成人网站下载链接                                             ││   • 群聊/私信分享                                                ││   • 钓鱼网站诱导                                                 ││                                                                  ││ 用户操作:                                                        ││   • 下载APK                                                      ││   • 安装并授予所有权限                                           │└─────────────────────────────────────────────────────────────────┘                              ↓┌─────────────────────────────────────────────────────────────────┐│ 阶段2: 初始化执行                                                │├─────────────────────────────────────────────────────────────────┤│ 1. 提取APK签名块中的channel配置                                  ││    w7/c.java → e.d(file, 1903654775)                            ││                                                                  ││ 2. 连接C2服务器                                                  ││    jlgdyf.com / fzmhe5lai.app                                   ││                                                                  ││ 3. 设备信息收集                                                 ││    i9/b.java → android_id, model, brand, hardware               ││                                                                  ││ 4. 反调试检测                                                    ││    模拟器检测 → 虚拟机检测 → 风控绕过                           ││                                                                  ││ 5. 上传设备指纹到C2                                             ││    POST /user/im/reportBehavior                                 │└─────────────────────────────────────────────────────────────────┘                              ↓┌─────────────────────────────────────────────────────────────────┐│ 阶段3: 持久化                                                    │├─────────────────────────────────────────────────────────────────┤│ 1. 请求开机自启                                                  ││    RECEIVE_BOOT_COMPLETED                                       ││                                                                  ││ 2. 注册自启动Receiver                                           ││                                                                  ││ 3. 保持后台运行                                                  ││    FOREGROUND_SERVICE                                           ││                                                                  ││ 4. 定期与C2通信                                                  ││    心跳检测 + 指令接收                                           │└─────────────────────────────────────────────────────────────────┘                              ↓┌─────────────────────────────────────────────────────────────────┐│ 阶段4: 恶意攻击 (根据C2指令触发)                                │├─────────────────────────────────────────────────────────────────┤│ 场景A: 图标伪装钓鱼                                              ││   • 切换图标为"爱奇艺"                                          ││   • 诱导输入账号密码                                             ││   • 窃取iQiyi账号                                                ││                                                                  ││ 场景B: 赌博诈骗                                                  ││   • 幸运转盘抽奖 /dd/luckyTurntable/draw                        ││   • 诱导充值                                                     ││   • 打开钱包APP → com.example.wallet                            ││   • 窃取支付信息                                                 ││                                                                  ││ 场景C: 弹窗广告                                                  ││   • SYSTEM_ALERT_WINDOW                                          ││   • 覆盖银行/支付APP                                             ││   • 推送钓鱼广告                                                 ││                                                                  ││ 场景D: 持续窃密                                                  ││   • 读取相册/文档                                                ││   • 监听通话/短信                                                ││   • 偷拍偷录                                                     │└─────────────────────────────────────────────────────────────────┘                              ↓┌─────────────────────────────────────────────────────────────────┐│ 阶段5: 数据变现                                                  │├─────────────────────────────────────────────────────────────────┤│ 设备指纹 → 出售给广告商/黑产                                    ││ 账号密码 → 撞库攻击/账号交易                                    ││ 支付信息 → 资金盗刷                                              ││ 隐私数据 → 勒索/曝光                                            │└─────────────────────────────────────────────────────────────────┘

6.2 攻击流程图

                              ┌──────────────────┐                              │   恶意APK传播    │                              └────────┬─────────┘                                       ↓                              ┌──────────────────┐                              │ 用户安装+授权    │                              └────────┬─────────┘                                       ↓                    ┌─────────────────┼─────────────────┐                    ↓                 ↓                 ↓           ┌──────────────┐  ┌──────────────┐  ┌──────────────┐           │  收集设备信息  │  │  建立持久化  │  │  连接C2服务器 │           └──────────────┘  └──────────────┘  └──────────────┘                    │                 │                 │                    └─────────────────┼─────────────────┘                                       ↓                              ┌──────────────────┐                              │   等待C2指令     │                              └────────┬─────────┘                                       ↓          ┌────────────────────────────┼────────────────────────────┐          ↓                            ↓                            ↓   ┌──────────────┐            ┌──────────────┐            ┌──────────────┐   │  图标伪装钓鱼 │            │  赌博充值诈骗 │            │  弹窗广告    │   └──────────────┘            └──────────────┘            └──────────────┘          │                            │                            │          └────────────────────────────┼────────────────────────────┘                                       ↓                              ┌──────────────────┐                              │   数据变现       │                              └──────────────────┘

七、静态分析总结与建议

7.1 威胁定级

维度
评级
说明
恶意程度
🔴严重
完整攻击链: 钓鱼+赌博+窃密
技术水平
🟠高级
APK签名块隐藏、动态图标
隐蔽能力
🔴严重
多图标伪装、反调试检测
传播能力
🟡中等
成人内容网站/群聊传播
实际危害
🔴严重
账号盗窃、资金盗刷

综合威胁等级: 🔴 严重

7.2 样本特征总结

特征项
详情
样本类型
赌博诈骗类木马
开发框架
Flutter
核心隐藏技术
APK签名块配置
主要攻击方式
图标伪装 + 赌博诱导
C2通信
HTTP + WebSocket
加密模块
librsa_bridge.so

7.3 IoC指标

包名: odt.coisukjlpe.mtwpzovC2域名:  - jlgdyf.com  - fzmhe5lai.appURL Scheme:  - hqbpays  - lxspvideo方法Channel:  - com.example.app/packages  - com.example.flutter_jtvideo/wallet_launcher钱包包名:  - com.example.wallet

7.4 防护建议

建议
说明
不安装未知来源APK
尤其成人/赌博类
谨慎授权权限
拒绝非必要权限
定期安全扫描
使用安全软件
关注应用行为
异常立刻卸载
开启系统安全
实时保护

7.5 分析结论

该样本是一款技术成熟的Android木马病毒,具备以下特征:

✅ 高级隐藏技术 – APK签名块配置隐藏,绕过静态分析
✅ 多维度伪装 – 7个图标动态切换,冒充正规应用
✅ 完整攻击链 – 从钓鱼窃密到赌博诈骗
✅ 专业对抗能力 – 反调试/模拟器检测
✅ 模块化设计 – Flutter框架 + 钱包模块分离

建议: 绝对不要在真机上安装此类应用,如已安装请立即卸载并更改相关账号密码。


写在最后

这个App,相对来说,诱导性比较强,容易让人中招,而某些病毒App可以在你无感的情况下转走你的金钱,而这大多数是通过无障碍权限申请哎实现的。

紧急!安卓零点击漏洞爆发,你的手机正在被悄悄控制中提到了无障碍权限,再次强调,陌生App要无障碍,直接拒绝!

对于恶意的App,如果你开启了无障碍的权限,App可以在你完全无感的情况下,比如在你熟睡之后,悄无声息的控制你的手机转走你的资金,并且删除相应的短信消息,甚至盗用你的身份信息进行网络贷款

你还敢看“小电影”吗?中最后的那个提示很重要: App要从正规的应用商店下载。 哎,当前各个平台的审核也是一言难尽,但总比从浏览器等非正规场所强一点吧。

更多内容,欢迎关注我的微信公众号: 半夏之夜的无情剑客。

本站文章均为手工撰写未经允许谢绝转载:夜雨聆风 » 从技术角度告诉你:为什么’黄赌毒’APP碰不得

评论 抢沙发

3 + 4 =
  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
×
订阅图标按钮