任天堂视频

From 3dbrew
Jump to navigation Jump to search

Nintendo Video 是一项允许美国/日本/欧洲的3DS用户下载各种任天堂提供的3D视频的服务。Nintendo Video 甚至能在应用自身不再运行时,使用 SpotPass下载视频。

Eurosport 是一项与 Nintendo Video 相似的,提供给欧洲用户的服务。

互联网接入

它会确认你的3DS所在的国家和地区。不同国家的3DS发起不同的URL请求,它是包含了区域代码(EU/USA/JP)的二级域名, 国家代码根据国家和语言确定。下表包含了已知的国家代码、二级域名与相应文件名。

国家 二级域名 文件名
EUR (Nintendo Video) pubeu-p ESP_MD
EUR (Eurosport) pubes-p EWP_MD
USA pubus-p ESE_MD
Japan pubjp-p ESJ_MD

查看国家代码: http://www.wiibrew.org/wiki/Country_Codes

已知语言代码:

语言 代码 区域
Japanese 0 Japan
English 1 EUR/USA
French 2 EUR/USA
German 3 EUR
Italian 4 EUR
Spanish 5 EUR/USA
Netherlands 8 EUR
Portuguese 9 EUR/USA
Russian 10 EUR

在下面所有的请求中,COUNTRYCODE应该用你的国家的代码代替,COUNTRYSUBDOMAIN/FILENAME也应据实更换。语言代码应该被替换为所需语言(现在所有可用的语言的大部分的内容是相同的,所以可以使用“1”)。

令人惊讶的是,Nintendo Video使用未加密的HTTP连接来传输视频。按下“连接检查”按钮,Nintendo Video发送一个HTTP请求给COUNTRYSUBDOMAIN.est.c.app.nintendowifi.net:

GET /1/COUNTRYCODE/LANGUAGECODE/CHECK HTTP/1.1

Host: COUNTRYSUBDOMAIN.est.c.app.nintendowifi.net

如你所见,没有发送console-specific数据。服务器的响应可能是 403 或者 404 错误代码。403 表示用户区域不匹配 COUNTRYCODECOUNTRYSUBDOMAIN (可能根据IP判断),而 404 表示一切OK.

如果一切正常,3DS进行下载视频。支持Nintendo Video 应用硬解码的似乎只有四个视频,因为它发起以下请求来确认查询到同一台服务器:

GET /1/COUNTRYCODE/LANGUAGECODE/FILENAME1 HTTP/1.1

Host: COUNTRYSUBDOMAIN.est.c.app.nintendowifi.net


GET /1/COUNTRYCODE/LANGUAGECODE/FILENAME2 HTTP/1.1

Host: COUNTRYSUBDOMAIN.est.c.app.nintendowifi.net


GET /1/COUNTRYCODE/LANGUAGECODE/FILENAME3 HTTP/1.1

Host: COUNTRYSUBDOMAIN.est.c.app.nintendowifi.net


GET /1/COUNTRYCODE/LANGUAGECODE/FILENAME4 HTTP/1.1

Host: COUNTRYSUBDOMAIN.est.c.app.nintendowifi.net

FILENAMEi seems to return 403 if user's region doesn't match, 404 if ith video doesn't exist and the video itself otherwise. As of 18th of July 2011, only 1st and 2nd videos are available from UK IP addresses.

For Japan region /1/1/0/ESJ_CNF must also present on a server in order to play video files.

These videos can easily be downloaded from any computer with IP address that matches country specified by COUNTRYCODE, COUNTRYSUBDOMAIN and LANGUAGECODE using wget without any special settings. Videos are region-locked.

SD storage

Downloaded videos are stored in the SD card Extdata, from the decrypted SpotPass content payload. Country info is presumably stored in this metadata, region-lock is handled by the BOSS module via the programID in the payload header. At the end of the video file is a JPEG, which contains the video thumbnail, and various metadata in the EXIF including the URL associated with the video. The text shown on the web browser button is also stored in the EXIF.

All of these fields are big-endian? Structure of the metadata:

Offset Length Notes
0x0 4 Unknown, value is 0x18
0x4 0x14 ?
0x18 8 TitleID of Nintendo Video
0x20 0x8 ?
0x28 0x4 Total filesize?
0x2c 0x2c Unknown, some countries' videos has two extra words added here?
0x58 0x20 ASCII Video ID? M<shortvidtitle>someid
0x68 0x20 ?
0x88 0x78 UTF-16 video title
0x100 0xc ?
0x10c 0x190 UTF-16 video description
0x29c 0x20 Another ASCII video ID? I<shortvidtitle>someid
0x2bc 0xd44 ?
0x1000 ? Video data?

文件格式

使用的视频存储格式未知。2011年7月18日,两个视频包含字符串“boss”的前bytes,这让我相信这是用于识别文件类型的"magic number"

这种文件头和加密方式是SpotPass内容的容器格式。

所使用的视频编码解码器未知,(通过手动查看可知,这是某种形式的Mobiclip)根据上述的SD部分,区域代码存储在SpotPass加密层。

服务器欺骗

如果你想迷惑Nintendo Video,这里写着一些我做过的事情:

  1. 设置bind9作为 DNS 服务器 , 这样返回我的 IP 是 pubeu-p.est.c.app.nintendowifi.net 的(bind 设置).
    1. 不要忘记用你的IP替换配置中的 MY_IP ,但是不要更改 conntest.nintendowifi.net 的IP
  2. 设置 HTTP 服务器(nginx),放置ESP_MD1, ESP_MD2文件到/var/www/1/110/1/目录 (已经从任天堂的服务器里转存了,见上方链接).
  3. 配置3DS的第一DNS和第二DNS为自建DNS服务器
  4.  ???
  5. PROFIT!

External links