jqktkh

jqktkh 私聊

普通用户正常
注册于
17
萌萌点
0
话题
0
Galgame
0
评分
0
被赞
0
被推
怎么开始CTF教学了)
@ #4 基本上都是靠猜,加一点策略,我https://github.com/hktkqj/cxdec-hxv4-static-analysis/blob/main/docs%2Fcore%2Fhxv4%2F03-resource-hash.md 项目里基本上把游戏的解析流程讲全了,想要全量回复文件名就得去解析所有tjs脚本了
@ #1 此外还有一个出生的地方是,scn脚本里的各种BG/CG/BGM,实际上都是没有扩展名的,程序取资源时还经过了TJS脚本中一个拼接扩展名的阶段,具体的方式其实就是......猜,挨个试对应类型可能的扩展名,然后拼上去看看能不能找到对应文件 @ #2 只是没改罢了,我估计也是厂商也懒得改......此外计算Path/File的hasher 都有 keyptr / keylen预设,具体来说,会将目前使用的SipHash-2-4 和 BLAKE2s-256哈希变成keyed SipHash和keyed BLAKE2s-256。但是目前所有样本中key_len都是0,不然每个游戏使用的哈希计算方式也会产生区别了。
关于开头xp3hnp的来源,其实是来源于嵌入在可执行程序中的一段启动脚本STARTUP.TJS中定义的一个字符串: var bootstrapParts = (string(bootstrapPrefix)).split(":"); var mediaName = (bootstrapParts.count > 1) ? bootstrapParts[0] : "xp3hnp"; // Constructor arguments: // "arc" : registered storage media name used by arc://./ // mediaName : appended as extra string in pathHash/fileHash // hashKeyOctet: System.bootStrap return value var compoundMedia = autoPathCallback._.fs = new Storages.CompoundStorageMedia("arc", mediaName, hashKeyOctet); // Zero-domain path hash. For Sanoba: // pathHash("", extra="xp3hnp") = 94d4a97c61498621 autoPathCallback._.zpath = compoundMedia.pathHash(""); 只不过目前看到的所有游戏都使用了这个静态量,没有进行替换。