203.107.1.1:443 / 203.107.1.34:443)。这意味着走 UDP 53 端口的常规 DNS 观测基本拿不到有效信息——域名解析被封装在 HTTPS 里。这是本阶段最重要的技术判断,直接决定了后续观测手段的选择。pcs_literacy.exe 拉起界面进程与 6 类子进程;音视频层同时内置声网 Agora、火山引擎 VolcEngine、腾讯 TRTC、自研 OmniRtc 四套 RTC SDK,属于明显的多供应商冗余/灰度设计。XesMonitor.exe、XesCheck.exe、AutoCheckTool.exe)。这类模块的典型职责就是检测代理、虚拟网卡、抓包工具与调试器。所以后续若进入主动阶段,很可能被识别。http://liveclient.xesimg.com/student/resource_load/… 没有 TLS 保护;更值得注意的是 39.105.53.105:80 这条明文连接在 58 秒采样窗口内全程保持 Established,不是一次性下载。这是整条链路上唯一的明文环节。| 项目 | 值 |
|---|---|
| 产品名 | 学而思网校(客户端) |
| 安装标识 | 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 / 学而思网校 |
本次共观测到 10 个常驻进程 + 5 个渲染子进程。注意:真正发起网络请求的是 pcs_literacy(引导/更新/登录)和 XesStudent_literacy(业务主链路),渲染进程本身不直接持有对外连接。
| 类型 | 地址 | 所属进程 | 判读 |
|---|---|---|---|
| TCP 监听 | 127.0.0.1:58935 | XesStudent_literacy | 进程间 IPC,仅回环 |
| TCP 监听 | 127.0.0.1:9955 | XesStudent_literacy | 进程间 IPC,仅回环 |
| TCP 监听 | 127.0.0.1:4252 | SharedProcess | 进程间 IPC,仅回环 |
| UDP 绑定 | 0.0.0.0:54219、0.0.0.0:61665 | XesStudent_literacy | RTC 媒体端口(需通配绑定) |
结论:TCP 服务全部绑定在回环地址,没有向局域网暴露监听端口,本地攻击面较小。
采样方式:每 3 秒抓取一次系统 TCP/UDP 连接表,过滤到该客户端的 10 个进程,共 20 轮、约 72 秒。下表按「远端 IP」聚合,"★"= 已通过独立域名解析精确命中归属,"○"= 归属待确认。
| 远端 IP | 端口 | 观测进程 | 采样命中 | 云 / 运营商(AS) | 关联域名与判读 |
|---|---|---|---|---|---|
39.174.179.5 | 443 | pcs_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.47 | 443 | pcs_literacy | 100 | 阿里云 · 杭州 AS37963 | ○ 静态资源 CDN 命中频次最高,符合图片/脚本/课件资源持续拉取特征 |
8.147.104.201 | 443 | pcs_literacy SharedProcess | 99 | 阿里云 · 北京 AS37963 | ★ 点播资源dj.xesimg.com |
182.92.5.241 | 443 | pcs_literacy | 62 | 阿里云 · 北京 AS37963 | ★ 点播资源dj.xesimg.com |
106.11.25.175 | 443 | pcs_literacy | 60 | 阿里云 / 淘宝网络 · 杭州 | ○ CDN 节点 |
203.119.238.194203.119.238.240 | 443 | pcs_literacy | 80 | 阿里云 · 杭州 | ○ CDN 节点(同 C 段) |
114.67.228.40 | 8443 | XesStudent_literacy | 40 | 京东云 · 北京 AS23724 | ○ 待确认 非标准 8443 端口 + 非阿里云,属第二供应商 |
116.196.107.92 | 8443 | XesStudent_literacy | 20 | 京东云 · 北京 | ○ 待确认 |
123.56.235.221 | 8443 | XesStudent_literacy | 20 | 阿里云 · 北京 | ○ 备用 HTTPS 通道 |
182.92.160.186 | 443 | XesStudent_literacy | 20 | 阿里云 · 北京 | ○ 后端 API |
117.163.48.35 | 443 | pcs_literacy | 20 | 中国移动 · 北京 | ★ 账号与埋点login.xueersi.com · upload.xueersi.com · t.100tal.com · passport.100tal.com |
39.105.27.46 | 443 | pcs_literacy | 20 | 阿里云 · 北京 | ★ 内部制品库code.xesv5.com |
39.105.53.105 | 80 | XesStudent_literacy | 20 | 阿里云 · 北京 | 明文 HTTP 全清单中唯一走 80 端口的连接 |
223.109.73.32 | 443 | XesStudent_literacy | 40 | 中国移动 · 南京 | ○ 待确认 |
36.150.212.59 | 9136 | XesStudent_literacy | 20 | 中国移动 · 南京 | ○ 自定义高位端口 |
117.149.196.147 | 9137 | XesStudent_literacy | 20 | 中国移动 · 杭州 | ○ 自定义高位端口 |
39.100.239.229 | 5559 | XesStudent_literacy | 1 | 阿里云 · 北京 | ★ 日志上报clientlog.saasz.vdyoo.com |
203.119.206.8 | 443 | XesStudent_literacy | 14 | 阿里云 · 杭州 | ○ CDN 节点 |
101.200.236.124 | 443 | XesStudent_literacy | 1 | 阿里云 · 北京 | ★ RTC 日志上报rtc-logs.magic-school.com试跑期间 12:17:56 实时命中一次 |
203.107.1.1203.107.1.34 | 443 | XesStudent_literacy | 20 | 阿里云 | ★★ HTTPDNS 域名解析走 HTTPS,常规 DNS 观测失效 |
合计 23 个远端 IP。其中 7 项通过独立域名解析精确命中(★),可确定业务归属;其余为 CDN 节点或第二供应商通道,建议在主动阶段确认。
把采样延长后,连接被明显分成两类,说明客户端在网络层是「长连接保活 + 短连接轮询」混合模型。
| 持续型长连接(全程 Established) | 客户端 | 判读 |
|---|---|---|
39.105.53.105:80 | XesStudent_literacy | 需重点关注 全清单里唯一的明文 HTTP 长连接,58 秒全程保持,非一次性下载 |
182.92.160.186:443 | XesStudent_literacy | 业务主链路保活通道 |
117.149.196.147:9137 | XesStudent_literacy | 自定义高位端口长连接,RTC / 推流中转特征 |
36.150.212.59:9136 | XesStudent_literacy | 同上一组,成对出现 |
223.109.73.32:443 | XesStudent_literacy | 长连接,伴随 CloseWait,疑似心跳 |
39.174.179.5:443 | SharedProcess | 共享服务进程的常驻通道 |
182.92.5.241:443 / 8.147.104.201:443 | pcs_literacy | 点播资源长连接,状态在 Established/CloseWait/LastAck 间轮换 |
| 轮询型短连接(大量 CloseWait) | 客户端 | 判读 |
|---|---|---|
59.82.99.47:443 · 106.11.25.175:443 · 203.119.238.194:443 · 203.119.238.240:443 | pcs_literacy | 持续反复建立又由对端关闭,典型的静态资源高频拉取行为(图片 / 脚本 / 课件素材) |
117.163.48.35:443 · 39.105.27.46:443 | pcs_literacy | 账号 / 埋点 / 制品库的周期性短请求 |
114.67.228.40:8443 · 116.196.107.92:8443 · 123.56.235.221:8443 | XesStudent_literacy | 8443 备用通道呈短连接轮换,符合多通道探活 / 择优切换特征 |
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 |
| 静态资源 CDN | static0~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 动态库文件名 + 日志中出现的对应域名。这部分回答"它到底在跟谁说话"。
| 能力 | 供应商 | 证据 |
|---|---|---|
| 实时音视频(主) | 声网 Agora | agora_rtc_sdk.dll · libagora-*.dll ×10 · rtc_sdk.dll |
| 实时音视频(备) | 火山引擎 VolcEngine | VolcEngineRTC.dll(47 MB)· ByteAP.dll · 本地日志目录 ByteBaseLog |
| 实时音视频(备) | 腾讯 TRTC | TTTRtcSDK 目录 · 网关缓存内有腾讯云 IP 116.63.219.152 / 118.195.243.119 / 106.14.150.143 |
| 实时音视频(自研) | 好未来 OmniRtc | OmniRtc.dll · corertclog 单文件 5 MB 级滚动日志 ×6 · 日志内 room= 关键词出现 2800–3600 次 |
| 语音识别 / 评测 | 微软 Azure + 先声智能 | Microsoft.CognitiveServices.Speech.* 全套 · XesAzure.dll · skegn.dll + skegn.provision · 域名 cognitiveservices.azure.com |
| 视觉 / 人脸 | 商汤 SenseTime | st_mobile.dll(32 MB)· 课件目录含 ai-face-recognition / ai-object-recognition 模块 |
| 对象存储 | 阿里云 OSS | alibabacloud-oss-cpp-sdk.dll · oss-cn-beijing.aliyuncs.com / bucket xesftp |
| 域名解析 | 阿里云 HTTPDNS | 连接 203.107.1.1:443 / 203.107.1.34:443 |
| 人机验证 | 极验 Geetest | local.i-vectors.com |
| 消息推送 | 好未来自研 | TalMsgSDK.dll |
| 环境检测 / 风控 | 好未来自研 | XesMonitor.exe · XesCheck.exe · AutoCheckTool.exe · XesRegWER.exe |
slb_connection_mode.conf = 2 表明存在传输接入模式开关。这也解释了为什么 XesStudent_literacy 会同时连向阿里云、京东云、中国移动三个不同网络的非标准端口(8443 / 9136 / 9137 / 5559)。
| 路径 | 具体做法 | 产出 |
|---|---|---|
| 连接表轮询 | 按进程路径筛出该客户端全部 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 |
# 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"}]' # 归属查询
.top/.com 结尾的 JS 属性名(this.offset.top、t.style.top)产生了近 200 条假阳性。必须限定「URL 上下文」或「JSON 字段上下文」口径。ProxyEnable = 0)。因此本阶段只能到「连接级」,到不了「数据包级」。| 能回答 | 不能回答 |
|---|---|
| 它连了哪些 IP、哪个端口、哪个进程发的、持续多久 | 每个请求的具体 URL 路径与请求体内容 |
| 它用哪些域名、归属哪家云、对应哪个业务模块 | 完整的 HTTP 请求/响应头、Cookie 值、鉴权 token |
| 它内置了哪些第三方 SDK 与风控组件 | UDP 侧 RTC 的远端对端地址(回环外 UDP 对端需抓包才可见) |
| 它的明文 HTTP 环节在哪(唯一暴露点) | 加密流量内部的分片、时序与实际载荷 |
如果要把观测推进到「数据包级 / 应用层」,需要面对三个现实约束:
pktmon(Win10 1809+)可直接按进程 PID 过滤抓包,无需安装任何软件,但必须管理员权限;netsh trace start 同样内置,也需管理员;好消息:当前系统已有 pktmon.exe,只要提权即可直接进入包级观测,无需新增第三方组件。
ca-bundle.crt、curl-ca-bundle.crt,并且同时内置了 OpenSSL 与 libcurl)。这意味着它的证书校验很可能不读取 Windows 系统证书库。常规「装一个根证书 + 挂代理」的抓 HTTPS 做法,对这类自带 CA bundle 的客户端通常会直接失败并报证书错误。
XesMonitor.exe、XesCheck.exe、AutoCheckTool.exe 三套检测组件。此类模块的典型行为包括:枚举虚拟网卡与代理设置、检测常见抓包/调试进程、校验证书链一致性。pktmon 按 PID 抓包。不解密、不代理、不改包,只读 TLS 握手中的 SNI 字段与流量时序。这一步能把现在标为「○ 待确认」的 7 个 IP 全部对应到域名,且几乎无风险。
本报告的全部结论来自本机(设备所有者本人)上运行软件的系统状态读取与本地文件取证,未对目标服务端发起任何请求、未进行流量篡改、未使用中间人代理、未绕过任何技术保护措施。所记录的域名与 IP 归属信息为公开可查的网络基础设施信息。
继续推进到主动阶段(抓包、代理、解密)时需注意:这可能触及该软件的用户协议与相关服务条款;请确保用途限于自有设备的网络安全自查、采购/集成评估、或经授权的技术对接,不要用于获取未授权内容、规避版权保护或干扰服务正常运行。
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(可复用采集器,已试跑通过)