从技术角度告诉你:为什么’黄赌毒’APP碰不得
声明: 本报告仅供安全研究使用,请勿用于非法目的。
现在手机上网,充满诱惑的链接随处可见,一定要谨慎对待。这个是我上网过程中看到的,索性下载下来进行分析,一定不要在真机运行,风险很高的。我是通过模拟器运行的。
一、样本基础信息
1.1 基本信息
|
|
|
|
|
|
|
|
odt.coisukjlpe.mtwpzov |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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文件清单
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
二、核心恶意功能技术分析
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 攻击价值
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2.2 多图标动态伪装技术 🔴
该样本实现动态图标切换,可伪装成7个不同的合法应用。
2.2.1 Activity-alias配置清单
文件: resources/AndroidManifest.xml
<!-- 主Activity - 原始应用 --><activityandroid: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-aliasandroid: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-aliasandroid: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-aliasandroid: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-aliasandroid: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-aliasandroid: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-aliasandroid: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-aliasandroid: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: 获取所有ActivityActivityInfo[] 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_APPpackageManager.setComponentEnabledSetting(componentName, 2, 1);}// 步骤3: 启用指定伪装图标ComponentName componentName2 = new ComponentName(packageName, str13);// 1 = COMPONENT_ENABLED_STATE_ENABLEDpackageManager.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/模拟器CPUString 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;}// 检测Genymotionif (Build.MANUFACTURER.contains("Genymotion")) {return true;}// 检测VirtualBoxString 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 检测指标总结
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2.3.5 收集信息用途
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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);// 图标切换Channelnew j(flutterEngine.j().k(), this.f5479k).e(new j.c() {@Overridepublic void onMethodCall(i iVar, j.d dVar) {MainActivity.Q(this.f134f, iVar, dVar);}});// 钱包启动Channelnew j(flutterEngine.j().k(), this.f5480l).e(new j.c() {@Overridepublic 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;}// 获取传入的URLString str = (String) call.a("url");if (str == null || p.p(str)) {result.success(Boolean.FALSE);return;}try {// 创建IntentIntent 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// 启动钱包APPthis$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 |
|
|
MANAGE_EXTERNAL_STORAGE |
|
|
SYSTEM_ALERT_WINDOW |
|
|
REQUEST_INSTALL_PACKAGES |
|
|
CAMERA |
|
|
RECORD_AUDIO |
|
|
READ_EXTERNAL_STORAGE |
|
|
READ_CONTACTS |
|
|
ACCESS_FINE_LOCATION |
|
|
RECEIVE_BOOT_COMPLETED |
|
|
BLUETOOTH |
|
|
INTERNET |
|
|
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服务器
|
|
|
|
|
|
jlgdyf.com |
|
|
|
https://ijppzch.jlgdyf.com/jt-cg-jason.js |
|
4.2 标识域名
文件: resources/assets/flutter_assets/assets/product.a
xuhie6x.fzmhe5lai.app2d3scvm.fzmhe5lai.appbjsetk5.fzmhe5lai.app5qt417b.fzmhe5lai.appq2mazta.fzmhe5lai.app
4.3 URL 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 依赖清单
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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 威胁定级
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
综合威胁等级: 🔴 严重
7.2 样本特征总结
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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 防护建议
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
7.5 分析结论
该样本是一款技术成熟的Android木马病毒,具备以下特征:
✅ 高级隐藏技术 – APK签名块配置隐藏,绕过静态分析
✅ 多维度伪装 – 7个图标动态切换,冒充正规应用
✅ 完整攻击链 – 从钓鱼窃密到赌博诈骗
✅ 专业对抗能力 – 反调试/模拟器检测
✅ 模块化设计 – Flutter框架 + 钱包模块分离
建议: 绝对不要在真机上安装此类应用,如已安装请立即卸载并更改相关账号密码。
写在最后
这个App,相对来说,诱导性比较强,容易让人中招,而某些病毒App可以在你无感的情况下转走你的金钱,而这大多数是通过无障碍权限申请哎实现的。
在紧急!安卓零点击漏洞爆发,你的手机正在被悄悄控制中提到了无障碍权限,再次强调,陌生App要无障碍,直接拒绝!
对于恶意的App,如果你开启了无障碍的权限,App可以在你完全无感的情况下,比如在你熟睡之后,悄无声息的控制你的手机转走你的资金,并且删除相应的短信消息,甚至盗用你的身份信息进行网络贷款。
在你还敢看“小电影”吗?中最后的那个提示很重要: App要从正规的应用商店下载。 哎,当前各个平台的审核也是一言难尽,但总比从浏览器等非正规场所强一点吧。
更多内容,欢迎关注我的微信公众号: 半夏之夜的无情剑客。
夜雨聆风
