分类: 技术相关

在 Linux 上挂载 System357 硬盘

按:4月份的时候这篇文档的西班牙语版就已经出现在国外论坛上,但其实方法早就流传很多年了。 System357 硬盘比起家用 PS3 来说,省略了安装自制系统-导出 eid_root_key 的步骤,使用了同一套密钥组。这次的文章翻译会省略一部分提取 eid_root_key 的步骤。PS3 的系统研究,包括本文,都大量参考了 PSDev Wiki 的相关内容(https://www.psdevwiki.com/ps3/),在这里也一并感谢。

前言

本文主要描述的内容是将 System357/369 的硬盘挂载到 Linux 电脑中。在本翻译中,所有的操作环境是基于 Linux Mint 20.1 x64 的 Cinnamon desktop 标准版进行的。对于中国的用户来说,这个发行版镜像可以从境内镜像站快速获得:

https://mirrors.bfsu.edu.cn/linuxmint-cd/stable/20.1/linuxmint-20.1-cinnamon-64bit.iso

而在本文中,我们使用太鼓达人绿板(太鼓の達人 グリーンVer),S357C-11E,ST4100-1-NA-HDD0-A 作为解密源硬盘。

已知的研究已经对于 PS3内置硬盘(英文) 的加密情况有了大致的了解。每个家用版型号(即除所有街机基板型号)都有独有的一套密钥。在解密后,PS3 的系统有特有的分区表,以及在某些型号上高达10个的分区。其实并不太需要知道所有分区的功能,只需要关注几个特定分区即可。比如说, dev_hdd0 是用户数据、系统分区、配置和 swap 区域,dev_flash2 是在一些有 NOR flash 的型号上保存终端和其登录用户数据的区域。

上图是 PS3 硬盘逻辑分区布局图,可以在下面的链接查看原文
https://www.psdevwiki.com/ps3/Talk:Harddrive

开工前的准备工作

1)首先,安装(我推荐安装,因为大陆众所周知的原因,部署编译环境非常蛋疼)或以 LiveCD 的模式启动 Linux Mint ,在用户(本文默认为 woodu)目录下创建如下目录:

/home/woodu/ps3
/home/woodu/ps3/dev_hdd0
/home/woodu/ps3/dev_hdd1
/home/woodu/ps3/dev_hdd2
/home/woodu/ps3/dev_flash1
/home/woodu/ps3/dev_flash2
/home/woodu/ps3/dev_flash3

2)下载 PS3 HDD Keygen.sh 脚本并解压到 /home/woodu/ps3 执行或从这里手动从hex值生成 ata_key.binflash_key.bin,这些key 就是解开 ps3 硬盘的加密的密钥。

灵魂的5

3)安装必须的编译工具(apt install build-essential gcc linux内核header 等),并下载 bswap16.ko 的压缩包(此压缩包包含了针对 4.15.0-54-generic kernel in Linux Mint 19.2 的编译成品,在本文中将重新编译适合当前内核的版本)。

下载后直接进到 source 目录中,并 make 即可。之后将成品 bswap16.ko 也移动到 ps3 目录下。

获得素材:bswap16.ko

4)完成以上两步后,你的 ps3 目录应该是这样的,除 ata_key.binflash_key.bin 之外,其他的 key 可以帮你解开其他的分区,根据需要使用即可。

是这样的

开工

接下来需要在 Terminal(终端)里执行一系列指令,以正确的将硬盘挂载为可读写的分区。

为了防止将原版硬盘破坏,你可以使用 dd 命令或在 windows 下为硬盘制作整盘镜像,持有整盘镜像的你可以将它挂载为虚拟设备,比如使用下面的指令把你放在 /path/to/your.img 的文件挂载到 /dev/loop1

losetup loop1 /path/to/your.img

相反,如果你胆子大(像我一样买了好几台357c),可以尝试直接用移动硬盘盒或直接连接 SATA 到设备上,此时,使用的设备盘符就是 /dev/sdx (取决于你的实际情况,你需要使用一些系统指令确定 x 在你电脑上的真实值)。

1)打开 Terminal 并 sudo su 进入 root 下,因为设备操作一直需要 root 权限。

2)安装在准备工作时编译的 bswap16.ko ,它承担了将 Big Endian 到 Little Endian 的转换工作。

insmod /home/woodu/ps3/bswap16.ko

3)将镜像/物理设备进行挂载。

使用镜像:

cryptsetup create -c bswap16-ecb -d /dev/zero ps3hdd-bs /dev/loop1

使用物理磁盘:

cryptsetup create -c bswap16-ecb -d /dev/zero ps3hdd-bs /dev/sdx

4)使用准备工作获得的 ata_key.bin 和 357 使用的对应算法进行解密挂载:

cryptsetup create -c aes-xts-plain64 -d /home/woodu/ps3/ata_key.bin -s 256 ps3hdd /dev/mapper/ps3hdd-bs

并识别它的分区:

kpartx -a /dev/mapper/ps3hdd

5)稍事休息,确认磁盘已经正确解密:

ls -la /dev/mapper/

如果正确的话,应该可以看到 ps3hdd ps3hdd1 ps3hdd2 ps3hdd3 等一系列分区,分别指向 /dev/dm-* 。

其中 ps3hdd1 VFLASH ps3hdd2 dev_hdd0 ps3hdd3 dev_hdd1

6)继续挂载 VFLASH 吧。 VFLASH 是在第一层加密后又有第二层加密的双层结构,所以要把刚刚解密的指令再来一次。先挂载 VFLASH 容器:

cryptsetup create -c aes-xts-plain64 -d /home/woodu/ps3/vflash_key.bin -s 256 -p 8 ps3vflash /dev/mapper/ps3hdd1

并分区:

kpartx -a /dev/mapper/ps3vflash

7)上面的这一切都做完以后,应该就可以映射分区了。

首先,挂载主分区(如果需要写入的话,你需要安装可写 ufs2 的内核模块,并把指令里面的 ro 替换为 rw):

mount -t ufs -o ufstype=ufs2,ro /dev/mapper/ps3hdd2 /home/woodu/ps3/dev_hdd0

接下来是一些 FAT12 FAT16 FAT32 的分区,这些分区系统会自动识别,但自动挂载的分区可能会有问题,因此还是建议通过命令行手动挂载:

mount -t vfat /dev/mapper/ps3hdd3 /home/woodu/ps3/dev_hdd1
mount -t vfat /dev/mapper/ps3vflash2 /home/woodu/ps3/dev_flash1
mount -t vfat /dev/mapper/ps3vflash3 /home/woodu/ps3/dev_flash2
mount -t vfat /dev/mapper/ps3vflash4 /home/woodu/ps3/dev_flash3

有一些尺寸上的注意:dev_flash1 往往大概 200Mb 左右大,dev_flash2 往往在16Mb 左右, dev_flash3 往往只有约 512Kb

8)全部做完之后,就可以在系统里确认整个硬盘的挂载情况了。

lsblk -b /dev/sdx

9)挂载完毕之后,就获得了对 System357 硬盘的完全控制权。但请注意,千万不要修改对于此硬盘的任何权限和所有者的信息。如果要修改数据,请使用 root 用户,但你可以在普通用户的文件管理器内经过授权后浏览文件。

10)请记得,浏览/使用结束后卸载掉分区,尤其是你修改了内容的情况下。

umount -l /home/woodu/ps3/dev_hdd0
umount -l /home/woodu/ps3/dev_hdd1
umount -l /home/woodu/ps3/dev_flash1
umount -l /home/woodu/ps3/dev_flash2
umount -l /home/woodu/ps3/dev_flash3
kpartx -d /dev/mapper/ps3vflash && cryptsetup remove ps3vflash
kpartx -d /dev/mapper/ps3hdd && cryptsetup remove ps3hdd
cryptsetup remove ps3hdd-bs

常见问题(略)

我看了眼,感觉没什么特别的。

主要是如果需要确认是否解密成功(每一个调用 cryptsetup 的地方),需要看下已挂载节点的内容是否大部分填0,填0就问题不大。

致谢

感谢 graf_chokolo 在 PS3 逆向工程中卓有成效的贡献,并提供了 Linux 上的支持,没有他,kpartx 就不能支持 PS3 的分区表。

感谢 3141card 对于 PS3 硬盘的加密算法和读取方式的研究。

感谢 guerrini97 修复了作者原来旧脚本中的问题,并重构了 bswap16 模块,并为 nbd-client 提供能力。

感谢 Decaf Code 重构 bswap16 模块并兼容现有内核。

感谢 einsteinx2 指引解锁了 PS3 硬盘的 8% 空间,并为本文提供灵感。

感谢 Yugonibblit dump了 CECHG01 型号的分区表,并确认了该型号及衍生型号的加解密钥和对应算法。

感谢 mlody95pl 指出了本文的错误并编译了 UFS 模块。

后记

从我获得太鼓旧框开始的 2020 年下半年,真的是太精彩了,尤其是太鼓达人在中国国内的圈子里。现在,虹版在中国的代理也已经有官方暗示了,而官方框体也通过各种形式进到了国内。希望中国的太鼓达人有个美好的明天。

服务器再搬家

昨天刚好是7月13号,距离我把主服务器从 sakura vps 迁出刚好整一年。这一年里我使用的是论坛成员推荐的海星云服务器。虽然存在比较大的丢包情况,但在七牛 cdn 的加成下总体也还算比较平稳。但在上个月,因为备案失效而被迫从中国大陆地区迁出的口袋维基迁移到这台服务器的时候,每个月 1TB 的流量配额就显得特别捉襟见肘了。

VPS 6月流量总图

为此,我还特意把剩余的几个月加钱升级了高配,就为了多买一点流量。临近一年整,靠升配续命终归不是正道,于是服务器再次搬家就成为了一个议题。

这不,好容易有个闲暇时间,赶紧把家搬了。

这次选用的是 Wenjing network 旗下的 HostKVM 。看 IP 分配,感觉跟之前海星在同一个机房,但丢包情况得到了不少改善。按照老规矩,观察几天,看看情况。

太鼓达人(旧框体)电源详图

前文详情:https://woodu.me/waiwangkandaodetaigu-system256-neibudianlubantu/

时隔接近两年,我也算是终于把很久之前看的“ System256 只需要一个 ATX 电源即可启动”这句话给研究了一下。

这篇文章主要是展开介绍了一下太鼓达人(旧框体,以 11 亚洲版为例)的电源供应模块,包含详情图和说明书。

首先是详情图,从上一篇文章可以看到,太鼓旧框体的 System 256 主机下面是 JVS IO 和电源供应板,电源供应板有两枚。这两枚电路板一枚负责 +5V 供电,另一路负责 +12V 供电。

有一点不吐不快的是,我之前因为思维惯性,在电路板的 PCB 上找了很久的型号,但是今晚翻到说明书发现它的铭牌是在电容上。真是令人感到很尴尬。

但这个电源转换版真的是日本非常常见的型号,由 TDK-Lambda 提供。具体来说的话,是之前的 DENSEI-LAMBDA 制作的。

这个系列的电源板,输入电压是100v,所以中国版的太鼓达人也是需要内置 220v~ 转 110v~ 的变压器的。而型号命名规则,是 VS{功率}B-{输出电压},具体的定义和系列是下面的图,点击这里可以下载源 PDF文档(日本网络可能需要科学上网)

话不多说,上图吧。首先第一块是 +12V 输出板,型号是 VS75B-12 。

然后第二块是 +5V 输出板,型号是 VS50B-5 。

有点糊了……太晚了就这样吧)

以及最后,我尝试废物利用改造了 蜗牛星际 拆下来的 120w 电源(毕竟50w+75w=125w),来当作比较简单的256启动电源。

放一个 14 的启动视频好啦。大家晚安。

近况和Natsu.APP

自打 WordPress 升级编辑器为 Gutenberg 之后,我就一直懒着没有写新的文章。也加上最近确实比较忙。

先从最近的开始说吧。海底光缆好像又出事儿了。博客和论坛所在的这台东京服务器闪断的问题一直没有特别好的缓解,感觉明年或多或少肯定还要再折腾一下。

稍远一点,沙特在美帝又一次准备收拾我国的时候干了一件刷新大家下限的事情。无论当事人多不是人,这种玩法是违反所有人的共识的。当然,前提是大家的共识是同一件事。如果有人对这个有异议,那就可以不用聊了。

再稍远一点,大狗老师因为我的《番禺游记》通过邮件联系上了我。聊了很多,感谢大狗老师为我们这些普通的不能再普通的玩家留下了记录。更多的不能再说了,等待更多的新情报吧。

更远一点,是中秋节。潍坊的舞萌maimai 机台坏掉了。具体来说的话是机器里面的两台 LG 液晶显示器坏掉了——背光挂了。潍坊的这台机器是最早的一批精文世嘉机器,屏幕的型号是 LC420EUN 。如果在阅读文章的您也需要维修的话,欢迎您给我发邮件。我会尽我的可能来帮助您。

我只买了灯条,剩下的还是皇家的机修操作的。

再远一点,在公司内部遇到了不少感兴趣的同好,大家约定了在上周末进行了一次聚餐。喜欢大家。

(这个是不可能有图的www)

闲白的最后,是已经咕咕咕掉的8月本来要写的东西。潍坊的太鼓达人14街机坏掉了。

潍坊的 太鼓达人14
潍坊的太鼓达人14机器

这台机器是我用一些资源交换的手段换来的,因为是复制版所以质量就不是很好。委托在潍坊的朋友发了个快递过来。顺便看了一下 SYSTEM256 的复制。

想起来三年前跟老外聊天,老外表示2010年的时候就已经完全解密了 System256 。

买了适宜的编程器和储存芯片,却被 Block 在了自己不会拆装储存芯片。只有这种时候才有点后悔自己没有学相关的专业。

硬盘的复制倒是比较轻松,直接在命令行下用 dd 即可。不过失败的尝试是使用 TF-IDE 和 SATA-IDE 都失败了,看上去很难给 System256 使用新一点的储存设备了。

闲白完了,现在可以聊聊 natsu.app 了。我是个小城孩子,潍坊城不大,但是好在市面比较平和。所以虽然不像从小在农村长大的孩子那样有非常丰富的上山下水的经历,但是赶上了小城开发的我也在各种保留了7、80年代风貌的改造场地获得了自己的乐趣。

山东毕竟还算是北方(虽然近几年我才知道山东是算华东的),所以冬天蛮冷的一般也不怎么出去玩,最多就是在大院里玩玩雪。所以更多有意思的回忆还是夏天。最多最多的印象是一台金凤牌的电扇。从小用到大,好像现在还是可以继续使用的。

找到了类似型号的同牌子电扇说明书,但是我家那个稍微高级一点,可以上下摇摆,框子周围还有一圈彩色的灯。

但是,更多的还是怀念那种无所事事的夏天。不过这张想象中的图跟小时候的真实场景倒是没什么关系就是了。

更多的原因还是因为前段时间 Google 开放 .app 后缀注册,我顺手买到了 natsu.app 。虽然作为一个喜欢水君的家伙应该爱屋及乌地喜欢冬天,但是冬天更多的是带着人情味儿的回忆。夏天则是真的是没心没肺的记忆。于是就拜托 @FeiyaZ 鸭子老师帮我画了一下这张图。

构图是我想的,不过动笔完全是鸭子老师的。稍微拆了一下图层用 svg.js 做了一下动画,也算是某种程度上的纪念了吧。

如果以后开家店,就以这个为基础起名吧。毕竟最早想到的 hanabi (烟花)的名字,总有一种转瞬即逝的短命感,哈哈。

替换 Discuz! 6 的默认验证码

PTB 今年已经是第 11 年了,代码也是 10 年前的代码了。
这次又遇到什么问题了呢?就是我们的验证码机制被攻破了。
而且其实挺遗憾的,因为 PTB 最初的安全设计是严进宽出,即你注册需要有相当繁琐的步骤和漫长的验证期,之后几乎没有什么限制。

然后很尴尬,我们被撞库了。

就是前一分钟我们还在微信群里面谈笑风生一分钟之后刷出来发现对面那个人的 ID 在论坛灌了 1000 多个台湾找小姐这样。

然后我就按照之前双子的思路打开了验证码。

但是很尴尬, Discuz 6 有一个很严重的逻辑漏洞。这其实也不是逻辑漏洞,是当年大家对 ajax 的理解都不到位而已。

按照惯例,我们来读代码。

DISCUZ_ROOT./ajax.php:64


...
} elseif($action == 'checkseccode') {

	if($seclevel) {
		$tmp = $seccode;
	} else {
		$key = $seccodedata['type'] != 3 ? '' : $_DCACHE['settings']['authkey'].date('Ymd');
		list($tmp, $expiration, $seccodeuid) = explode("\t", authcode($_DCOOKIE['secc'], 'DECODE', $key));
		if($seccodeuid != $discuz_uid || $timestamp - $expiration > 600) {
			showmessage('submit_seccode_invalid');
		}
	}
	seccodeconvert($tmp);
	strtoupper($seccodeverify) != $tmp && showmessage('submit_seccode_invalid');
...

以及

DISCUZ_ROOT./include/global.func.php:888


function submitcheck($var, $allowget = 0, $seccodecheck = 0, $secqaacheck = 0) {
	if(empty($GLOBALS[$var])) {
		return FALSE;
	} else {
		global $_SERVER, $seclevel, $seccode, $seccodedata, $seccodeverify, $secanswer, $_DCACHE, $_DCOOKIE, $timestamp, $discuz_uid;
		if($allowget || ($_SERVER['REQUEST_METHOD'] == 'POST' && $GLOBALS['formhash'] == formhash() && (empty($_SERVER['HTTP_REFERER']) ||
			preg_replace("/https?:\/\/([^\:\/]+).*/i", "\\1", $_SERVER['HTTP_REFERER']) == preg_replace("/([^\:]+).*/", "\\1", $_SERVER['HTTP_HOST'])))) {
        		if($seccodecheck) {
        			if(!$seclevel) {
        				$key = $seccodedata['type'] != 3 ? '' : $_DCACHE['settings']['authkey'].date('Ymd');
        				list($seccode, $expiration, $seccodeuid) = explode("\t", authcode($_DCOOKIE['secc'], 'DECODE', $key));
        				if($seccodeuid != $discuz_uid || $timestamp - $expiration > 600) {
        					showmessage('submit_seccode_invalid');
        				}
        				dsetcookie('secc', '', -86400 * 365);
        			} else {
        				$tmp = substr($seccode, 0, 1);
        			}
        			seccodeconvert($seccode);
        			if(strtoupper($seccodeverify) != $seccode) {
        				showmessage('submit_seccode_invalid');
        			}
				$seclevel && $seccode = random(6, 1) + $tmp * 1000000;
        		}
			if($secqaacheck) {
        			if(!$seclevel) {
        				list($seccode, $expiration, $seccodeuid) = explode("\t", authcode($_DCOOKIE['secq'], 'DECODE'));
        				if($seccodeuid != $discuz_uid || $timestamp - $expiration > 600) {
        					showmessage('submit_secqaa_invalid');
        				}
        				dsetcookie('secq', '', -86400 * 365);
        			}
        			require_once DISCUZ_ROOT.'./forumdata/cache/cache_secqaa.php';
        			if(md5($secanswer) != $_DCACHE['secqaa'][substr($seccode, 0, 1)]['answer']) {
        			        showmessage('submit_secqaa_invalid');
        			}
				$seclevel && $seccode = random(1, 1) * 1000000 + substr($seccode, -6);
        		}
			return TRUE;
		} else {
			showmessage('submit_invalid');
		}
	}
}

不难看出,其实对于验证码的过期,后台的判断只是基于时间(600秒)和是否是属于这个用户。
这其实是有很大的问题的,因为没有重试次数限制,对于不复杂的非中文验证码,一秒钟发出几千个请求cover掉所有数字和大部分字母组合是很轻松的事情。
因此干脆就把它从代码里面摘掉。

主要修改的是下面几个文件。因为现在就是这么做的,因此具体的细节就不展开说了。

include/javascript/post_editor.js
摘掉里面对原有验证码的前端校验

template/seccheck.htm
摘掉原有验证码的展示代码,同位置增加极验的前端代码

ajax.php
屏蔽掉前端校验接口
global.func.php
common.inc.php
摘掉原有验证码后端校验的内容部分,保留 Cookies 校验部分
增加极验后端校验代码

总结一下,其实 discuz 6 在代码设计上真的是完美无缺的。这么老的代码改起来也没有什么不适感(最起码比在公司里吃的那些 s**t 要好得多太多了)。基本就是搜“submit_seccode_invalid”就可以解决这次的问题。
总之双站都是靠极验老版本去 cover 机器人了,毕竟防御价值没那么高,就不去针对 geetest v3 做适配升级了。
屏蔽掉机器人就已经解决绝大部分问题了。

一次古典互联网服务器迁移记录

严格上说,我们这一代前站长(因为现在事实上没有高活跃度会员),赶上的是 Web2.0 刚刚开始起步的那段时间。
谁能想到两三年前 PHP 已经被划作前端范畴了,而最近这一两年前端技术又这么发达了呢。
然而既然决定了保留这些互联网遗迹,那就得让他们在目前为止最好的工作状态下工作。

2007 年春,口袋根据地站长 nfopo 宣布暂时关站,同期,我们筹划成立口袋社区 Poke The BBS (当时英文名叫 Pokemon The BBS)。那时候开一个网站的成本是非常低的。互联网刚刚跨进 Web2.0 ,人人分享的平台还是每人在计算机上创建自己的网站。 CNNIC 联合国内的域名服务商推出了 1 元甚至 0 元购买 .cn 域名的活动。口袋社区最早是以 poketb.cn 作为主域名的,后来购入了同名的 .com 域名,并沿用至今。
poketb.cn whois
最早的口袋社区是 Discuz! 4.1F ,服务器是现在仍然在僵尸的梦游科技美国合租。彼时还没有智能 DNS 和 CDN 这样的高科技玩意儿,以至于现在 PTB 的代码里面还有这样的历史遗迹。
ptb 分站列表
其实后来 PTB 的命途也比较坎坷。无非就是我们比口袋根据地的站长年纪小了几分,最后大家都没有逃过高考这一关。从梦游科技迁出后, PTB 先后托管在 iFastNet 、 vultr vps 上。因为国内互联网环境日趋复杂,导致总有一些会员无法成功访问网站。这也就是导致论坛会员日趋减少的一个重要原因。
我是大概 2013 年的时候决定重新将网站开放出来的。当时的想法也比较简单,就是无论自己当年多么中二,这段记忆总还是要在的。毕竟还是一个可以向后人吹牛逼的资本:“看,你爹当年就是对这个玩意儿上瘾了” —— by liuyanghejerry
之后在潘达的帮助下我将服务器迁移到了日本的 sakura vps 。樱花当年的速度是真好,服务也比较稳定。
sakura vps
只不过美中不足的是,樱花也是个古典 vps 提供商。它们的账户甚至还需要人工去确认日本本地地址。而 vps 除了稳定之外,在性价比上更是一塌糊涂。前一年我使用单台机器承载了所有流量。这在一台双核 1G 内存的机器上来说真是个大型的挑战。要知道 MySQL + PHP-fastcgi 可是吃内存磁盘的大户。机器常常被拖得十分卡顿。于是在大概一年以前我拜托潘先生另外购买了一台同机房的 sakura 节点用于单独跑 MySQL ,并拿来做 SS 节点。
现在来看这个决策是很正确的,虽然多花了一点钱,但是可以有效承载更大的用户流量。这也为成功托管口袋双子星打下了一个良好的基础。
然后一年前接手了口袋双子星,并为其在口袋社区服务器的 php5.6 环境下运行做了大量的改动。
近几年,互联网,特别是移动互联网进一步普及,使得中国的互联网环境空前复杂。面试、考试中简单的从一台计算机 A 连接到服务器 B 这样理想的情况已经不复存在(虽然看上去还是那样的)。于是在去年晚些时候我又花了一些时间为双子、口袋社区部署了一个用于 CDN 的域名 suicune.cn 并进行了加速。
然而,还是很慢。发现原因是 sakura vps 到大陆的速度变的越来越差,于是就有了这次迁移。
这次迁移出于平衡的考虑(因为数据库节点不涉及到访问中国大陆,因此只要在日本就好),我选择了一台仍然在日本但是速度相对较好的 vps 。经过测试后有中文客服,并且速度还不错的海星云成为了我的首选。
接下来的事情就是测试一下稳定性,以决定是否继续使用了。

============2018.06.04更新。

先说结论吧:总体来说服务的稳定性没有 sakura 好。
毕竟是二道贩子嘛,比不过自建线路的地头蛇的。刚好在敏感时期,刚迁移完就发现有奇怪的问题。这次迁移之后我对 vps 本身的改动是有三个:其一,升级了 linux 内核到 4.3 ,默认开了 bbr ;其二,调整了 php5.6-fpm / php7-fpm 的编译参数,这个测试没有什么影响; 其三,测试几个小流量站点直接 Caddy – PHP ,去掉了中间的 nginx。第三条这个测试后来摘掉了,因为发现维护起来实在是太麻烦了。
总体来说还是维持 外部流量 – Caddy – Nginx – php5.6/7 – 代码 的这个逻辑。按理来说迁移应该是无感的, 因为环境配置和代码位置甚至临时文件位置都是一样的。但是依然出现了奇怪的丢包。
现在在怀疑是特殊时期导致的,等这两天过去之后再确认一下吧。

UGC 和街机音乐游戏

2011 年下半年我升入了大学。在高中被压抑了几年的打太鼓的兴趣被解放出来。
那会儿的互联网已经比较发达了。虽然还是 Web2.0 初期,但是人们已经热衷于把各种线下的情报搬到线上。
比如说,大型游戏机爱好者异地出勤(在外地去当地的游戏机厅)的时候,需要的位置信息。
当时,我们也做了一个用户主动发布记录的游戏厅位置记录网站,叫做“太鼓太鼓”。
基于ThinkPHP 3.0 做的。
啊,ThinkPHP 3.0 已经是 6 年前的事情了吗?

源代码:https://github.com/Woodu/taiko.tk

在同时期,除了贴吧、人人网等公开的信息渠道之外,还有诸如中国太鼓联盟论坛(cntaiko,已关站)等一大批基于已有程序的网站。
刚刚举的这些例子分别是几种不同的 UCG 平台,以“太鼓太鼓”为代表的程序,包括通过 mediawiki 等 wiki 建站程序建立的情报网站,是单纯的信息交换平台,这类网站没有任何社交属性,只是单纯的提供各地游戏机厅分布信息等的储存和展示。而人人网(当时)提供的公共主页之类的更类似于现在的微博金V 号,由管理者人工筛选一些跟主题相关的话题(比如游戏内容、游戏新情报或者单纯的地区交友贴),然后发动成员(会员)进行交流。

至于贴吧、 cntaiko 之类的论坛(公告板)性质的网站,其存在的社交性质是最浓厚的。这类平台是大部分玩家进行游戏外交流的主要途径。当然,除了贴吧之外的其他论坛更多的是以“大神分享——玩家讨论大神分享”为主要内容。直到今天的 BEMANICN 、 sows 等论坛,也是同样的模式,只不过现在的“大神”已经不是一个人,而是一个组织了。

上面所说的这些渠道所存在的核心价值,在于其本身能提供的信息价值能否保证会员持续留存。比如说 wiki ,里面的信息是否及时和准确,如果是作为参与者能否获得满足其需要的回报(论坛积分),再比如 BEMANICN 和 sows 提供的积分和积分所可以换取的服务(网络服务、游戏程序资源)。

并不是说论坛到现在为止就彻底失去了其意义,只是人们讨论非资源相关的吹水活动已经不可逆转地转移到了更方便发言和更难以追踪的即时通讯工具上了。

到了新时期 ( 2012 年之后 ) ,经历过论坛关站潮和贴吧清理之后,很多玩家,特别是以地区为划分的区域性玩家群体已经转为相对比较封闭的 QQ 群等方式进行日常的交流。这种方式让玩家们之间有了明确的界限,玩家之间的阶层划分变得更加明确。此时,玩家主要的交流也从简单的游戏信息交流转变成了以游戏为主题的综合社交。

由此可见,玩家之间,特别是同时期的玩家之间逐渐由公开转变为封闭社交。这带来的结果就是新、旧玩家之间的信息交流进一步割裂。除此之外,因为“熟人效应”,新玩家,特别是水平不够高或者跟老玩家认知不同的玩法的新玩家更容易遭到老玩家的排斥和抵触(舞萌游戏机“拆机”(游玩时比较用力导致机器损耗程度变快的玩法)事件、乐动魔方圈插队吵架,等等),甚至是群起而攻之。这也导致很多玩家“拒绝混圈”。

另一方面,在大型游戏机的老家日本,因为新款的游戏机台已经逐渐网游化,之前很多民间维护的信息已经由官方信息进行了取代。比如世嘉社的 maimai 和 chunithm 在 Aime.net 上都可以很方便地查找到每一台机器的所在地,这也使得最初很多民间维护的网站失去了意义。所以很多地区交流的玩家转为了直接从官方的网站分享自己的游玩记录,这也使得一些玩家间的交流变成了单纯的游戏记录分享。

梳理清楚这条脉络之后,我们也要认识到,每个人对于同一个事物的认知是有先后的。以《太鼓达人》为例,虽然目前大陆通行的太鼓达人街机依然以 10 年前的《太鼓达人 12 亚洲版》为主,依然有新的玩家进入并参与讨论。这本身是街机游戏的性质所致,即游戏本身玩法确定,以总参与人数胜过服务某一批特定玩家。其原因是街机机台本身是摆放在公共空间的,公共主页、群等作为在其之上派生出的交流渠道不可能覆盖每一个游戏机台的玩家。那么在这种情况下,每个在这些交流渠道上产生的内容它们的价值又在哪里呢?

我认为,价值主要体现在两个方面。

第一,游戏玩家确实需要一定程度的游戏外社交。大型游戏街机发展几十年,早于家用机一辈,从出现在公共场所(游戏机厅)的第一天开始,就承载了一定的社交角色。从最早的游戏机房内的社交,转变到至今的网络刷卡,在线对战,不变的核心仍然是其保留的竞技性。竞技性促使玩家投入更多的金钱(游戏币)来精进自己的技术,从而获得其他玩家的对自己的认可。这期间增加的花费也是大型游戏机设计的本意。

当然,这里面不包含给庄家送钱的垃圾赌博机。

第二,用户(游戏玩家)产生的内容可以作为游戏运营的参考。虽然整个日系游戏机已经完全退出中国市场,通过华立等代理商来进行运营,但是我们也可以看到,最初舞萌的官方运营微博——精文世嘉舞萌maimai 官方账号确实在微博上作为一个活跃度很高的存在来让各地玩家感受到游戏官方的运营诚意。即使精文世嘉已经结束运营这么多年,通过海外渠道传播进来的同款游戏的情报,也让 maimai 成为了国内为数不多的活跃且广泛的音乐游戏。

简单整理之后不难发现,一款游戏里,它们的受众是如何反馈自己从游戏处获得的信息,可以决定一款游戏的传播广度与深度。假如中国的大型游戏机市场还有第二春的话,我很期待新入局的人是怎么经营用户生产数据的。

番禺游记

这个周末去了一趟广州番禺,也就是中国最大的大型游戏机研发销售中心。有一些对于市场规模的了解,是我之前都不知道的。特别写一篇文章记录一下。

先感谢下之前常去的一家机厅,谢谢刘经理借我一个可以打听市场的时候可以用的,小有名气的名号。

华立的梁经理还对这家厅有所记忆,还特意问了那几组三国志大战怎么样了。

【新的认知】

1、截至2018年初,大型游戏机市场知名品牌变动

目前主流海外品牌的娱乐机代理(taitosnk playmorebandai namco entsegaIGS)已经几乎全部由华立完成。个人认为这种代理权的集中对于这个市场来说并不是好事情,尤其是当代理商决策失误的时候,可能阻碍进一步新机台的代理。

举例的话,参考下华立还在卖的 DM/GF V7 ?

哦对了, KONAMI 2017年下半年到现在没有新机台面向海外推出。

至于其他的,知名品牌还是那么多,基本每个品牌都会专注于自己的一部分产品,比如 pp虎 的厂家,再比如宝辉专注模拟,等等。

2、移动支付

管理系统行业依旧是五花八门。就这么说,在蔡三村公交站等车的时候旁边的女士都在向我推销他们的管理系统。但是由于中国移动支付行业的兴起,现在已经有面向无人值守,但也兼容一般机台投币器的直接微信扫码支付设备了。

乐摇摇投币器

在番禺走访的时候,基本推荐的都是这一家的这款设备。终端的竞争还没开始还是已经结束了呢?有点意思。

3、VR

VR 很有意思。世宇科技今年出了 5 款新的 VR 游戏。其中有一款跳舞机,两款模拟(骑行之类的),两款枪战。

世宇的 VR 是在 Windows 平台上,基于 HTC Vive 开发的。

跳舞机只有 12 首歌,有点少。

不过他们说还在添加。

可能还是以体验玩法为主。

其他家的话,星力动漫城有一整个区域是 VR 小镇。但是绝大部分店家还是以 VR 座椅之类的这些来作为把戏。意思不太大。

4、商业沟通模式

不得不承认,在刚刚过去的这个周六,我大概加了我从开始使用微信以来所加过的所有人的人数总和。而且绝大部分,特别是特定机台的 to B 端介绍材料绝大部分已经都是电子化的了。

啊,好想把这个 32G 的手机换个大一点的。

【实地探访指南】

已经有很多像我一样的,特别是近水楼台的广东本地的玩家已经探访过这里了。不过就我个人还是踩了一些坑的,因此列出来,供大家参考。

某种意义上的圣地巡礼,哈哈。

强烈推荐几人成行选择租车,因为公共交通不是很好。高铁站有神州租车的站点,不过这次我没有租车。

虽说没有租车,作为替代我体验了一下滴滴。路况也是比较堵的,而且有几个比较大的急弯,红绿灯也基本都是闪黄灯,何况还是连续的村落,经常有人横穿马路。如果自驾请一定注意安全。

我的出发地是北京,从北京西坐高铁或者动卧大概十个小时就可以直达广州的高铁站——广州南站。广州南站本身就在番禺,到市桥也很方便。

地铁有7号线,在长隆换3号线就可以到达市桥

市桥算是番禺的一个市中心,在地铁站附近就可以找到去动漫产业园的公交 番27或者番7 都可以。

说是动漫产业园,其实是几个连接起来的村子。这几个村子虽然都是相邻的,但是连起来也有五六公里的长度,而公交车在非高峰时期(上班、中午、下班)往往半小时到四十五分钟一趟,非常浪费时间。

这边早上一般九点半开始营业,下午能到五六点的样子。

我的建议是坐到龙美村下车,这里是新机台的起点。龙美村——蔡三村这一线有星力动漫产业园,也是华立、世宇等企业展厅的所在地。

然后从龙美村或者蔡三村接着往远离市区的方向坐车(番27或者番51/51B),新水坑开始就是一些二手机台的集散地了。

樟边村也是个上过调查报告的地方,整个村子都在做二手游戏机的回收、翻新、拆解等工作。有惊喜。

然后由于时间的关系,比较远的地方没能成行,比如金三村之类的,那边也有一些熟悉的企业在。

每个村子用大概四十多分钟就可以走完,遇到感兴趣的店可以多坐一会儿。

【传闻和传闻确认】

1、太鼓达人

国内太鼓玩家已经非常、非常少了。不过也正因为如此,剩下的玩家都是对这个游戏有着真爱的人。

在华立刚刚从官网删掉太鼓达人 12 亚洲版的时候,我就发过朋友圈,说国内已经没有正版太鼓了。这次去华立和世宇也确认了这件事情。世宇其实就卖过一阵子太鼓,早早就停了。华立也大概在一年前彻底停止了新的太鼓达人的机台的生产。

希望是引进太鼓达人新框体之前的市场空白期吧。

2、广州世嘉和一个不知道牌子的厂家

为什么对广州世嘉这个牌子这么有印象,是因为他们的 Logo 是仿照 SEGA 的风格做的。这一次去,星力动漫产业园的广州世嘉门店没有开门,神采飞扬的门店里面也没看到舞萌机台的身影。然后因为去的比较早,在园区里闲逛的时候看到了另一个 SEA 什么开头的店,也是这个风格的 Logo 。

看来神采这是打算走到黑呀。

哈哈。

3、新机台引进

去华立了解了一下奥特曼的机器,价格挺好的,不过运营成本比较高。感觉不会推的太开。

销售完全没有听说过 Project DIVA AC 的信息,可能也是因为级别不够。

【音乐游戏二手机台概述】

如果有货的话,很便宜。

DEAC 不砍价一万,真的就是纯硬件价格了。毕竟也是2600k + 不错的显卡。

部分机台价格居高不下,比如太鼓达人 12 亚,至今还在一万多元。不过想了想,就算很便宜也没地方摆。

绝大部分机器是台湾那边的机器,铁琴、音旋风之类的。

哦对了,有一台 Ez2dj 。写着写着想起来好像是之前线人给我发过。

剩下的热门,太鼓、 ubt 、 rb 、maimai 等等 普遍都没货。当地普遍认为音乐游戏机已经不再受市场欢迎了,而且流转比较快。

感觉想要淘机器开店的,要抓紧了。

不过说回来,有一些事情让我觉得很有意思。

第一件事是有一家店摆了一台 SDVX 3 ,卖家倒是很坦诚,说是摆了好多长得像学生的人进去看。

等等,我看上去有这么嫩么?哈哈

第二件事是有一家店说他们同时有太鼓达人 12 和 13 ,然后表示,节目可以随便换,反正就是复制。

第三件事,我觉得有一些厂家可能会官方回收二手机台,然后翻新了按照新的出。

嗯,我说的是 maimai 。

我也没有实锤,只是他们这个尿性,我觉得做得出来。

 

总之,番禺是个好地方,真的准备开那玩意的时候,再来好好转转。