COREWAR

/
Step 29: 【Trap(罠)】敵の魂を誘拐する「Vampire」の観察と改造
🎯JMPトラップ(牙)を0400番地へ投下し、敵を罠(Pit)へ誘拐して撃破する(0/1)

ミッション一覧 (全30ステップ)

第1章:画面とメモリの基本 (1-6)
BASIC★☆☆
Step 1: 時間を進める「STEP」ボタン
🔒
BASIC★☆☆
Step 2: プロセスの停止と「RESET」での復旧
🔒
BASIC★☆☆
Step 3: 「編集できる状態」と「実行中の状態」EDIT
🔒
BASIC★☆☆
Step 4: メモリの箱の3つの部屋(右の部屋 B を変える)EDIT
🔒
BASIC★☆☆
Step 5: 左の部屋(A)と右の部屋(B)を書き換えるEDIT
🔒
BASIC★☆☆
Step 6: 「数値(#)」と「番地($)」の記号の違いEDIT
第2章:代表的な命令とループ (7-13)
🔒
ARITHMETIC★☆☆
Step 7: 足し算の命令「ADD」の観察
🔒
ARITHMETIC★☆☆
Step 8: 足す「数値(A)」を変えてみようEDIT
🔒
ARITHMETIC★☆☆
Step 9: 足す「相手の場所(B)」を変えてみようEDIT
🔒
ARITHMETIC★☆☆
Step 10: 引き算の命令「SUB」を使ってみようEDIT
🔒
BASIC★☆☆
Step 11: 箱を丸ごとコピーする命令「MOV」EDIT
🔒
CONTROL★☆☆
Step 12: 時間を巻き戻すジャンプ命令「JMP」EDIT
🔒
CONTROL★☆☆
Step 13: 簡単なプログラムを作ろう(自動カウンター)EDIT
第3章:ノイマン型とデジタル生命 (14-18)
🔒
BASIC★☆☆
Step 14: なぜ「DAT」が爆弾になるのか?EDIT
🔒
BASIC★☆☆
Step 15: 自分自身の命令をコピーする(コード=データ)EDIT
🔒
BASIC★☆☆
Step 16: お手本観察:最古の生命体「Imp」をSTEP実行する
🔒
BASIC★☆☆
Step 17: Impの簡単な変更(コピー先の観察と実験)EDIT
🔒
ARITHMETIC★★☆
Step 18: 間接参照(@ポインタ)の仕組みを知るEDIT
第4章:伝統的アルゴリズム (19-24)
🔒
STRATEGY★★☆
Step 19: お手本観察:爆撃機「Dwarf」をSTEP実行で解剖する
🔒
STRATEGY★★☆
Step 20: Dwarfの簡単な変更(爆弾の間隔を変える)EDIT
🔒
STRATEGY★★☆
Step 21: 実戦デビュー:爆弾の間隔を調整して標的を破壊せよEDIT
🔒
CONTROL★★☆
Step 22: お手本観察:分裂命令「SPL」と増殖の仕組み
🔒
CONTROL★★☆
Step 23: お手本観察:条件比較命令「SEQ / CMP」で敵を探すEDIT
🔒
STRATEGY★★☆
Step 24: お手本観察と変更:防衛罠「Imp-Gate」でImpを止めろEDIT
第5章:実戦改造と総合演習 (25-30)
🔒
STRATEGY★★☆
Step 25: 【Stone(石)】高速爆撃機の観察とステップ幅の改造EDIT
🔒
STRATEGY★★☆
Step 26: 【Paper(紙)】自己複製スウォーム「Mice」を観察する
🔒
STRATEGY★★★
Step 27: 【Paperの改造】クローン投下距離を変更して増殖せよEDIT
🔒
STRATEGY★★☆
Step 28: 【Scissors(鋏)】索敵スキャナーの観察とスキャン間隔の改造EDIT
🔒
STRATEGY★★★
Step 29: 【Trap(罠)】敵の魂を誘拐する「Vampire」の観察と改造EDIT
🔒
STRATEGY★★★
Step 30: 卒業試験:愛機のチューニングと総合バトルEDIT
🟢 編集モード(セルをクリックして変更できます)
[番地][命令 (Opcode)][A (左の値)][B (右の値)]
📦 データ領域 / 爆弾 (DAT)
0000
▼MOV
#
$
0001
▼MOV
<
<
0002
↺JMN
$
$
👈 ここを変更
0003
❖SPL
@
#
0004
+ADD
#
$
0005
↺JMP
$
$
0006
■DAT
$0
$0
++ 命令を追加
0007
■DAT
$0
$0
0008
■DAT
$0
$0
0009
■DAT
$0
$0
0010
■DAT
$0
$0
0011
■DAT
$0
$0
0012
■DAT
$0
$0
0013
■DAT
$0
$0
0014
■DAT
$0
$0
0015
■DAT
$0
$0
0016
■DAT
$0
$0
0017
■DAT
$0
$0
0018
■DAT
$0
$0
0019
■DAT
$0
$0
0020
■DAT
$0
$0
0021
■DAT
$0
$0
0022
■DAT
$0
$0
0023
■DAT
$0
$0
0024
■DAT
$0
$0
0025
■DAT
$0
$0
0026
■DAT
$0
$0
0027
■DAT
$0
$0
🏟️ARENA (20 ROWS)SCOPE: 0000 - 0019
[メモリ空間 800番地 (20行 × 40列)]左のエディタと1対1で同期
P1: 0
P2: 0
CYC: 0
📖 講義ノート // STEP 29 OF 30第5章:3大アーキタイプ(石・紙・鋏)と進化生態系⏱ 読了目安:約6分
📖 講義ノート:この実験で起きているコンピュータ科学と人工生命の原理

【Trap(罠)】Vampire(吸血鬼)とコンピュータ・セキュリティの制御フローハイジャック

DAT爆弾で殺すのではなく、JMPトラップ(牙)で敵の実行ポインタを自陣の処刑場(Pit)へ誘拐する高等戦術

#Vampire Archetype#Fang (JMP Trap) & The Pit#Control-Flow Hijacking#Process Starvation (SPL Trap)#Return-Oriented Programming (ROP)
🔬Step 29: 【Trap(罠)】敵の魂を誘拐する「Vampire」の観察と改造

高等戦術 「Vampire(ヴァンパイア:吸血鬼)」 を体験しましょう! 普通の爆撃機は DAT 爆弾を投げますが、Vampireは 「踏んだ敵の実行ポインタ(魂)を、自分の体内にある処刑場(The Pit:0004番地の DAT 罠)へ強制ワープさせる JMP 命令(牙 / Fang)」 を投げつけます!

- 0002 番地にある JMP.A $-396, #390 が「牙(Fang)」です。 - この牙が 0400 番地に着弾して敵に踏まれると、敵は 400 - 396 = 0004 番地(こちらの DAT 処刑場)へ自ら飛び込んで自멸します!

🎯 やってみよう 牙である 0002 番地の B(右の数値=投下先距離) を #390 から #398(0002 + 398 = 0400 番地)に変更して [PLAY] を押し、敵の魂を 0004 番地の罠へ誘拐して撃破しましょう!

1. 第4の奇襲種族「Vampire(吸血鬼)」:殺さずに誘拐する理由

Step 29では、CoreWarにおける最も妖しく、かつコンピュータ・セキュリティの観点から最も示唆に富む高等戦術——『Vampire(ヴァンパイア:吸血鬼)』を体験しました。

これまでのStoneやScissorsは、すべて敵のコードの上に『DAT(データ爆弾)』を投げつけて、敵のプロセスをその場で即死させようとしていました。 しかし、Vampireが投げるのは『DAT』ではありません。Vampireが敵陣へ向けて投下するのは、「踏んだ敵のプログラムカウンタ(魂)を、Vampire自身の体内にある『処刑場(The Pit:落とし穴)』へと強制ワープさせる『JMP命令(通称:牙 / Fang)』」なのです!

今回のコードを見てみましょう。 ・0002番地(牙 / Fang):『JMP.A $-396, #398』 ・0003〜0004番地(処刑場 / The Pit):『SPL.A $1, #0』と『DAT.F #0, #0』 1行目の『MOV.I $2, @2』が、0002番地にある「牙(JMP命令)」を、そのB値(#398)が指す『0002 + 398 = 0400 番地(敵の真上)』へと撃ち込みます。 次の瞬間、0400番地の敵がその牙(『JMP.A $-396』)を踏むと何が起きるでしょうか? 敵の実行ポインタは『0400 - 396 = 0004 番地』——すなわちあなたの体内にある処刑場(DAT)へと自ら大ジャンプして飛び込み、自滅したのです!

[0000] MOV.I $2, @2      ──(Launches the Fang at [0002] to 0002 + 398 = [0400])──┐
[0001] JMP.A $-1, #0                                                             │
[0002] JMP.A $-396, #398 ──► 🧛 THE FANG (Calibrated JMP Trap)                   ▼
[0003] SPL.A $1, #0      ──┐                                           [0400] JMP.A $-396, #398
[0004] DAT.F #0, #0      ◄─┴─ 💀 THE PIT ◄──(Enemy at 0400 jumps 400 - 396 = 0004!)──┘

2. なぜ直接DATを投げるより「Pit(処刑場)」へ誘拐するほうが恐ろしいのか?

「結局 0004 番地のDATで殺すなら、最初から 0400 番地にDAT爆弾を投げても同じじゃないか?」と思うかもしれません。 もし相手がプロセスを1つしか持たない単純な敵なら同じです。しかし、相手がStep 22やStep 26で登場した『SPLで何十個ものプロセスに分裂している敵(Paperなど)』だった場合、DAT爆弾とVampireの罠では天と地ほどの差が生まれます!

もし10個のプロセスを持つ敵の1つに『DAT』を当てて殺してしまうと、敵のプロセス数は9個に減り、残りの9個のプロセスは「1/10 ではなく 1/9 のスピード(少し速くなった状態!)」で元気に動き続けてしまいます。 ところが、Vampireの処刑場(Pit:0003〜0004番地)には『SPL.A $0(無限に分裂し続ける罠)』が仕掛けられています! 誘拐された敵の1つのプロセスがこの『SPL』の落とし穴に落ちると、敵は死ぬ前にその穴の中で 2個、4個、8個、16個、100個…と【無意味な囚人プロセスを勝手に無限増殖させられる】のです!

するとどうなるでしょうか? Step 22で学んだ「並列計算の 1/N の法則」を思い出してください! 落とし穴の中で敵の囚人プロセスが100個に増えると、外で戦っている本物の敵プロセスの実行スピードが『1/100』に激減して完全に麻痺(フリーズ)してしまいます! これを『プロセス飢餓攻撃(Process Starvation / Brainwashing)』と呼び、最後にVampireがゆっくりとDATで止めを刺すのです。

3. サイバーセキュリティにおける「制御フローハイジャック(Control-Flow Hijacking)」

このVampireの戦術——「相手のメモリ空間にジャンプ命令(またはジャンプ先番地)を書き込み、相手のプログラムカウンタ(PC)を攻撃者が用意した罠コード(Pit)へと強制誘導する」という手法は、現代のコンピュータ・セキュリティにおいて『制御フローハイジャック(Control-Flow Hijacking)』と呼ばれる攻撃技術そのものです。

現実のソフトウェア攻撃でも、ハッカーはプログラムを単にクラッシュ(DAT)させるのではなく、関数ポインタやスタック上の戻り番地(Return Address)を書き換えて、プログラムの実行ポインタを攻撃者が用意したシェルコードやガジェット(ROP: Return-Oriented Programming)へとジャンプさせ、プログラム自身の権限で命令を実行させます。 これに対抗するために、現代のCPU(Intel CET や ARM Pointer Authentication など)には『CFI(Control-Flow Integrity:制御フロー整合性検証)』という、「正当なジャンプ先以外へのJMPをハードウェアで検知して遮断する」防衛機構が導入されています。Vampireの「牙(Fang)」の距離計算(400 - 396 = 4)を成功させたあなたは、この制御フローとアドレス計算の核心を完全に理解したと言えるでしょう。

🔒

🔒 MISSION CLEAR で講義ノートの全編が解放されます

上段の実験シミュレーターでミッションを達成すると自動的に全編がアンロックされます。(下のボタンから今すぐ全文を先に読むことも可能です)