学而思网校客户端 · 网络行为被动观测报告

目标:Xes_Literacy_Client v11.00.05(好未来 / TAL)· 阶段:第一阶段 被动观测(Passive)
采样窗口 2026-10-07 12:06 – 12:10 观测方式:本机连接表 + 落盘日志取证 未抓包 · 未设代理 · 未注入 · 未改包 未使用管理员权限
说明:本阶段全程只做「读」——读取操作系统连接表、客户端自身的缓存与日志文件。没有安装驱动、没有开启代理、没有对目标流量做任何修改或重放。因此观测结果对客户端完全不可见,不影响其正常运行,也不会触发其环境检测机制。

一、结论速览

10
同属该客户端的常驻进程
23
观测到的远端 IP(443/8443/80/9136/9137/5559)
9 类
可归类的业务域名资产
7 家
第三方能力供应商(RTC / AI / 存储 / 风控)

四个最关键的发现

  1. 客户端用阿里云 HTTPDNS 做域名解析(203.107.1.1:443 / 203.107.1.34:443)。这意味着走 UDP 53 端口的常规 DNS 观测基本拿不到有效信息——域名解析被封装在 HTTPS 里。这是本阶段最重要的技术判断,直接决定了后续观测手段的选择。
  2. 客户端是"多进程 + 多 RTC 引擎并存"架构:主进程 pcs_literacy.exe 拉起界面进程与 6 类子进程;音视频层同时内置声网 Agora、火山引擎 VolcEngine、腾讯 TRTC、自研 OmniRtc 四套 RTC SDK,属于明显的多供应商冗余/灰度设计。
  3. 存在主动环境检测组件(XesMonitor.exe、XesCheck.exe、AutoCheckTool.exe)。这类模块的典型职责就是检测代理、虚拟网卡、抓包工具与调试器。所以后续若进入主动阶段,很可能被识别。
  4. 资源下发走明文 HTTP,且其中一条是长连接:http://liveclient.xesimg.com/student/resource_load/… 没有 TLS 保护;更值得注意的是 39.105.53.105:80 这条明文连接在 58 秒采样窗口内全程保持 Established,不是一次性下载。这是整条链路上唯一的明文环节。

二、目标识别与进程架构

2.1 目标标识

项目值
产品名学而思网校(客户端)
安装标识Xes_Literacy_Client,当前版本 11.00.05(历史版本 10.25.06 仍留存)
安装路径%LOCALAPPDATA%\Xes_Literacy_Client\11.00.05\
程序主体pcs_literacy.exe + XesStudent_literacy.exe
技术栈Qt(Qt5 与 Qt6 双栈并存)+ QtWebEngine(Chromium 内核)+ FFmpeg + OpenSSL/libcurl
发布方文件签名主体显示为 TAL / 学而思网校

2.2 进程树与通信角色

pcs_literacy.exe (PID 13944) ← 启动器 / 引导进程 ├── XesCrashHandler.exe 崩溃上报 ├── XesAiHandle.exe AI 能力调度 ├── SharedProcess.exe (4252) 共享服务进程 ──┬── QtWebEngineProcess.exe ├── XesMonitor.exe ★ 环境监测 / 风控 └── XesStudent_literacy.exe (PID 10780) ← 主界面进程(唯一有窗口标题「学而思网校」) ├── QtWebEngineProcess.exe ×4 Chromium 渲染进程(H5 课件、互动页) ├── XesAiHandle.exe AI 能力调度 └── SharedProcess.exe ×2 共享服务进程

本次共观测到 10 个常驻进程 + 5 个渲染子进程。注意:真正发起网络请求的是 pcs_literacy(引导/更新/登录)和 XesStudent_literacy(业务主链路),渲染进程本身不直接持有对外连接。

2.3 本机暴露面(安全姿态)

类型地址所属进程判读
TCP 监听127.0.0.1:58935XesStudent_literacy进程间 IPC,仅回环
TCP 监听127.0.0.1:9955XesStudent_literacy进程间 IPC,仅回环
TCP 监听127.0.0.1:4252SharedProcess进程间 IPC,仅回环
UDP 绑定0.0.0.0:54219、0.0.0.0:61665XesStudent_literacyRTC 媒体端口(需通配绑定)

结论:TCP 服务全部绑定在回环地址,没有向局域网暴露监听端口,本地攻击面较小。

三、实测通信清单

采样方式:每 3 秒抓取一次系统 TCP/UDP 连接表,过滤到该客户端的 10 个进程,共 20 轮、约 72 秒。下表按「远端 IP」聚合,"★"= 已通过独立域名解析精确命中归属,"○"= 归属待确认。

远端 IP端口观测进程采样命中云 / 运营商(AS)关联域名与判读
39.174.179.5443pcs_literacy
XesStudent_literacy
80中国移动 · 杭州
AS56041
★ 核心业务网关
api.xueersi.com · studentlive.xueersi.com · static0.xesimg.com · liveclient.xesimg.com · i.xueersi.com · app.xueersi.com
多域名同 IP,判断为业务主入口 + CDN 汇聚点
59.82.99.47443pcs_literacy100阿里云 · 杭州
AS37963
○ 静态资源 CDN
命中频次最高,符合图片/脚本/课件资源持续拉取特征
8.147.104.201443pcs_literacy
SharedProcess
99阿里云 · 北京
AS37963
★ 点播资源
dj.xesimg.com
182.92.5.241443pcs_literacy62阿里云 · 北京
AS37963
★ 点播资源
dj.xesimg.com
106.11.25.175443pcs_literacy60阿里云 / 淘宝网络 · 杭州○ CDN 节点
203.119.238.194
203.119.238.240
443pcs_literacy80阿里云 · 杭州○ CDN 节点(同 C 段)
114.67.228.408443XesStudent_literacy40京东云 · 北京
AS23724
○ 待确认
非标准 8443 端口 + 非阿里云,属第二供应商
116.196.107.928443XesStudent_literacy20京东云 · 北京○ 待确认
123.56.235.2218443XesStudent_literacy20阿里云 · 北京○ 备用 HTTPS 通道
182.92.160.186443XesStudent_literacy20阿里云 · 北京○ 后端 API
117.163.48.35443pcs_literacy20中国移动 · 北京★ 账号与埋点
login.xueersi.com · upload.xueersi.com · t.100tal.com · passport.100tal.com
39.105.27.46443pcs_literacy20阿里云 · 北京★ 内部制品库
code.xesv5.com
39.105.53.10580XesStudent_literacy20阿里云 · 北京明文 HTTP
全清单中唯一走 80 端口的连接
223.109.73.32443XesStudent_literacy40中国移动 · 南京○ 待确认
36.150.212.599136XesStudent_literacy20中国移动 · 南京○ 自定义高位端口
117.149.196.1479137XesStudent_literacy20中国移动 · 杭州○ 自定义高位端口
39.100.239.2295559XesStudent_literacy1阿里云 · 北京★ 日志上报
clientlog.saasz.vdyoo.com
203.119.206.8443XesStudent_literacy14阿里云 · 杭州○ CDN 节点
101.200.236.124443XesStudent_literacy1阿里云 · 北京★ RTC 日志上报
rtc-logs.magic-school.com
试跑期间 12:17:56 实时命中一次
203.107.1.1
203.107.1.34
443XesStudent_literacy20阿里云★★ HTTPDNS
域名解析走 HTTPS,常规 DNS 观测失效

合计 23 个远端 IP。其中 7 项通过独立域名解析精确命中(★),可确定业务归属;其余为 CDN 节点或第二供应商通道,建议在主动阶段确认。

3.1 连接持续性判读(第二阶段试跑,覆盖 58 秒 / 14 轮采样)

把采样延长后,连接被明显分成两类,说明客户端在网络层是「长连接保活 + 短连接轮询」混合模型。

持续型长连接(全程 Established)客户端判读
39.105.53.105:80XesStudent_literacy需重点关注 全清单里唯一的明文 HTTP 长连接,58 秒全程保持,非一次性下载
182.92.160.186:443XesStudent_literacy业务主链路保活通道
117.149.196.147:9137XesStudent_literacy自定义高位端口长连接,RTC / 推流中转特征
36.150.212.59:9136XesStudent_literacy同上一组,成对出现
223.109.73.32:443XesStudent_literacy长连接,伴随 CloseWait,疑似心跳
39.174.179.5:443SharedProcess共享服务进程的常驻通道
182.92.5.241:443 / 8.147.104.201:443pcs_literacy点播资源长连接,状态在 Established/CloseWait/LastAck 间轮换
轮询型短连接(大量 CloseWait)客户端判读
59.82.99.47:443 · 106.11.25.175:443 · 203.119.238.194:443 · 203.119.238.240:443pcs_literacy持续反复建立又由对端关闭,典型的静态资源高频拉取行为(图片 / 脚本 / 课件素材)
117.163.48.35:443 · 39.105.27.46:443pcs_literacy账号 / 埋点 / 制品库的周期性短请求
114.67.228.40:8443 · 116.196.107.92:8443 · 123.56.235.221:8443XesStudent_literacy8443 备用通道呈短连接轮换,符合多通道探活 / 择优切换特征
顺带发现:主进程与共享进程之间还存在 6 条回环 IPC 通道(127.0.0.1:58935 及 60484 / 60487 / 60489 / 60490 / 60491 / 60492),全程 Established。这是多进程架构的内部通信,不属于外网行为,但在做流量归因时需要排除,否则容易把内部信令误判成外部通信。

四、域名资产清单(按业务分类)

来源:客户端 Chromium 内核的 HTTP/2 服务记录(Network Persistent State)、历史库与 Cookie 库、资源清单 resource_cache_ex.ini、RTC 核心日志、以及 ConfigInfo.ini 等配置文件。已剔除前端代码里的属性名噪声(如 *.style.top)。

业务类别域名
账号 / 登录login.xueersi.com · passport.100tal.com · test-passport.100tal.com · 360Login(本地登录态目录)
教学主链路api.xueersi.com · api2.xueersi.com · studentlive.xueersi.com · teacherlive.xueersi.com · app.xueersi.com · xueyan.xueersi.com · i.xueersi.com · www.xueersi.com
静态资源 CDNstatic0~static9.xesimg.com · res18.xesimg.com · dj.xesimg.com · mv.xesimg.com · hw.xesimg.com · hwt.xesimg.com · icourse.xesimg.com · editor.xesimg.com · xesfile.xesimg.com · xy-static.xueersi.com · scistatic.xueersi.com
资源下发(明文 HTTP)liveclient.xesimg.com → /student/resource_load/1.1.1/1026/client.zip(含 MD5 校验)
教研 / 题库log.jiaoyanyun.com · app-pub.jiaoyanyun.com · app-fzpub.jiaoyanyun.com · tiku-fz-cdn.jiaoyanyun.com · tiku-fz.oss-cn-beijing.aliyuncs.com
学习报告 / 数据learningreport.xueersi.com · learningreport-test.xueersi.com
埋点 / 日志上报t.100tal.com · s.tal.com · log.jiaoyanyun.com · clientlog.saasz.vdyoo.com · mobilelog.saasz.vdyoo.com · serverlog.eaydu.com · rtc-logs.magic-school.com · videocloud.cn-hangzhou.log.aliyuncs.com
对象存储上传oss-cn-beijing.aliyuncs.com,bucket = xesftp(来自 ConfigInfo.ini)
内部工程域 / 协作git.100tal.com · npm.100tal.com · npm.xesv5.com · code.xesv5.com · code.xueersi.com · codeapi.xueersi.com · wiki.zhiyinlou.com · yach-doc-shimo.zhiyinlou.com
灰度 / 测试环境studentlive-gray.xueersi.com · studentlive-test.xueersi.com · xueyan-gray.xueersi.com · api-test.xueersi.com · dj-test.xesimg.com · static0-test.xesimg.com · upload-test.xueersi.com · test-api.edstars.com.cn
一个值得注意的细节:客户端同时保留了生产、灰度、测试三套域名(*-gray / *-test / *-fz)。这类信息通常只出现在内部测试包里,说明分发到你手上的这个安装包,是从开发/测试链路流出的,或在打包时未做干净的域名裁剪。

五、第三方能力供应商指纹

依据:客户端安装目录内的 SDK 动态库文件名 + 日志中出现的对应域名。这部分回答"它到底在跟谁说话"。

能力供应商证据
实时音视频(主)声网 Agoraagora_rtc_sdk.dll · libagora-*.dll ×10 · rtc_sdk.dll
实时音视频(备)火山引擎 VolcEngineVolcEngineRTC.dll(47 MB)· ByteAP.dll · 本地日志目录 ByteBaseLog
实时音视频(备)腾讯 TRTCTTTRtcSDK 目录 · 网关缓存内有腾讯云 IP 116.63.219.152 / 118.195.243.119 / 106.14.150.143
实时音视频(自研)好未来 OmniRtcOmniRtc.dll · corertclog 单文件 5 MB 级滚动日志 ×6 · 日志内 room= 关键词出现 2800–3600 次
语音识别 / 评测微软 Azure + 先声智能Microsoft.CognitiveServices.Speech.* 全套 · XesAzure.dll · skegn.dll + skegn.provision · 域名 cognitiveservices.azure.com
视觉 / 人脸商汤 SenseTimest_mobile.dll(32 MB)· 课件目录含 ai-face-recognition / ai-object-recognition 模块
对象存储阿里云 OSSalibabacloud-oss-cpp-sdk.dll · oss-cn-beijing.aliyuncs.com / bucket xesftp
域名解析阿里云 HTTPDNS连接 203.107.1.1:443 / 203.107.1.34:443
人机验证极验 Geetestlocal.i-vectors.com
消息推送好未来自研TalMsgSDK.dll
环境检测 / 风控好未来自研XesMonitor.exe · XesCheck.exe · AutoCheckTool.exe · XesRegWER.exe
重点提示:四套 RTC SDK 并存不是冗余失误,而是典型的「多供应商容灾 / 灰度切换」设计——日志里 slb_connection_mode.conf = 2 表明存在传输接入模式开关。这也解释了为什么 XesStudent_literacy 会同时连向阿里云、京东云、中国移动三个不同网络的非标准端口(8443 / 9136 / 9137 / 5559)。

六、被动阶段的方法学(可复现)

6.1 本次实际使用的四条取证路径

路径具体做法产出
连接表轮询按进程路径筛出该客户端全部 PID,每 3 秒抓取一次 TCP/UDP 表,记录 5 元组 + 进程 + 状态通信时间线 07-xes-connections-timeline.csv、聚合表 08
Chromium 内核残留读取 Network Persistent State(HTTP/2 服务列表)、Visited Links、Cookies(host_key 明文)、History域名资产主清单
SDK 日志取证扫描 OmniRtc\corertclog、ByteBaseLog、XesCache_literacy 等目录,用 URL 上下文正则提取主机名RTC / 直播接入域名、调用频次
配置与清单文件ConfigInfo.ini(OSS 上传端点)· resource_cache_ex.ini(资源 URL,hex 编码)· preload.ini · slb_connection_mode.conf下发地址、接入模式、资源包清单
归属反查先对候选域名做 A 记录解析,再与实测 IP 求交集;对无法命中的 IP 做批量 ASN/ISP 查询IP ↔ 域名 ↔ 云厂商 三方关联表 21

6.2 核心命令(可直接复用)

# 1) 锁定目标进程 PID
$procs = Get-Process | Where-Object { $_.Path -like '*Xes_Literacy_Client*' }
$pids  = @($procs | Select-Object -ExpandProperty Id)

# 2) 被动轮询连接(每 3 秒一次,过滤到目标 PID)
foreach($c in (Get-NetTCPConnection -ErrorAction SilentlyContinue)){
  if($pids -contains $c.OwningProcess){
    "$(Get-Date -Format HH:mm:ss) $($c.OwningProcess) $($c.RemoteAddress):$($c.RemotePort) $($c.State)"
  }
}
Get-NetUDPEndpoint | Where-Object { $pids -contains $_.OwningProcess }   # RTC 端口

# 3) 读取 Chromium 内核残留(域名最干净的来源)
Get-Content "$env:APPDATA\SharedProcess\QtWebEngine\xes\Network Persistent State" -Raw

# 4) 提取日志中的主机名(URL 上下文口径,避免前端属性名噪声)
$rx = [regex]'https?://([a-z0-9\-]{1,63}(?:\.[a-z0-9\-]{1,63}){1,5})'
#    遍历目标目录下文本文件,命中结果按频次聚合;注意剔除 *.style.top / *.offset.top 类噪声

# 5) 域名 → IP → 归属 关联
Resolve-DnsName api.xueersi.com -Type A        # 与实测 IP 求交集即可确定归属
curl -s -X POST http://ip-api.com/batch --data '[{"query":"39.174.179.5"}]'   # 归属查询

6.3 本阶段踩到的三个坑(供后续参考)

  1. 系统 DNS 日志无效。客户端走阿里云 HTTPDNS,域名解析封装在 443 端口的 HTTPS 请求里,UDP 53 观测拿不到任何有效域名。
  2. 不要用"裸域名正则"扫前端资源。首次扫描时 .top/.com 结尾的 JS 属性名(this.offset.top、t.style.top)产生了近 200 条假阳性。必须限定「URL 上下文」或「JSON 字段上下文」口径。
  3. 本机当前的权限与工具条件:无管理员权限,且未安装 Wireshark / Fiddler / mitmproxy / Npcap,系统代理为关闭状态(ProxyEnable = 0)。因此本阶段只能到「连接级」,到不了「数据包级」。

七、本阶段的能力边界

能回答不能回答
它连了哪些 IP、哪个端口、哪个进程发的、持续多久 每个请求的具体 URL 路径与请求体内容
它用哪些域名、归属哪家云、对应哪个业务模块 完整的 HTTP 请求/响应头、Cookie 值、鉴权 token
它内置了哪些第三方 SDK 与风控组件 UDP 侧 RTC 的远端对端地址(回环外 UDP 对端需抓包才可见)
它的明文 HTTP 环节在哪(唯一暴露点) 加密流量内部的分片、时序与实际载荷

八、下一阶段(主动)前置条件与风险

如果要把观测推进到「数据包级 / 应用层」,需要面对三个现实约束:

约束一:必须提权,且要装驱动或使用内置抓包

好消息:当前系统已有 pktmon.exe,只要提权即可直接进入包级观测,无需新增第三方组件。

约束二:TLS 解密这条路,这个客户端大概率走不通

客户端把根证书打包进了安装目录自身(ca-bundle.crt、curl-ca-bundle.crt,并且同时内置了 OpenSSL 与 libcurl)。这意味着它的证书校验很可能不读取 Windows 系统证书库。常规「装一个根证书 + 挂代理」的抓 HTTPS 做法,对这类自带 CA bundle 的客户端通常会直接失败并报证书错误。

约束三:客户端带主动环境检测,主动手段可能被观测到

安装目录中存在 XesMonitor.exe、XesCheck.exe、AutoCheckTool.exe 三套检测组件。此类模块的典型行为包括:枚举虚拟网卡与代理设置、检测常见抓包/调试进程、校验证书链一致性。

一旦触发风控,可能的后果包括:连接被降级或拒绝、账号被标记、客户端弹出异常提示。这是被动阶段完全不存在、但主动阶段立刻出现的风险。

建议的推进顺序

  1. 先做"增强被动"(零风险):把连接采样从 72 秒延长到完整一节课(≥45 分钟),覆盖"登录 → 进教室 → 上课 → 下课 → 交作业"全链路,即可拿到完整的服务端接口地图,且完全不触碰客户端。
  2. 再做"包级被动"(需提权,但仍是只读):用 pktmon 按 PID 抓包。不解密、不代理、不改包,只读 TLS 握手中的 SNI 字段与流量时序。这一步能把现在标为「○ 待确认」的 7 个 IP 全部对应到域名,且几乎无风险。
  3. "应用层解密"暂不建议推进:收益有限(自带 CA bundle 会挡住)、风险明显(风控检测),且在继续之前需要先明确用途与授权边界。

九、边界声明

本报告的全部结论来自本机(设备所有者本人)上运行软件的系统状态读取与本地文件取证,未对目标服务端发起任何请求、未进行流量篡改、未使用中间人代理、未绕过任何技术保护措施。所记录的域名与 IP 归属信息为公开可查的网络基础设施信息。

继续推进到主动阶段(抓包、代理、解密)时需注意:这可能触及该软件的用户协议与相关服务条款;请确保用途限于自有设备的网络安全自查、采购/集成评估、或经授权的技术对接,不要用于获取未授权内容、规避版权保护或干扰服务正常运行。

生成时间:2026-10-07 · 观测环境:Windows(无管理员权限)· 目标版本:Xes_Literacy_Client 11.00.05
附件:07-xes-connections-timeline.csv(连接时间线)· 08-xes-remote-summary.csv(远端聚合)· 20-hosts-clean.csv(域名清单)· 21-resolve.csv(域名↔IP)· ip-owners.json(IP 归属)· xes-conn-20261007-121711-summary.csv(持续性判读原始数据)· collect-connections.ps1(可复用采集器,已试跑通过)