从技术角度告诉你:为什么’黄赌毒’APP碰不得(4) – PG娱乐城

在不怕你赢,就怕你不来中介绍了赌博不可能赢的数学原理, 在孤注一掷中的黑客技术中,电影也告诉我们网赌最终的的结局是输光。本文以一个具体的app为例,从技术上进行分析,包括软件的恶意行为以及庄家会如何决定胜负。
目录
1.样本概述[1]2.架构深度分析[2]3.权限深度分析[3]4.WebView安全分析[4]5.反分析与检测机制[5]6.加密与通信安全[6]7.庄家控制机制深度分析[7]8.IOC威胁指标[8]9.逆向分析技术方案[9]10.安全风险评估[10]11.劝诫与警示[11]12.总结[12]
1. 样本概述
|
|
|
|
|
|
|
|
chfk.ueifdasreh.qtznvd |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2. 架构深度分析
2.1 整体架构
┌─────────────────────────────────────────────────────────────────────────┐│ PG娱乐城 App │├─────────────────────────────────────────────────────────────────────────┤│ ┌─────────────────────────────────────────────────────────────────┐ ││ │ Dart VM (Flutter Layer) │ ││ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ ││ │ │ UI Widgets │ │ Business │ │ State │ │ ││ │ │ (View) │ │ Logic │ │ Management │ │ ││ │ └─────────────┘ └─────────────┘ └─────────────┘ │ ││ │ │ │ │ │ ││ │ └────────────────┼────────────────┘ │ ││ │ ▼ │ ││ │ ┌─────────────────────────────────────────────────────────────┐ │ ││ │ │ MethodChannel / EventChannel │ │ ││ │ │ (Platform Channel - Native Communication Bridge) │ │ ││ │ └─────────────────────────────────────────────────────────────┘ │ ││ └─────────────────────────────────────────────────────────────────┘ ││ │ ││ ┌─────────────────────────────────────────────────────────────────┐ ││ │ JNI Bridge Layer │ ││ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ ││ │ │librsa_bridge│ │ libapp.so │ │libflutter.so│ │ ││ │ │ .so │ │ (AOT) │ │ (Engine) │ │ ││ │ └─────────────┘ └─────────────┘ └─────────────┘ │ ││ └─────────────────────────────────────────────────────────────────┘ ││ │ ││ ┌─────────────────────────────────────────────────────────────────┐ ││ │ Android Runtime Layer │ ││ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ ││ │ │ WebView │ │Telephony │ │ Storage │ │ ││ │ │(InAppBrowser│ │ Manager │ │ (SQLite) │ │ ││ │ └─────────────┘ └─────────────┘ └─────────────┘ │ ││ └─────────────────────────────────────────────────────────────────┘ │└─────────────────────────────────────────────────────────────────────────┘│▼┌─────────────────────────────────────────────────────────────────────────┐│ Remote Server Cluster ││ ┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐ ││ │ Game Server │ │ Finance Server │ │ Analytics Server│ ││ │ │ │ │ │ │ ││ │ • RNG Control │ │ • Payment Gateway│ │ • User Profiling │ ││ │ • Game Logic │ │ • Risk Control │ │ • Behavior Track │ ││ │ • Result Calc │ │ • KYC/AML │ │ • A/B Testing │ ││ │ • Dynamic Odds │ │ • Fraud Detect │ │ • ML Prediction │ ││ └──────────────────┘ └──────────────────┘ └──────────────────┘ ││ ┌──────────────────┐ ┌──────────────────┐ ││ │ Proxy Network │ │ CDN/WAF │ ││ │ │ │ │ ││ │ • Layer-4 Proxy │ │ • CloudFlare │ ││ │ • IP Rotation │ │ • Anti-Crawling │ ││ └──────────────────┘ └──────────────────┘ │└─────────────────────────────────────────────────────────────────────────┘
2.2 核心组件详解
2.2.1 Flutter Platform Channel架构
// Flutter侧典型调用模式classPlatformChannel{static const MethodChannel _channel = MethodChannel('com.pg.game/methods');static const EventChannel _eventChannel = EventChannel('com.pg.game/events');// 调用Native方法Future<Map<String, dynamic>> invokeNativeMethod(String method, Mapargs) async{return await _channel.invokeMethod(method, args);}}
2.2.2 关键Native库分析
|
|
|
|
libflutter.so |
|
|
libapp.so |
|
高 |
librsa_bridge.so |
|
高 |
关键发现: librsa_bridge.so 是自定义RSA加密模块,用于:
•设备指纹加密上传•支付请求签名•通信数据加密•关键业务参数保护
3. 权限深度分析
3.1 完整权限清单
<!-- 网络权限 --><uses-permissionandroid:name="android.permission.INTERNET"/><uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE"/><uses-permissionandroid:name="android.permission.ACCESS_WIFI_STATE"/><uses-permissionandroid:name="android.permission.CHANGE_NETWORK_STATE"/><uses-permissionandroid:name="android.permission.CHANGE_WIFI_STATE"/><!-- 存储权限 --><uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"android:maxSdkVersion="32"/><uses-permissionandroid:name="android.permission.READ_EXTERNAL_STORAGE"android:maxSdkVersion="32"/><uses-permissionandroid:name="android.permission.MANAGE_EXTERNAL_STORAGE"android:maxSdkVersion="32"/><uses-permissionandroid:name="android.permission.READ_MEDIA_IMAGES"/><uses-permissionandroid:name="android.permission.READ_MEDIA_AUDIO"/><uses-permissionandroid:name="android.permission.READ_MEDIA_VIDEO"/><!-- 设备信息 --><uses-permissionandroid:name="android.permission.READ_PHONE_STATE"/><!-- 设备控制 --><uses-permissionandroid:name="android.permission.CAMERA"/><uses-permissionandroid:name="android.permission.FLASHLIGHT"/><uses-permissionandroid:name="android.permission.VIBRATE"/><uses-permissionandroid:name="android.permission.BLUETOOTH"/><uses-permissionandroid:name="android.permission.WAKE_LOCK"/><!-- 系统权限 --><uses-permissionandroid:name="android.permission.SYSTEM_ALERT_WINDOW"/><uses-permissionandroid:name="android.permission.FOREGROUND_SERVICE"/><uses-permissionandroid:name="android.permission.REQUEST_INSTALL_PACKAGES"/><uses-permissionandroid:name="android.permission.POST_NOTIFICATIONS"/><uses-permissionandroid:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
3.2 权限风险矩阵
|
|
|
|
|
READ_PHONE_STATE |
|
|
|
REQUEST_INSTALL_PACKAGES |
|
|
|
SYSTEM_ALERT_WINDOW |
|
|
|
CAMERA |
|
|
|
MANAGE_EXTERNAL_STORAGE |
|
|
|
RECEIVE_BOOT_COMPLETED |
|
|
|
BLUETOOTH |
|
|
|
4. WebView安全分析
4.1 WebView配置分析
// 核心WebView组件// com.pichillilorenzo.flutter_inappwebview_android// 关键配置发现:WebView webView = new WebView(context);webView.getSettings().setJavaScriptEnabled(true); // ✅ 启用JSwebView.getSettings().setDomStorageEnabled(true); // ✅ DOM存储webView.getSettings().setDatabaseEnabled(true); // ✅ 数据库webView.getSettings().setAllowFileAccess(true); // ⚠️ 文件访问webView.getSettings().setAllowContentAccess(true); // ⚠️ 内容访问webView.getSettings().setAllowFileURLAccess(true); // ⚠️ 文件URLwebView.getSettings().setGeolocationEnabled(true); // ⚠️ 位置信息webView.getSettings().setMediaPlaybackRequiresUserGesture(false); // ⚠️ 媒体自动播放
4.2 WebView攻击面
┌─────────────────────────────────────────────────────────────────┐│ WebView Security Issues │├─────────────────────────────────────────────────────────────────┤│ 1. JavaScriptInterface RCE ││ ├─ @JavascriptInterface 方法暴露 ││ ├─ 远程代码执行 (Android < 4.2) ││ └─ WebView.addJavascriptInterface() ││ ││ 2. 协议处理程序劫持 ││ ├─ shouldOverrideUrlLoading() 缺陷 ││ ├─ 恶意URL Scheme: javascript:, file://, tel: ││ └─ Deep Link 劫持 ││ ││ 3. SSL证书绕过 ││ ├─ onReceivedSslError() → handler.proceed() ││ ├─ 允许自签名证书 ││ └─ 中间人攻击风险 ││ ││ 4. 钓鱼攻击向量 ││ ├─ 透明WebView叠加 ││ ├─ 位置劫持 ││ └─ 证书钓鱼 ││ ││ 5. 数据泄露 ││ ├─ WebView访问file:// ││ ├─ Cookie/ Session 窃取 ││ └─ 本地存储明文敏感信息 │└─────────────────────────────────────────────────────────────────┘
4.3 WebView与JS通信
// 关键JS交互接口// WebViewChannelDelegate.java// Flutter → JS 调用channel.invokeMethod("callJsHandler", methodName, args);// JS → Flutter 调用window.flutter_inappwebview.callHandler(handlerName, ...args);// 关键发现:// 1. 完整的JS执行环境暴露// 2. 可以从WebView提取任意数据// 3. 服务器可以注入恶意JS代码
5. 反分析与检测机制
5.1 检测代码分析
// 来自 za.C4321a.javapublic static boolean isDebuggable(BuildType buildType) {// 检测是否为调试版本String buildType = Build.TYPE;return "eng".equals(buildType) || "userdebug".equals(buildType);}
// 来自 p304z8.C4301b.java// 模拟器检测private static boolean checkDeviceInfo() {String fingerprint = Build.FINGERPRINT;// 检测常见模拟器特征if (fingerprint.contains("sdk_google") ||fingerprint.contains("google_sdk") ||fingerprint.contains("sdk") ||fingerprint.contains("sdk_x86") ||fingerprint.contains("vbox86p") ||fingerprint.contains("emulator") ||fingerprint.contains("simulator")) {return true; // 是模拟器}return false;}
5.2 检测能力矩阵
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
结论: 反分析能力较弱,可使用Frida进行动态分析。
6. 加密与通信安全
6.1 加密架构
┌─────────────────────────────────────────────────────────────────┐│ Encryption Architecture │├─────────────────────────────────────────────────────────────────┤│ Layer 1: Transport Layer ││ ├─ TLS 1.2/1.3 (标准) ││ ├─ 证书固定 (Certificate Pinning) - 需动态确认 ││ └─ Hostname Verification ││ ││ Layer 2: Application Layer ││ ├─ librsa_bridge.so (自定义RSA加密) ││ │ ├─ RSA-2048 公钥加密 ││ │ └─ 敏感参数保护 ││ │ ││ └─ OkHttp3 (HTTP客户端) ││ ├─ Interceptor 链 ││ ├─ Cookie 自动管理 ││ └─ 缓存策略 ││ ││ Layer 3: Local Storage ││ ├─ SharedPreferences (配置) ││ ├─ SQLite (业务数据) ││ └─ Flutter SecureStorage (敏感信息) │└─────────────────────────────────────────────────────────────────┘
6.2 关键加密点
// RSA 加密流程推测// librsa_bridge.so 导出函数public class RSABridge {// 典型用法:// 1. 设备信息加密String encryptedIMEI = RSA.encrypt(imei, publicKey);// 2. 支付签名String signature = RSA.sign(requestParams, privateKey);// 3. 关键通信参数保护String encryptedSession = RSA.encrypt(sessionKey, publicKey);}
7. 庄家控制机制深度分析
7.1 服务端控制架构
这是典型的 Server-Controlled (SC) 架构,游戏逻辑完全在服务端:
┌─────────────────────────────────────────────────────────────────────────┐│ Game Result Control Flow │├─────────────────────────────────────────────────────────────────────────┤│ Client Server ││ ────── ────── ││ ││ ┌──────────┐ ┌──────────┐ ││ │ User │ │ Game │ ││ │ Bet │ ───── HTTP Request ────▶ │ Engine │ ││ │ Request │ {bet_amount, game_id, │ │ ││ │ │ user_id, timestamp, │ 1. Auth │ ││ │ │ device_fingerprint} │ 2. Check │ ││ └──────────┘ │ 3. Calc │ ││ │ 4. Adjust│ ││ └────┬─────┘ ││ │ ││ Result Calculation ││ (Server-Side Only) ││ │ ││ ┌──────────┐ ┌────▼─────┐ ││ │ Display │ ◀──── HTTP Response ──── │ Result │ ││ │ Result │ {win/loss, payout, │ { │ ││ │ │ new_balance, odds, │ result, │ ││ │ │ bonus_info} │ odds, │ ││ └──────────┘ │ balance │ ││ │ } │ ││ └──────────┘ │└─────────────────────────────────────────────────────────────────────────┘
7.2 推测的服务器端算法
# 推测的游戏服务器逻辑(基于逆向工程和同类研究)class GameServer:def __init__(self):self.user_db = UserDatabase()self.rng = RandomNumberGenerator()self.config = GameConfig()def process_bet(self, user_id, game_id, bet_amount, params):"""核心投注处理逻辑 - 完全服务端控制"""user = self.user_db.get(user_id)# 1. 用户画像分析user_profile = self.analyze_user(user)# 2. 动态赔率计算odds = self.calculate_odds(user_profile, game_id)# 3. 结果判定(核心操控点)if self.should_user_win(user_profile):result = self.generate_win_result(odds)else:result = self.generate_loss_result()# 4. 账户更新self.update_balance(user_id, result)return resultdef analyze_user(self, user):"""用户画像分析 - 决定是否"杀猪""""return {'total_deposited': user.total_deposited,'total_bet': user.total_bet,'total_won': user.total_won,'win_rate': user.win_rate,'session_duration': user.session_duration,'deposit_frequency': user.deposit_frequency,'vip_level': user.vip_level,'is_whale': user.total_deposited > 10000, # 大户'is_recent_user': user.registered_days < 7, # 新用户'last_big_win': user.last_big_win_days_ago,}def should_user_win(self, profile):"""关键决策:是否让用户赢钱"""# 新用户/潜在客户:让赢,培养信心if profile['is_recent_user'] and profile['total_deposited'] < 500:return True# 大户但开始赢钱:开始收割if profile['is_whale'] and profile['last_big_win'] < 3:return False # 开始杀# 老用户持续亏损:给点甜头if profile['total_bet'] > 5000 and profile['win_rate'] < 0.2:if random.random() < 0.1: # 10%概率放水return True# 根据配置的概率return random.random() < self.config.base_win_rate
7.3 典型操控策略
|
|
|
|
|
| 新手福利 |
|
|
|
| 杀猪盘 |
|
|
|
| 阶梯陷阱 |
|
|
|
| VIP收割 |
|
|
|
| 限流提现 |
|
|
|
| IP风控 |
|
|
|
7.4 数学上的必然亏损
┌─────────────────────────────────────────────────────────────────┐│ 赌博必输的数学证明 │├─────────────────────────────────────────────────────────────────┤│ 玩家期望收益率计算: ││ ││ E = 投入 × (1 - 抽水率) × (实际胜率 - 1) ││ ││ 关键变量分析: ││ ││ 1. 抽水率 (House Edge): ││ ├─ 典型值: 5% - 20% ││ ├─ 无论输赢都扣除 ││ └─ 数学上对玩家不利 ││ ││ 2. 实际胜率 (Real Win Rate): ││ ├─ 官方宣称的概率 vs 实际概率 ││ ├─ 服务器可随时调整 ││ └─ 无第三方审计 ││ ││ 3. 动态操控 (Dynamic Manipulation): ││ ├─ 根据用户画像实时调整 ││ ├─ 新用户高胜率 → 培养信心 ││ ├─ 老用户低胜率 → 最大化收益 ││ └─ 大户特殊对待 → 重点收割 ││ ││ 结论: E < 0 → 长期必然亏损 │└─────────────────────────────────────────────────────────────────┘
8. IOC威胁指标
8.1 应用指标
包名: chfk.ueifdasreh.qtznvd版本: 4.3.3签名算法: SHA256withRSAAPK大小: ~25MB (估算)
8.2 网络指标(推测)
通信协议:├─ HTTPS (TLS 1.2+)├─ WebSocket (实时通信)└─ 自定义二进制协议C2域名模式:├─ *.pg999.* (娱乐城)├─ *.cp888.* (彩票)├─ *.game998.* (博彩)└─ CDN: Cloudflare/AWSAPI端点 (推测):├─ /api/game/bet├─ /api/game/result├─ /api/user/login├─ /api/payment/create├─ /api/payment/withdraw└─ /api/agent/register
8.3 文件指标
关键文件:├─ /data/data/chfk.ueifdasreh.qtznvd/├─ /data/data/chfk.ueifdasreh.qtznvd/shared_prefs/├─ /data/data/chfk.ueifdasreh.qtznvd/databases/└─ /data/data/chfk.ueifdasreh.qtznvd/files/
9. 逆向分析技术方案
9.1 动态分析环境
┌─────────────────────────────────────────────────────────────────┐│ 推荐分析环境 │├─────────────────────────────────────────────────────────────────┤│ 硬件: ││ ├─ 物理设备 (非模拟器) - 绕过检测 ││ └─ Root设备 (Magisk + LSPosed) ││ ││ 工具链: ││ ├─ Frida (Hook框架) ││ ├─ Objection (自动Hook) ││ ├─ mitmproxy (流量分析) ││ ├─ Burp Suite (HTTPS抓包) ││ └─ Jadx-GUI (反编译) ││ ││ 网络: ││ └─ Charles/Burp 代理 + SSL证书安装 │└─────────────────────────────────────────────────────────────────┘
9.2 关键Hook点
// 1. 设备信息收集HookJava.perform(function() {var TelephonyManager = Java.use("android.telephony.TelephonyManager");TelephonyManager.getDeviceId.implementation = function() {console.log("[+] getDeviceId called");console.log(new Error().stack);return this.getDeviceId();};TelephonyManager.getSubscriberId.implementation = function() {console.log("[+] getSubscriberId called");return this.getSubscriberId();};});// 2. RSA加密HookInterceptor.attach(Module.findExportByName("librsa_bridge.so", "RSA_encrypt"), {onEnter: function(args) {console.log("[+] RSA Encrypt input:");console.log(hexdump(args[0], {length: 256}));},onLeave: function(retval) {console.log("[+] RSA Encrypt output:");console.log(hexdump(retval, {length: 256}));}});// 3. WebView URL HookJava.perform(function() {var WebView = Java.use("android.webkit.WebView");WebView.loadUrl.implementation = function(url) {console.log("[+] WebView loading: " + url);return this.loadUrl(url);};});
10. 安全风险评估
10.1 用户面临的风险
10.1.1 资金安全
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
10.1.2 隐私安全
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
10.1.3 法律风险
•刑事风险: 参与网络赌博违法•资金损失: 不受法律保护•信息泄露: 可能被用于其他犯罪
10.2 技术评估总结
┌─────────────────────────────────────────────────────────────────┐│ Security Assessment │├─────────────────────────────────────────────────────────────────┤│ 架构安全性 ││ ✅ Flutter框架 (代码混淆) ││ ✅ HTTPS传输加密 ││ ✅ RSA敏感数据保护 ││ ❌ WebView安全配置不当 ││ ❌ 无SSL Pinning (推测) ││ ││ 反分析能力 ││ ✅ 模拟器检测 ││ ✅ 调试版本检测 ││ ❌ Root检测 ││ ❌ Frida检测 ││ ││ 隐私保护 ││ ❌ 过度权限申请 ││ ❌ 设备指纹收集 ││ ❌ 行为追踪 ││ ││ 综合评级: 高风险应用 (High Risk) │└─────────────────────────────────────────────────────────────────┘
11. 劝诫与警示
11.1 网络赌博的危害
┌─────────────────────────────────────────────────────────────────┐│ 赌博危害全景 │├─────────────────────────────────────────────────────────────────┤│ 经济损失: ││ ├─ 初期: 小额盈利 → 产生幻觉"能赚钱" ││ ├─ 中期: 逐渐亏损 → 不甘心的"翻本"心理 ││ ├─ 后期: 大额亏损 → 借债/抵押/欺骗 ││ └─ 结局: 债务危机 → 家庭破裂 → 极端行为 ││ ││ 心理伤害: ││ ├─ 焦虑/抑郁 ││ ├─ 失眠/强迫 ││ ├─ 自尊丧失 ││ └─ 人格改变 ││ ││ 社会影响: ││ ├─ 家庭破裂 ││ ├─ 犯罪率上升 ││ └─ 社会不稳定 │└─────────────────────────────────────────────────────────────────┘
11.2 庄家典型话术
|
|
|
|
| 引流 |
|
|
| 培养 |
|
|
| 诱导 |
|
|
| 收割 |
|
|
| 安抚 |
|
|
12. 总结
技术层面
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
核心结论
1.游戏不公平: 游戏逻辑完全在服务器端,庄家可完全控制结果2.必然亏损: 数学上设计为庄家必赢3.风险极高: 用户面临资金、隐私、法律多重风险4.违法活动: 网络赌博在中国境内违法
请立即卸载此类应用,珍爱生命,远离赌博!
References
[1] 样本概述:#1-样本概述[2]架构深度分析:#2-架构深度分析[3]权限深度分析:#3-权限深度分析[4]WebView安全分析:#4-webview安全分析[5]反分析与检测机制:#5-反分析与检测机制[6]加密与通信安全:#6-加密与通信安全[7]庄家控制机制深度分析:#7-庄家控制机制深度分析[8]IOC威胁指标:#8-ioc威胁指标[9]逆向分析技术方案:#9-逆向分析技术方案[10]安全风险评估:#10-安全风险评估[11]劝诫与警示:#11-劝诫与警示[12]总结: #12-总结
夜雨聆风