新手向|LE 手游助手逆向分析:反调试机制与关键检测点解析

LE新版手游助手分析交流文档

LE 新版手游助手分析文档(QuickAssistant 2.0.1.1)

一、目标软件与研究背景

软件信息

项目

内容

名称

QuickAssistant 2.0.1.1

类型

Android 实时投屏 / 控制工具(Qt 程序,USB / libusb / 驱动)

GitHub

barry-ran/QuickAssistant

 

  本次分析 已取得作者明确授权,仅用于学习、研究与技术交流,不涉及任何商业用途,也不会提供或传播可执行程序、补丁或破解成品。

研究目的

  1. 分析异常退出、蓝屏、反调试行为
  1. 理解用户态 (R3) 与内核态 (R0) 交互、驱动检测、反分析机制
  1. 对比原版 QtScrcpy / LE 助手,定位二次开发新增逻辑

项目概述

对一款商业化Android投屏工具(QuickAssistant 2.0.1.1)进行了完整的逆向工程分析,该软件集成了多层安全验证机制,包括时间授权、反调试、硬件指纹和驱动级保护。

软件展示:

分析之后:无需登录正常使用所有功能

技术挑战

  • 多层防护体系:应用层、系统API层、内核驱动层协同防护
  • 动态检测机制:运行时环境监控与异常行为检测
  • 复杂验证逻辑:时间授权、硬件绑定、调试环境的多维验证
  • 反分析技术:多种反调试、反逆向技术的组合应用

关键技术分析

  1. 验证机制架构分析
    1. 识别并分析了基于Qt框架的时间授权验证系统
    1. 解析了用户态-内核态通信模型(DeviceIoControl/Nt API)
    1. 揭示了硬件指纹采集与验证的完整流程
  1. 安全防护技术研究
    1. Windows NT Native API在安全防护中的应用(NtSetInformationThread等)
    1. 多线程环境下的实时监控与检测机制
    1. 异常处理链的干扰与保护技术
  1. 系统级交互分析
    1. 驱动通信协议与IOCTL控制码解析
    1. 进程间通信(管道/共享内存)的安全实现
    1. 系统服务调用的监控与拦截点分析

分析方法与工具链

  • 静态分析:IDA Pro/Ghidra二进制分析,PE结构解析
  • 动态调试:x64dbg/Cheat Engine运行时分析
  • 系统监控:Process Monitor/API Monitor系统调用跟踪
  • 流量分析:Wireshark网络通信分析(预留验证通道)

技术成果

  1. 完整的安全架构图:绘制了从应用层到驱动层的防护体系
  1. 关键技术实现文档:详细记录了各验证点的实现原理
  1. 分析方法论总结:形成了针对多层防护软件的分析流程
  1. 潜在攻击面分析:识别了安全机制的薄弱环节和改进方向

能力体现

  • 逆向工程能力:复杂商业软件的完整逆向分析
  • 系统安全理解:Windows安全机制的深度掌握
  • 架构分析能力:多层安全防护体系的分析与理解
  • 问题解决能力:系统性分析方法的建立与应用
  • 文档编写能力:技术细节的清晰表达与结构化呈现

技术栈应用

  • Windows系统编程(NT API、驱动通信)
  • 二进制逆向分析(x86/x64汇编、PE格式)
  • 调试技术(用户态/内核态调试)
  • 安全机制(反调试、代码保护、验证体系)

二、初期现象总结(问题导向)

1️⃣ 调试异常与蓝屏

  • 在调试状态下,程序可能导致 蓝屏
  • 蓝屏触发点:
    1. 检测常用调试器模块
    1. R3 ↔ R0 驱动交互
    1. 执行特权相关操作 → 系统崩溃
  • 判断:属于刻意的反调试/反分析逻辑

2️⃣ 程序行为异常

  • 即使绕过调试:
    1. 程序能运行一段时间
    1. 后续无提示退出
  • 调用链发现:
    1. ntdll!NtTerminateProcess
    1. kernel32!ExitProcess
  • 结论:逻辑自杀 / 条件退出,而非崩溃

三、静态分析(IDA Pro)

1️⃣ 导入表与关键 API

  • 关键 API:
    1. DeviceIoControl
    1. NtSetInformationThread
    1. NtCreateFile
    1. NtDeviceIoControlFile
    1. FindWindow
  • 说明:
    1. 用户态 → 驱动通信能力
    1. 系统级反调试能力

2️⃣ 反调试 API / 字符串

  • 反调试APINtSetInformationThread → ThreadHideFromDebugger
  • 关键字符串示例:"noUsbDebugMode"
  • API 检测:
    1. IsDebuggerPresent
    1. CheckRemoteDebuggerPresent
    1. NtQueryInformationProcess(ProcessDebugPort / ProcessDebugFlags / ProcessDebugObjectHandle)
  • 窗口级:
    1. FindWindow("OLLYDBG")、WinDbgFrameClass
  • 进程枚举:
    1. CreateToolhelp32Snapshot → 枚举 x64dbg、IDA、CheatEngine 等
  • CPU / 寄存器检测:
    1. GetThreadContext → Dr0–Dr3、Dr6、Dr7
  • 异常干扰:
    1. EXCEPTION_SINGLE_STEP
    1. 内存不可执行(NX)
    1. 人为制造 0xC0000005

3️⃣ 驱动 / 设备交互线索

  • 关键设备 / 管道:
    1. \\.\pipe\libwdi-installer
    1. \\.\pipe\crashpad_%lu_
    1. \\.\libusb0-%04u
  • 说明:
    1. libusb、USB 枚举、Crashpad 日志收集
    1. 自定义驱动或安装器存在
  • NtDeviceIoControlFile 调用:
    1. 检测异常来源 → 驱动层非当前突破口

四、运行时与线程分析

1️⃣ 用户态线程

  • 主线程:
    1. ntdll!RtlUserThreadStart
    1. kernel32!BaseThreadInitThunk
    1. ntdll!KiUserExceptionDispatcher
  • 异常类型:
    1. EXCEPTION_SINGLE_STEP
    1. EXCEPTION_ACCESS_VIOLATION
    1. NX 执行异常
  • 说明:程序主动制造异常干扰调试器

2️⃣ Qt 生命周期

  • Qt 主循环:
    1. QApplication::exec()
    1. 布局字符串:QLayout: Attempting to add QLayout "%ls"
  • 说明:反调逻辑嵌入 Qt 程序生命周期

五、动态行为分析(火绒剑观察)

  • 程序后台启动 WMIC.exe
  • 用途:
    1. 收集硬件信息
    1. 查询注册表 / WMI
    1. 生成环境指纹
  • 效果:
    1. 驱动不存在 / 调试被发现 → 程序自杀 (ExitProcess)
  • 判断:WMIC 是二次开发新增环节

# WMIC可能收集的信息类型
WMIC_QUERIES = {
"bios": "wmic bios get SerialNumber", # BIOS序列号
"baseboard": "wmic baseboard get Product,SerialNumber", # 主板信息
"cpu": "wmic cpu get ProcessorId", # CPU ID
"diskdrive": "wmic diskdrive get SerialNumber", # 硬盘序列号
"os": "wmic os get SerialNumber", # Windows序列号
"nic": "wmic nic get MACAddress", # 网卡MAC
"computersystem": "wmic computersystem get UUID" # 系统UUID
}
# 这些信息组合生成硬件指纹,用于授权绑定

六、对比分析

  • 原版 QtScrcpy 与 LE 助手对比:
    1. Qt 主流程一致
    1. 新增反调逻辑 / WMIC / 驱动交互为二次开发新增
  • 字符串冲突:
    1. "This software is completely open source" → 行为不一致
  • 结论:
    1. 问题不在原项目
    1. 二次开发者增加“恶心人的反调逻辑”

七、试用时间与卡密登录校验分析

1️⃣ 关键对象与字段

层次

对象 / 字段

用途

管理层

TrialManager

, trialTime

, endtime

存储试用状态、时间字段

判定层

UserController::overstepTrialTime

判断是否过期

结果层

"Account has expired"

, "Left trial time: %1 minutes"

, "Remaining trial time: {}"

UI / 日志显示 / 状态消费

2️⃣ 调试 / 修改建议

  • Qt 常用时间 API:
    1. QDateTime::currentDateTime()
    1. QDateTime::currentSecsSinceEpoch()
    1. QElapsedTimer
    1. std::chrono
  • 实战:
    1. 给这些函数下断
    1. 回溯调用栈
    1. 定位谁在读取“当前时间”
    1. 可直接修改 UserController::overstepTrialTime 返回值尝试修改不同参数查看运行结果
    1. 此处很巧的是验证时间与登录状态耦合性很高,均在这个函数内;无需再进行单独分析是否登录

八、阶段性总结

  1. 反调试机制多层
    1. API 检测、线程隐藏、异常干扰
    1. 驱动通信 + WMIC 环境指纹
  1. 非壳化,而是“堆量型反调试”
    1. 逻辑分散
    1. 目的:干扰调试、绕分析
  1. 试用时间判断点
    1. TrialManager → UserController::overstepTrialTime → UI/日志
    1. 核心逻辑可通过修改返回值或拦截时间 API 控制

九、实战建议(逆向 / 调试)

  1. 断点策略
    1. 条件断点:overstepTrialTime() 返回值 / 试用时间字段
    1. 时间 API:QDateTime、std::chrono、QElapsedTimer
  1. 线程分析
    1. 确认线程 ID / 调用栈
    1. 断在后台线程也能捕获逻辑
  1. 返回值拦截
    1. 直接写寄存器 / 栈 → 强制 false
  1. 动态行为监控
    1. WMIC / 驱动交互 → 可记录 / 阻断

┌───────────────────────────────┐
│ 程序启动 / 主线程 │
│ QApplication::exec() │
└─────────────┬─────────────────┘


┌───────────────────────────────┐
│ 线程隐藏 / 异常干扰 │
│ - NtSetInformationThread │
│ - EXCEPTION_SINGLE_STEP │
│ - NX / 人为 0xC0000005 │
└─────────────┬─────────────────┘


┌───────────────────────────────┐
│ 反调试初始化(API + 窗口) │
│ - IsDebuggerPresent │
│ - CheckRemoteDebuggerPresent │
│ - NtQueryInformationProcess │
│ - FindWindow("OLLYDBG") │
└─────────────┬─────────────────┘


┌───────────────────────────────┐
│ 驱动 / USB / WMIC 检测 │
│ - DeviceIoControl │
│ - NtDeviceIoControlFile │
│ - libusb / Crashpad / WMIC │
│ - 特权指令 / 硬件指纹收集 │
└─────────────┬─────────────────┘


┌───────────────────────────────┐
│ 检测调试 / 驱动失败 │
│ 条件退出 │
│ - ExitProcess / NtTerminateProcess
└─────────────┬─────────────────┘


┌───────────────────────────────┐
│ 试用时间判定流程 │
│ 1️⃣ TrialManager 对象 │
│ - trialTime / endtime │
│ 2️⃣ UserController::overstepTrialTime │
│ - 返回 true → 超时 │
│ - 返回 false → 未超 │
│ 3️⃣ UI / 日志输出 │
│ - "Account has expired" │
│ - "Left trial time: %1" │
└─────────────┬─────────────────┘


┌───────────────────────────────┐
│ 核心操作 / 功能执行 │
│ - Android 投屏 / 控制逻辑 │
│ - Qt 主事件循环 / 布局 │
└───────────────────────────────┘

posted @ 2026-02-01 12:28  白糖322  阅读(0)  评论(0)    收藏  举报