关于恋与深空加密的.wem音频文件解密求助

文件来自于恋与深空,所有文件的文件头都不是RIFF且都被修改且都不一样,这里是示例文件https://drive.google.com/file/d/1MWVcVcCh\_-6UkVwHwkvA2jCNvvcDCaCJ/view?usp=drive_link,希望有路过感兴趣的大佬可以提供帮助

同志, 我也想解这个很久了, 可惜代码0基础, 看这个和看天书一样一点头绪都没有, 现在在ai的帮助下有点进度, 可以蹲蹲看, 不一定有结果

仅适用于iOS 5.0.0版本

1 个赞

捕捉大佬, 谢谢大佬 待我研究怎么用 (膜拜

il2cpp符号dump出来,IDA跑脚本恢复上去,然后给IDA装个MCP压力Agent逆就行了
deepseek-v4-pro就差不多了,成本不超过3块

1 个赞

老师这番话给我打开新思路. 我之前用IDA手动找相关函数, AI从chatgpt换到Claude, 还是没有解密global-metadata. 尝试了frida,一注入游戏就崩, 转战gameguardian也找不到AF1BB1FA, 网上找了很多其他GG定位global-metadata的方法均无果, 还是放弃了(泪). 今天上来看帖子没想到真有老师回复

因为安卓有ACE反调, global-metadata.dat的魔术字和版本号被抹掉了, 文件头和区段全部被重排过, 而且有加密

所以老师是从IOS dump出来的? IOS要用什么软件? 我看IOS甚至没有游戏文件夹,根本拿不到游戏apk包, 从来没有考虑过从IOS dump的可能性(当然也有网络上从来没有IOS的教程). 老师是从事相关工作的吗? 达到你这种程度大概要多久的学习? (来自外行人的好奇

这玩意相当复杂,XPackage里面是一整套VFS:bin是主索引,nxf是次级索引,nx是payload
bnk和wem解密都是一样的方法

from pathlib import Path

  def decrypt_wwise_file(path: str, seed: str, code: str, out: str):
      data = bytearray(Path(path).read_bytes())

      seed_b = seed.encode("ascii")
      code_b = code.encode("ascii")
      key_len = max(len(code_b), 0x30)

      key = bytes(
          seed_b[i % len(seed_b)] ^ code_b[i % len(code_b)]
          for i in range(key_len)
      )

      for i in range(min(len(data), 0x200)):
          data[i] ^= key[i % len(key)]

      Path(out).write_bytes(data)


  seed = "27be8d19868a545a601f795aed3639de"

  decrypt_wwise_file(
      r"C:\path\xxx.bnk",
      seed,
      code,
      r"C:\path\xxx.dec.bnk",
  )

  decrypt_wwise_file(
      r"C:\path\123456789.wem",
      seed,
      code,
      r"C:\path\123456789.dec.wem",
  )

seed在这里被设置

function WwiseMgr.Init()
  if not UNITY_EDITOR then
    local path = "MessagePack/GameSetting"
    local gameSettingConfig = X3BlobFileMgr.Load(CS.X3Game.MessagePack.X3GameSettingMessagePack, path)
    if not GameObjectUtil.IsNull(gameSettingConfig) then
      CLS.SetSeed(gameSettingConfig.WwiseSeed)
    end
  end
  local curSoundLang = Locale.GetSoundLang()
  WwiseMgr.SetLanguage(curSoundLang)
  getIns():Initialize()
  if isFirsInit then
    CS.AkBankManager.ReloadAllBanks()
  end
  WwiseMgr.InitVolume()
  if isFirsInit then
    isFirsInit = false
  end
end

code要去VFS里面查到对应的messagepack,然后解出code去解密

完整工具

1 个赞

老师神仙来的, 工具都写出来了. 感谢大佬(合十)

谢谢佬, 真的解出来了(合十)