-
-
[求助]双层加固壳如何逆向
-
发表于: 6天前 574
-
完整逆向分析报告
应用真实身份揭秘
基本信息
- 包名:
com.lingmeow.ai - 真实用途: 桌球游戏辅助工具(图像识别 + 辅助线绘制)
应用架构(三层结构)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | APK完整结构│├── 外层壳1:天宇加固 │ ├── com.stub.StubApp - 壳入口│ ├── com.tianyu.util.DtcLoader│ └── Native库: libjiagu*.so (4个架构版本)│├── 外层壳2:360加固 │ ├── com.qihoo.jiagu│ ├── com.stub.stub07.Stub01│ └── com.jg.ids - 设备指纹│└── 内层应用:台球辅助 ├── com.ming.remote.ActivationActivity - 激活验证 ├── com.ming.remote.MainActivity - 主界面 └── com.ming.remote.Floating3Service - 悬浮窗服务 |
第一部分:Assets文件分析
1. 关键文件清单
a) 加固壳Native库
1 2 3 4 | libjiagu.so - ARM 32位 (865KB)libjiagu_x86.so - x86 32位 (764KB)libjiagu_a64.so - ARM 64位 (1.16MB)libjiagu_x64.so - x86 64位 (859KB) |
作用: 天宇加固的核心解密引擎,支持4种CPU架构
c) 加固标识
1 2 | .jgapp内容: 8b53e1a534625cb4 |
作用: 360加固的应用标识符,用于验证加固完整性
d) 台球辅助核心数据
1 2 3 4 | angle_offsets.json - 角度偏移校准数据ring_template.png - 圆环模板图像(8KB)ring_template1.png - 圆环模板1(234KB)ring_template2.png - 圆环模板2(15KB) |
功能:
- 图像识别模板,用于识别台球桌上的球和球洞
- 角度偏移数据用于计算击球方向
1 2 3 4 5 6 7 | **关键信息**:- 明确说明是"图像识别 + 可视化辅助线绘制"工具- 用于台球游戏的击球方向可视化- 声明不修改游戏内存,仅做屏幕图像分析- 付费软件,需要激活码#### f) 其他依赖 |
PublicSuffixDatabase.list - 公共后缀数据库(网络相关)
org/apache/commons/math3/ - Apache数学库(角度计算)
webkit/ - WebView相关资源
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | ---## 第二部分:源码分析### 1. 激活验证系统(ActivationActivity.java)#### 激活流程```java// 云端验证LCCloud.callFunctionInBackground("activateV2", { "code": 激活码, "deviceId": 设备ID, "deviceInfo": { "deviceBrand": 设备品牌, "osName": 系统名称, "osVersionName": 系统版本, "androidRelease": Android版本 }}) |
反调试检测
1 2 3 4 5 | // 检测 /proc/self/maps 中的调试工具detectHookEnvironment() { 检测: frida, xposed, substrate 如果检测到 → killApp() 强制终止} |
本地存储
1 2 3 4 | SharedPreferences: "prefs"- activation_token: 激活令牌- agreement_accepted: 用户协议同意状态- show_battery_dialog: 电池优化提示 |
2. 主功能实现(ki/MainActivity.java)
权限请求
悬浮窗权限 (SYSTEM_ALERT_WINDOW)
- 用于在游戏上层显示辅助线
屏幕录制权限 (MediaProjection)
- 用于实时捕获游戏画面进行图像识别
服务启动
1 2 3 4 5 | Intent serviceIntent = new Intent(this, Floating3Service.class);serviceIntent.putExtra("resultCode", resultCode);serviceIntent.putExtra("data", data);serviceIntent.putExtra("orientation", "landscape/portrait");startForegroundService(serviceIntent); |
3. 双层加固保护
天宇加固
1 2 3 4 5 6 7 8 9 10 11 12 | // 字符串加密: XOR(16)public static String decrypt(String encrypted) { for (char c : encrypted) { result += (char)(c ^ 16); }}// 动态加载System.load("/data/data/com.lingmeow.ai/files/.jiagu/libjiagu.so");// 1000+ 混淆native方法n0112222222222222220(long, long, ...) |
360加固
1 2 3 4 5 6 7 | // 设备指纹采集IdsHelper.getOAID() // 开放匿名设备标识IdsHelper.getVAID() // 供应商匿名设备标识IdsHelper.getAAID() // 应用匿名设备标识// 崩溃上报上报地址: http://c.appjiagu.com/apk/cr.html |
第三部分:功能推测
核心工作流程
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | 1. 应用启动 ↓2. 激活验证(LeanCloud云端) ↓3. 请求悬浮窗 + 屏幕录制权限 ↓4. 启动 Floating3Service 前台服务 ↓5. 实时捕获游戏画面 ↓6. 图像识别(使用ring_template*.png模板) - 识别台球位置 - 识别球洞位置 - 识别母球位置 ↓7. 计算击球角度(使用angle_offsets.json校准) ↓8. 在悬浮窗绘制辅助线 - 显示击球方向 - 显示预测轨迹 |
技术实现细节
图像识别
- 模板匹配: 使用OpenCV库
- 模板文件:
ring_template.png- 可能是球洞识别模板ring_template1.png- 可能是台球识别模板ring_template2.png- 可能是母球识别模板
角度计算
- 数学库: Apache Commons Math3
- 校准数据:
angle_offsets.json- 存储了-180°到180°每5°的偏移校准值
- 用于修正不同角度下的识别误差
悬浮窗绘制
- 服务:
Floating3Service(前台服务) - 权限:
SYSTEM_ALERT_WINDOW - 方向: 支持横屏/竖屏 (orientation参数)
第四部分:安全机制分析
多层防护体系
Level 1: 应用层防护
激活验证
- 云端实时验证(LeanCloud)
- 设备ID绑定
- 激活码一机一码
反调试
- 检测Frida/Xposed/Substrate
- 检测到后立即终止应用
- 使用Sentry上报安全事件
用户协议
- 强制同意才能使用
Level 2: 360加固层
设备指纹
- OAID/VAID/AAID三重标识
- 防止多设备共用激活码
崩溃上报
- 自动上报异常到360服务器
- 收集运行轨迹数据
网络监控
- 监听网络状态变化
- 可能用于检测代理/抓包
Level 3: 天宇加固层
DEX加密
- 真实DEX在运行时解密
- 存储在
.jiagu隐藏目录
SO加密
- 4个架构的native库都加密
- 动态加载到内存
字符串混淆
- XOR(16)加密所有关键字符串
- 1000+ native方法名混淆
赞赏
他的文章
- [求助]双层加固壳如何逆向 575
赞赏
雪币:
留言: