Closed ghitori closed 4 months ago
关于url拼接的话我这边已经做好了,现在的问题是在于客户端进行资源校验的时候,需要有多个已经被序列化后的校验文件与一些不知道有什么作用的diff文件(日服于此不同,只需要json+无内容的dat文件),这个文件在每次资源更新时会被刷新,并且内部还从libil2cpp.so
引入了依赖,目前正在通过逆向来获取
资源的版本检测应该可以通过./files/PUB/Patch/patch.version.map
这个序列化文件读取,最新版本使用java反序列化后其中的基本内容为
{default=789, Catalog=789}
也有可能为如下内容:
{default=789, GameData=789, Preload=789, Catalog=789}
这里的版本789
与issue最开始向Nexon的资源获取api发送data中的curr_patch_version
一致,返回的信息也存在最新的789
patch文件和一些版本比较小的diff patch文件
合理推测不同 diff 及所带的版本号 是用于已有资源的 较低版本 增量至 最新的版本 所需要的增量 (different) 文件
关于增量部分可能是依赖开源项目 xdelta(.xd3)
目前仅为推断,因为手头没有旧版数据用来测试逻辑
至于大佬提到的 客户端进行资源校验的时候,需要有多个已经被序列化后的校验文件与一些不知道有什么作用的diff文件
我这边目前并没有特别准备,只是在新安装游戏后把下载的内容全部移动过去,开始游戏后便直接开始校验(个人推测校验的信息会通过最新资源下载地址获取,每个文件都有对应MD5)
大佬好!昨天收到大佬在b站的回复后,本人尝试去解析了下ba国际服的资源文件下载流程,得到了一些拙见。因本人无缘java/kotlin,无法提出pr,所以把我的结论分享出来,希望能对大佬起到一定帮助
游戏启动后会向Nexon的资源获取api https://api-patch.nexon.com/patch/v1.1/version-check 发送post请求,请求body如下
其中的
{"market_game_id":"com.nexon.bluearchive","language":"zh","advertising_id":"553ab7e8-1501-4359-bc93-406f8d24e8c9","market_code":"playstore","country":"CN","sdk_version":"228","curr_build_version":"1.53.225706","curr_build_number":225706,"curr_patch_version":789}
经本人缩短尝试后,发现必要body内容为{"market_game_id":"com.nexon.bluearchive","market_code":"playstore","curr_build_version":"1.53.225706","curr_build_number":225706}
该部分内的所有数据目前均可获取,且该请求无任何headers要求 请求发送后服务器会返回当前资源版本的完整patch包以及多个不同版本的升级包,其中的patch
-resource_path
对应的url为完整的数据文件列表,https://ba.dn.nexoncdn.co.kr/com.nexon.bluearchive/95f28e63ed93477c/resource-data.json 是当前版本所对应的url,其中包含了当前版本所需的所有资源文件resources
-resource_path
既是文件在服务器的路径https://ba.dn.nexoncdn.co.kr/com.nexon.bluearchive/{数据列表目录(上文的95f28e63ed93477c)}/{resource_path}
,也是文件在安卓内的路径/storage/emulated/0/Android/data/com.nexon.bluearchive/files/PUB/Resource/{resource_path}
经本人验证,清除全部数据后仅还原该部分数据(无需还原其他任何东西),便可触发游戏验证文件并顺利通过希望以上内容能对大佬产生帮助,完善程序!
顺便一提,国际服有的时候下载特别慢的罪魁祸首貌似是 ba.dn.nexoncdn.co.kr 这个域名解析到了一些奇奇怪怪的ip上,如果这部分能做出优选,下载速度会快很多(曾通过改hosts把速度从200k/s提到了10m/s)