Back
Featured image of post Grasscutter Backroom 小游戏解密

Grasscutter Backroom 小游戏解密

Grasscutter Backroom 小游戏解密

上个月挑战了一下这道 Grasscutter Backroom 社区里的题,花了一天时间。竟然是第一个做完的,不过是 Teamwork。最近写不出来啥了,就来记录一下全过程吧。

第一条消息

OSRELWin2.7.0_CHT

e91fa91c9e242e0e4401b84e75ce771de32e80108e582601c99324bb46ffb180fe19c42df8c814

f3d02f545bf35e7255d357236826199a853a0d1e39beb27deca57e4d7dd053a818fd53e0f8cfc986c60b5a8055c83ee46a35ab9309349eaf4ca9276efdd4256b23a7935c519db8a760707b813ecc3d4955e40e9dd8d7e0bea40de7ca3f0da384f77c30fed883574f11b16301be0808e9f3da330a658bd925bf008df225f13914ea9d4ab6bb77e34c6ed2a53fa8a6f710ad48d9e15e2afbcda1f0a4ea73425a1b14be65ab2c282710874f1077c414d2fab4b4ad3254317a5e429630b490c07e42ab63276d5fa2f3beb446ac174f81de2feee060114b2218d048fc2adf2933cd0848edb96b6d71ae6a6971ab5228c455ae56c2f88cc40efa26a0cf0d7f3b5efab0e6307c167490f91c3104ac640329eb7e34ccbf569c3ffcf7b9c997a51b381eb2c53f3a7adfca1056651f0e983e020fc4523037e9a5b522e61edd6a271c6bf96826e2820b9e303650629ddfadccec6ae43d289b3ac455685f461489c60acac16b9eea8ca95d8238cae285f5a4edc72acd92eb13213027beb65c49fade30e50a837e5abf55b6a38d8e2f86739dd571eee07bf7dcf863329980fb57c99981d843c40256cd8bbd9a765f1b661169dffdb0c067730914208437ced47cda02008ac3ad0f6b8e0c9b8204f8304ff79038f21aac60fc67aa32297ec168d1eb33f3c0aa0e789d40572f60c1dc44b15399c9f293e94232f891497db8c21f8030f37b6aa5783830ef72245491f2ed131f94ccd43b56de6bb57a819ba486850e7d2fb465a73c8d832297657f5ef4f27a796911f34598445fc4eb9e81a96b6576f4d439bc0349aaebc01fa6f839b45d3a809c8b886afad8767505b431a9205f5605b228f32578efea67a58698ead4b4e87003922f8ced702c496c7436d10129b92900e4087388cfa0c154e5653d78dad92763f1a4418b3519f92665e6159fe7a14a99313839e3c59905a3ee65896c95bd469e6ee5efbe9ff4653ed1d9d9ecff783eba2791a2c5e851584c0304b4c8eac906ba8431e749f5b6eecb0c68d6ee8810878c7b5352e2e8e0d42f2645b83183a86e34d9a7b03fbd1635adf50beab46054dbd341e00decfc8b84963affe28cbc3ee430d107fbbd0a6c98d32792fc762f610ed3c07c7a92

这是我当时拿到的题。

尽管不清楚 CHT 究竟是什么意思(下面会提到),不过先确定这题跟 2.7.0 脱不了关系。

两个消息,一短一长,都是十六进制的转储。看到忽悠密码学,一开始可能以为这跟 RSA 之类的有关,从 global-metadata.dat 找了几个公钥尝试解密都不行。

后来 meme 给了提示,想象一下这是 Wireshark 转储的数据,于是本能直接进 Iridium 看一下。

iridium

这是长的那个,不过没有 21595 这个包,meme 也说了没想到我会这么神必,直接手动导入。然后就想着以为这个错了,这个可能是个有问题的 frame,于是想自己手动补 head 信息,全失败了。

倒是我之前拿到了 Wireshark 解 KCPLua 插件,当时可能以为这个需要做点操作变成之类的东西。第二天起床在看 Genshin KCP 的东西,鉴于对这玩意略知一二(指炸服用的那个小玩意),为了进行学习,看了看 Grasscutter 的代码,看到了 0x4567 开头的特征之类的。我猛然想到,可能需要做异或。

鉴于我不清楚用哪个 key,直接把 Iridium 里的 keys 一个一个试,直到找到了 0x4567 的特征。

oops.png
4567 0083 0000 0000 001b 0a01 3110 4518 0322 0931 3039 3035 3832 3832 58ff bd03 6001 f064 0189 ab

这下对了,0x4567 开头,紧跟着 cmdid,判断出是 GetPlayerTokenRsp 的包。可以直接拿 CyberChef 或者别的工具直接解析。最后拿到:

{
  'uid': 69, 
  'platformType': 3, 
  'accountUid': '109058282', 
  'secretKeySeed': '57087', 
  'accountType': 1, 
  'channelId': 1
}

第一条消息就解出来了。

第二条消息

说实话,这个长的非常神笔,我一开始想继续异或,用 MHYkeys.json 里的,结果不行,后来经队内大手子指点,看看 secretKeySeed 走一遍 mt64 拿到 key

sorapointa.jpg

需要好好表扬一下 Sorapointa 写的梅森,非常方便。走完了之后,解密完拿到这个:

message.jpg

研原顶针,鉴定为 UnionCmdNotify,但是我拿到的 UnionCmd 的字段顺序有点问题,message_idbody 需要修。发现 id 对应的 proto 竟然是 AbilityInvocationsNotify,好吧又套一层,拿 body 的字节码继续去解析。

最后拿到神笔 JSON:

eyJoaW50X3JvdDEzIjoiSGZyIGdqYiBjYnZhZyBydnR1ZyBadnVibGJPdmFRbmduIHhybCIsImVuY29kZWRfcGF5bG9hZCI6IsOdw43Dj8OPw5jDnsOTw4LDmcOVw4bDj8Oew57Dk8ONw5nCosKlw4TDmMKiw4PDkcOSw5XDhMOQwqHCpMODw5HDksOVw4bDgMOOwqTDlcOWw5jDhcOCw5DDnMOew5PDnsOZwqLCo8OAwqHDnsOVw5TDmsOZw4LDkMOUwqTDk8Oaw5rDgcOPw5DDmMONw5vDg8OSw57DgMOUw5bCosOTw57DmsOBw43DkMOcw53CpMODw5LDlsOOw4TDlsKkw5vDh8OYw53DhMOEw5bDjcODw53DmcONw4bDgMOOw57Dk8OCw5nDlcOCw4DCo8ONw43CpcOSw5bDkcOWw4LDhcObw5jDmsOZw43Dn8OEwqPDk8OCw5LDlsOFw5/DkMKjw5PDh8OZw43CosOQw5zCpMOFw5TDksOVw4bDgMKjw43DlcOWw4fDkcOPw4/DnMKjw4XDlsOYw4HDjcOAw5zCo8ODw5jDmsORw4DDgMOcw57Dk8OPw5nDkcKlw5DDhsOew5PDgsOZw5XDhMOEw5bDg8Klw4PDksOVw4TDkMOEwqPCpMOGw5rDkcKlw5DDkMKlw5XDlsOaw5nDgMOQw4TDjcObw5jDmMOGw4bDkcOSw4LCpcOVw5LDlcOBw4DDnMKhw53DmCJ9

ey 感觉 base64 格式的 JSON 解一下,看看还有啥?

eee.jpg

hint_rot13 第一感觉就是凯撒,offset13Use two point eight MihoyoBinData key

2.8 的 xorKey97,开了个 Genshin Studio 从 96 试了一下就清楚了,直接对 encoded_payload 进行异或,拿到又是一串密文。

JZXXOIDUNBQXIIDZN52SO5TFEBSG63TFEBQWY3BAORUGKIDIN54W6IBCMNUGC3DMMVXGOZLTEIWCA5DIMVZGKJ3TEAYSA3LPOJSSAZTJNZQWYIDUNBUW4ZZ2EAFAURLOMNZHS4DUEARHG4DPNZ5GK3RCEBQW4ZBAPFXXK4RAOVZWK4TOMFWWKIDXNF2GQIDUNBSSAT2TEBSGS43QMF2GG2BAMNWGSZLOOQQFEU2BEBVWK6JO

我以为就结束了,以为这是最后答案,不过 CyberChef 这个魔术棒就是非常棒(๑•̀ㅂ•́)و✧

Now that you've done all the hoyo "challenges", there's 1 more final thing: 

Encrypt "sponzen" and your username with the OS dispatch client RSA key.
cyberchef.png

现在结束了,只需要拿 RSA Key 做个加密就可以了,不过我直接偷懒,拿了 Sorapointa 的 key,是国服的。

meme 说没事,然后告诉我是第一个解完的,送了我一个月免费 nitro,然而我没敢要。

关于 CHT 是个啥

就是 SAR,meme 说这个服务器的 key 不会在 Iridium 里面,然而事实上就在,哈哈。我还以为有文本之类的彩蛋,他说没有,整这个太难了,失败了就不弄了。

comments powered by Disqus