七、资源处理 – UNI'S ON AIR资源提取逆向全记录

  前面已经成功获取到了CRIWARE的密钥,剩下的工作就简单多了。这篇就来讲一讲如何获取这些原始资源,以及如何将这些原始资源转换为通常的文件格式,以方便浏览。

0x01 资源获取

  用中间人攻击(Man-in-the-MiddleAttack, MITM)的方式可以获得数据包的内容,比如之前用来抓包的Burp Suite就可以算是利用了这种方式的一款软件。但是Burp Suite从GUI上一个一个保存数据包太过麻烦,并且Burp Suite的插件我也没弄过不太会写,所以这里选择了mitmproxy这款软件。

  mitmproxy相比Burp Suite的优点主要是简单、方便、开源,非常适合想要自己写一些脚本进行处理的情况。根据官网上的文档可以很快地写出一个保存资源的脚本:

def response(flow: mitmproxy.http.HTTPFlow):
    path = urllib.parse.urlparse(flow.request.url).path
    for suffix in suffixs:
        if path.lower().endswith(suffix):
            path = os.path.join(save_dir, flow.request.host, *path.split('/'))
            if not os.path.exists(os.path.dirname(path)):
                os.makedirs(os.path.dirname(path))
            if not os.path.exists(path):
                with open(path,'wb') as f:
                    f.write(flow.response.content)
                print('write {}'.format(path))
            break

  由于数据都是HTTPS传输,要想成功抓包还需要在手机上安装证书,但是我不想在手机上安装一大堆证书,太过麻烦,之前在手机上安装过Burp Suite的证书,因此可以直接利用那个证书。不过要注意Burp Suite和mitmproxy支持的证书格式不太一样,要想在mitmproxy上使用需要先转换一下:

openssl pkey -inform der -in burpsuite.key -out private.pem
openssl x509 -inform der -in burpsuite.crt -out public.pem
cat public.pem private.pem > mitmproxy-ca.pem

  然后就可以运行命令启动mitmproxy了:

mitmdump -s <your-script-file> --set confdir=<your-mitmproxy-ca.pem-dir> --set block_global=false --mode upstream:<your-upstream-proxy-url> --ssl-insecure

  这里用了mitmdump,因为不需要进行交互操作;由于需要在手机上使用这个代理,手机IP地址处于外部,因此需要设置block_global=false;如果网络速度较慢或者网站被墙的话需要额外的上游代理,可以通过--mode upstream来设置,如果上游还使用了Burp Suite等代理的话,需要设置--ssl-insecure忽略证书错误。

  接下来在手机上将代理设置成mitmproxy的地址,打开游戏正常玩就可以了,整个过程中符合条件的数据包都会被保存下来。

0x02 资源加工

  直接网络传输过来的Live视频是.cpk格式,可以通过VGMToolbox这个工具解包出usm格式的加密视频,然后再利用CRID(.usm)分離ツール v1.01以及之前找到的密钥解码出.m2v视频文件。这种.m2v其实是MPEG-2格式的视频,不包含音频,可以无损直接打包进mp4文件,也可以用播放器直接播放。

  由于usm文件中并没有包含音频,还要将Live视频对应的音频文件找到。当然文件很好找,同样是.cpk格式,用VGMToolbox解包后为.acb格式的文件,.acb文件可以继续用VGMToolbox转成.hca文件。然后在2ch那个帖子里同样有解码.hca音频的工具HCAデコーダ v1.12,利用它以及找到的密钥可以将.hca解码成.wav格式的音频文件。

  现在需要把音频和视频组装起来,这里直接用FFmpeg就可以了,其实几乎所有的视频转换打包工具本质上都是调用的FFmpeg,因此学会用FFmpeg是很有必要的。用下面的命令将音视频组装成mp4文件:

ffmpeg -i <video-file>.m2v -i <audio-file>.wav -y -c:v copy -c:a aac <output-file>.mp4

  如果还想把多个mp4文件无损连接起来,可以用FFmpeg concat分离器实现。新建一个.txt文本文件,每行单独一个输入mp4的文件名,按照想要连接的顺序排列,然后将它们用单引号括起来再在每行的开头加上file ,如下所示:

file '<video1-name>.mp4' 
file '<video2-name>.mp4' 
file '<video3-name>.mp4' 
file '<video4-name>.mp4' 

  然后用如下命令进行拼接:

ffmpeg -f concat -i <list-file>.txt -c copy <output-file>.mp4

  到这里,所有的工作就都完成了,可以愉快地玩耍啦。不过资源加工的过程还是有点繁琐,有时间的话可以把这些步骤集成一下方便使用。

6条评论

    1. 其实也是可以的,但这涉及到API加密的破解,公开发出来很容易被人拿去搞坏事,所以我就没有发。

  1. 大佬你好!
    在你的记录下,我跟着一步一步完成了视频的解析,真的非常感谢。
    我想冒昧请问一下在没有卡的情况下,要如何破解API加密呢,不知道能否私信告诉我一下大概的思路呢?我是欅的粉丝,同时也是IT行业从业者,也想顺带着学习一下API加密。

发表评论

电子邮件地址不会被公开。 必填项已用*标注