简单分析HYP启动器,以方便后续的逆向分析。 20250401:添加简单前端分析。HYP的前端实现的具体代码我不会给出,这里只进行技术讨论。前端实际上也没什么好说的,主要是学习(借鉴)一下实现的方式吧... 我对前端实现没什么兴趣,所以有些部分可能写的比较模糊。
1. 观察启动器和启动器文件寻找分析思路
直接逆向可能会跳到思维惯性的坑里,所以我们可以先来根据启动器和启动器的文件和文件结构来进行推测,方便在逆向的时候更快得出我们想要的代码和实现。
1.1 观察启动器安装目录进行分析
来到启动器的安装位置,直接观察程序文件夹结构和文件进行猜测:
HYP 使用CN版演示
1.4.5.222 启动器版本文件夹
bearer Qt 网络模块
qgenericbearer.dll
ico 一些游戏图标
️ bh3_cn.ico
️ hk4e_cn.ico
️ hkrpg_cn.ico
️ nap_cn.ico
imageformats Qt 图像处理
qgif.dll
qicns.dll
...
platforms Qt 平台实现
qwindows.dll
resources CEF 资源文件夹
locales
af.pak
...
chrome_100_percent.pak
chrome_200_percent.pak
feapp.pak 启动器的资源文件?
resources.pak
styles Qt 页面样式
qwindowsvistastyle.dll
7z.dll 7z
️ 7z.exe 7z
⚙️ app.conf.dat 启动器配置文件
Astrolabe.dll 未知
chrome_elf.dll CEF
concrt140.dll MSVC 运行库
️ crashreport.exe 崩溃日志上报用程序
d3dcompiler_47.dll DirectX 11 组件
HoYoDeviceFpSDK.dll 获取设备指纹SDK
️ hpatchz.exe 游戏更新用工具
HYBase.dll 基础框架?
HYCommon.dll 公共工具?
HYContainer.dll 启动器容器管理?
HYContainerPlugin.dll 容器管理扩展?
HYEngine.dll 引擎核心?
HYGui.dll 用户页面?
HYLauncher.dll 启动器核心功能逻辑库?
HYLauncherPlugin.dll 功能扩展?
️ HYP.exe 启动器主程序
️ HYPHelper.exe 辅助服务程序?
HYQComm.dll 未知 网络相关?
HYSysTrayPlugin.dll 系统图标插件
HYUiKit.dll 界面组件?
️ HYUpdater.exe 启动器自更新程序
HYUpdaterPlugin.dll 自更新扩展
icudt71l.dat ICU
icudtl.dat ICU
️ launcher.exe 启动器兼容性入口程序
libcef.dll CEF
libcrypto-1_1-x64.dll OpenSSL 密码学库
libEGL.dll OpenGL ES 接口库
libGLESv2.dll OpenGL ES2.0 兼容层
libssl-1_1-x64.dll OpenSSL HTTPS库
MiHoYoMTRSDK.dll Mi Trace Reporter SDK?
msvcp140.dll MSVC 运行库
msvcp140_1.dll MSVC 运行库
msvcp140_2.dll MSVC 运行库
msvcp140_atomic_wait.dll MSVC 运行库
msvcp140_codeecvt_ids.dll MSVC 运行库
QCefView.dll CEF相关的库
Qt5Core.dll Qt5
Qt5Gui.dll Qt5
Qt5Networl.dll Qt5
Qt5Widgets.dll Qt5
snapshot_blob.bin CEF
sophon.dll 未知
telemetry.dll 数据统计上报
v8_context_snapshot.bin CEF
vccorlib140.dll MSVC 运行库
vcruntime140.dll MSVC 运行库
vcruntime140_1.dll MSVC 运行库
vk_swiftshader.dll Vulkan 兼容层
⚙️ vk_swiftshader_icd.json 驱动配置文件
vulkan-1.dll Vulcan
xyvodsdk.dll 视频相关SDK?
games 游戏默认安装目录
GenShen
...
Honsan
...
Hontie
...
Zero
...
⚙️ config.ini 全局配置文件?
️ launcher.exe 启动器兼容性入口程序
️ uninstall.exe 卸载
️ vc_redist.x64.exe MSVC 运行库安装程序
根据一些经验,我们可以很猜测HYP使用了Qt5作为基础框架,并使用CEF作为前端网页框架,并且使用.dll实现模块化,使用插件实现功能解耦。
不过存在一些尚未清楚用途和功能的库,这时候我们可以利用搜索引擎直接搜索来推测大概的用途:
sophon.dll 某环智能分析工具
xyvodsdk.dll 某域云视频SDK
QCefView.dll 基于QWidget集成CEF的Web View 组件
其中 Astrolabe.dll 的功能当时还不知道,不过在查看启动器内有什么线索时,我在点击启动器的设置-关于页面内的查看客户端日志选项后发现打开的文件夹路径为C:\Users\VTS\AppData\Roaming\miHoYo\HYP\1_1\modules\astrolabe\Log,所以推测Astrolabe.dll是日志记录工具。
如果不熟悉其他的一些库(如telemetry.dll),最好是先使用浏览器搜索一下,实在不清楚的只能逆向分析来看了。
还存在一个似乎是HYP的资源文件的文件feapp.pak,推测是一个压缩文件,使用hashcat验证后确实是一个PKZIP压缩文件,并且有密码,暴力破解还是太吃时间了,所以看能不能在后续的逆向分析中找到密码。
我们已知QCefView是一个基于QWidget集成CEF的Web View 组件,并且feapp.pak的位置在CEF资源文件夹下,所以直接去看QCefView的官方文档有什么线索:添加本地Zip文件到URL的映射
果然还是有线索的,从QCefView的官方文档得知这个文件应该是启动器所需的WebApp资源,应该是前端实现相关的资源文件,不过暂时不知道如何解压查看,所以暂时先跳过。
得出结论,HYP采用Qt5作为基础框架,前端通过QCefView加载并运行本地打包的WebApp资源,使用.dll实现模块化开发,使用插件实现功能解耦,并使用sophon.dll作为智能分析工具,使用xyvodsdk.dll作为云视频SDK,使用Astrolabe.dll作为日志记录工具。
1.2 根据启动器的配置和数据存储猜测一些便于逆向分析的思路
前面我在启动器设置-页面中的查看客户端日志得知了启动器存放配置和数据的路径,路径为C:\Users\VTS\AppData\Roaming\miHoYo\HYP\1_1,所以尝试在这个路径下的文件夹中寻找一些便于逆向分析的思路和方式。
cache
crash
data
fedata
fepak
logs
modules
查看各个文件夹后,筛选出应该有关键信息的文件夹:
data
fedata
modules
1.2.1 data文件夹
data
appstore.dat
appstore.dat.crc
gamedata.dat
gamedata.dat.crc
notifications.dat
notifications.dat.crc
usersettings.dat
usersettings.dat.crc
只看文件命名,这些文件都是启动器的配置文件+每个配置文件的校验文件,而且可以知道这里没有什么我们需要的信息,所以我们可以跳过这个文件夹。
1.2.2 fedata文件夹
fedata
blob_storage
Cache
Code Cache
databases
GPUCache
IndexedDB
Local Storage
Network
Sevice Worker
Session Storage
WebStorage
DevToolsActivePort
LocalPrefs.json
Visited Links
这结构就非常明显就是浏览器的数据存储文件夹,也就是启动器的WebApp使用的浏览器数据存储文件夹,并且看到了DevToolsActivePort这个文件,且我们已知HYP使用了QCefView作为前端网页框架,所以这个文件应该是QCefView的调试端口文件,也就代表有办法直接调试前端的WebApp了。
1.2.3 moudles文件夹
modules
astrolabe
sophon
telemetry
观察这些文件夹下的内容,可以印证之前的推测,不过具体是干什么用的还是需要逆向分析。
到这里我们已经猜测出了一些便于逆向分析的思路,但是这些思路都是基于启动器的文件结构和文件名等精细猜测,所以下一步便是尝试逆向分析这些文件,看看有没有什么线索。
2. 简单逆向分析
2.1 确认启动器WebApp使用的浏览器的调试端口并启用调试
直接打开,确认端口为9222,且使用的是QCefView作为前端网页框架,那就可以使用DnSpy直接调试启动器主程序并添加参数-remote-debugging-port=9222。
启动程序后,在浏览器中打开localhost:9222,就可以看到启动器的调试页面了。
[img][/img]

Base02.png (507.36 KB, 下载次数: 0)
下载附件
2025-3-28 23:57 上传
" alt="" target="_blank" rel="noopener noreferrer nofollow" />
这个时候实际上已经可以不用关注之前发现有密码的feapp.dat资源文件,直接去DevTools中查看即可。
具体的调试就看各路大神发挥了,后续我也会写一篇关于前端实现的分析。
2.2 分析app.conf.dat
解密app.conf.dat的方法已在我的第一个帖子获取HYP(XX游启动器)的基本信息中详细解释思路和解密代码,这里就不再赘述了。
可以看到app.conf.dat的可读字段结构:(隐藏的字段可以自己去解密看)
{
"_meta_ver": "1.4.5.222",
"App": {
"Region": "cn",
"Language": "zh-cn",
"Company": "miHoMo",
"Product": "HYP",
"ProductDisplayName": "\u7c73\u54c8\u6e38\u542f\u52a8\u5668",
"Standalone": false,
"Channel": "1",
"SubChannel": "1",
"LauncherId": "jGHBHlcOq1",
"CPS": "hyp_mihoyo",
"UAPC": "",
"PrimaryGame": "hyp_cn",
"ClientEnv": "production",
"ClientPreview": false,
"EnableBetaLogin": false,
"WebApiBaseUrl": "https://hyp-api.mihomo.com/hyp/hyp-connect",
"ThirdPartyLogin": null,
"StartMenuDirName": "\u7c73\u54c8\u6e38\u542f\u52a8\u5668"
},
"FE": {
"BridgeName": "HoYoPlayClient",
"PackageKey": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
},
"Launcher": {
"LogDebugMode": false,
"PlatApp": "ddxf5qt290cg",
"Win7PatchUrl": "https://launcher-webstatic.mihomo.com/launcher-public/2023/06/08/fac986b82c31f75c0820803748a74af4_4452073143311314458.zip",
"Win7PatchMd5": "fac986b82c31f75c0820803748a74af4",
"Win7PatchEnable": true,
"LoginMode": 3,
"EnableMultiAccount": false
},
"ABTest": {
"Url": "https://data-abtest-api.mihomo.com/data_abtest_api/config/experiment/list"
},
"Box": {
"Url": "https://sdk-static.mihomo.com/combo/box/api/config/plat-launcher/plat-launcher"
},
"H5Log": {
"Url": "https://h5log-api-dualstack.mihomo.com/common/h5log/log/batch?topic=h5log-plat-launcher"
},
"DataUpload": {
"Url": "https://sdk-log-upload.mihomo.com/sdk/dataUpload"
},
"APM": {
"AppId": "plat_Windows_xxxxxxxxxx",
"AppKey": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
},
"Updater": {
"AppId": "xxxxxxxxxx",
"AppKey": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"ReportUrl": "https://api-takumi.mihomo.com/ptolemaios_api/api/reportStrategyData"
},
"Epic": {
"EnablePay": false,
"ProductId": "",
"SandboxId": "",
"DeploymentId": "",
"CredentialsId": "",
"CredentialsSecret": ""
}
}
app.conf.dat主要还是配置启动器的各类参数:(这里只写出一部分字段)
基础配置(App):
[table]
[tr]
字段[/td]
作用[/td]
[/tr]
[tr]
[td]Region