「ん......」
目が覚める。喉の渇きを感じ、ぬるくなった水を飲んだ。
「今何時だ」
パソコンの画面に目を向けると、なぜかテキストエディタが開かれており、そこにはこう記されていた。
『16個すべてのUnreal USBを取得した時、この世界の
「は?」
なんだこの文章は――何者かにハッキングされたのか?このオレが? そもそもUnreal USBってなんだよ......。
予想外の出来事に、思考がばらばらに散らばる。
ふと視線を落とすと、モニターの下に見慣れないUSBが置かれていた。
心臓が、一瞬だけ跳ね上がった。
恐る恐る手に取ると、表面には『Unreal USB』と刻まれていた。
「な......! まさか部屋の中に侵入されたのか!?」
急いでドアを確認すると、二重ロックはしっかりとかかったままだった。
「一体どうなってるんだ」
USBを裏返すと、そこには『MOVE』と書かれていた。
「MOVE......メーカーの名前か?」
すぐさまモニターの前に戻り、検索をかけてみたが、MOVEという名のUSBメーカーは一件もヒットしなかった。
存在しないはずのものが、今、オレの手の中にある。
「くそっ......オレが寝ている間に、この部屋で何が起こったんだ」
答えを探すたびに、疑問だけが増えていく。
もう一度、USBに目を向ける。
「USBってことは、パソコンに繋げれば中身が見られるんだよな」
側面のスライダーを押し上げると、銀色のプラグが顔を出した。
その瞬間、USBが青白く発光した。
「!?」
驚きのあまり言葉にもならない声が出て、USBを取り落としそうになる。
部屋に静寂が戻る。心臓がまだうるさかった。
驚かせやがって! いっそ窓から放り投げてやろうか!
......いや、それじゃ何もわからないままだ。
一回深呼吸をして心を落ち着かせ、オレは不気味に光るUSBを拾い上げた。
「もしこれがUSB Killerのようなものだったら、オレのパソコンはお釈迦だな」
USB Killer――ハードウェアを直接破壊する、電気的攻撃装置だ。
ま、壊れたら壊れた時だ。
それでも、ポートに近づけるたびに、指先が微かに震えた。
オレはプラグをゆっくりとポートに差し込んだ。
が、プラグはポートに収まらなかった。よく見ると、見たことのない形状をしている。
Type-A / B / C / Micro / Mini、どれでもない型。
なら一体、どこに差し込むっていうんだよ......。
物理ポートが存在しない?
いや違う。
なら、その接続先はどこだ。
どうにもならなくなり、もう一度テキストエディタを開く。
『16個すべてのUnreal USBを取得した時、この世界の管理者となる』
先ほどと同じ文章。だが、一つ疑問が浮かぶ。
「この世界の管理者となる......」
つまり、現在のオレは『非特権ユーザー』ということになる。
ばかげている。まるでこの世界が仮想現実――
「そういうことか」
オレは小さく呟いた。
これは機械に接続するUSBじゃない。人間に接続するためのUSBだ。
オレはゆっくりと、人差し指でプラグの先端に触れた。
その瞬間――全身に電流が走るような感覚に襲われた。脳がCPU、記憶がストレージ、呼吸がファン。自分の体が機械へと作り替えられていくような感覚。
そして――
00000000: B8 34 12 00 00 89 C3 8B 45 FC 83 C0 10 89 45 F8
00000010: 55 48 89 E5 48 83 EC 20 48 8D 3D 2A 00 00 00 E8
00000020: 1B 00 00 00 85 C0 74 0A 83 F8 01 75 05 EB 0C 8B
00000030: 4D F8 31 C0 89 C1 01 D1 89 4D F4 5D C3 90 90 48
00000040: 31 FF 48 89 FE 48 8D 7D E0 E8 2D FF FF FF 90 83
00000050: EC 10 C7 45 FC 00 00 00 00 8B 45 FC 83 C0 01 89
00000060: 45 FC 83 7D FC 10 7C 0A B8 01 00 00 00 EB 08 0F
00000070: 1F 84 00 00 00 00 00 48 89 D8 48 29 C3 48 89 D8
00000080: E9 3A FF FF FF 90 90 90 55 48 89 E5 48 83 EC 30
00000090: 8B 55 FC 8B 45 F8 01 D0 89 45 F4 5D C3 90 90 90
000000A0: 48 8B 05 1A 00 00 00 48 85 C0 74 07 FF D0 EB 05
000000B0: B9 10 00 00 00 31 C0 F3 AB 48 8D 3D 11 00 00 00
000000C0: 89 7D FC 8B 75 FC 48 8D 45 F8 89 45 F8 5D C3 90
000000D0: 83 F8 00 7F 0A 48 FF C0 75 F5 EB 08 90 90 90 90
000000E0: 48 31 C0 48 FF C0 48 83 F8 05 7C F6 C3 90 90 90
000000F0: 0F 85 12 00 00 00 48 89 DF E8 34 FF FF 90 90 90
00000100:
以下、延々と続く数値の羅列が、視界いっぱいに広がっていた。
これは――
この並び......見覚えがある。プロセスのメモリダンプと同じ構造だ。
つまり、これはただの数値じゃない。オブジェクトの状態そのものを表している。
「いよいよ、この世界が仮想現実であることの現実味が増してきたな」
妙な話だが、納得してしまっている自分がいる。
――ということは、USBに書かれていた『MOVE』という文字......もしや物体を移動することができる?
オレは目の前にあるペットボトルに視線を合わせた。
07FF6A10: 8B 45 08 8B 48 04 83 F9 00 75 0F 8B 10 83 FA 00
07FF6A20: 7E 08 83 EA 0A 89 10 C3 90 90 C3
すると、07FF6A10~07FF6A2Aまでのオフセットが表示された。
なるほど、これがこのペットボトルのHex値というわけだ。ベースアドレスは『07FF6A10』。
表示された値は連続している。おそらく先頭からx、y、z座標が並んでいる。
なら、この先頭アドレスに書き込めば、x座標を直接いじれるはずだ。
試しに100加算する x86アセンブリ命令を書き込んでみるか。
mov eax, 0x07FF6A10
add dword ptr [eax], 100 ; x += 100
この命令を脳内でHex変換するとこうなる。
B8 10 6A FF 07 83 00 64
このHex値をベースアドレスに書き込む――さぁ、どうなる......!
結果、ペットボトルは体感10センチ右に移動した。約10センチ......つまり100ミリ。加算値は100。
――1単位あたり1ミリ、か。
「......確定だ。このUSBはオブジェクトの座標を操作できる」
興奮を押し殺しながら、オレは静かに口角を上げた。
ベースアドレスを確認すると、書き込んだHex値が『8B 45 08 8B 48 04 83 F9』に戻っていた。
書き換えたコードは一時的に実行されるだけか。本体の構造自体は常に元の状態にロールバックされるらしい。
つまり、オレがやっているのはデータの改変じゃない。処理結果の上書きだ。
これをy、z軸にも適用する場合――
mov esi, 0x07FF6A10
; 読み込み
mov eax, [esi] ; x
mov ebx, [esi+4] ; y
mov ecx, [esi+8] ; z
; 変更
sub eax, 100 ; x -= 100
add ebx, 250 ; y += 250
add ecx, 200 ; z += 200
; 書き戻し
mov [esi], eax
mov [esi+4], ebx
mov [esi+8], ecx
思った通り。ペットボトルはオレの頭上に乗った。
なるほど。このUSBは現実の理を書き換える装置らしい。そして、同種のものがあと15個存在する。
THWのランキングは1位から15位まで。加えて、その上に
合計、16。
すべてのUSBが、あのランキングと紐づいていると考えるのが自然か。
「面白い」
久しぶりに、血が沸く感覚があった。第1位――albedo。あいつが絡んでいるなら、話は別だ。
「すべてのUSBを手中に収め、オレが最も優れたハッカーであることを世界に証明してみせる......!」
オレは静かに拳を握り締めた。