You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Core Wars 8086安全挑战:求自定义保险箱的密钥生成方案

保险箱代码分析

你的保险箱代码核心是一个无限循环,仅当内存地址DS:1234的值为0时,循环会执行一次后退出,随后将自身加载地址写入DS:0,之后再次进入无限循环。

循环的执行逻辑拆解:

  1. 每次循环读取[1234]到CX,经过inc、shl等操作后,将新值写回[1234]
  2. loop指令会先将CX减1,若结果不为0则继续循环
  3. 仅当[1234] = 0时,循环体执行后CX最终为1,loop减1后CX=0,循环终止
密钥程序设计

密钥程序需要完成两个核心操作:

  1. 预先将DS:1234写入0,触发保险箱程序的循环终止逻辑,使其向DS:0写入自身加载地址
  2. 读取DS:0的地址,定位保险箱程序位置,扫描竞技场攻击其他程序(避免自身被淘汰)
密钥程序代码
; Core Wars 密钥程序(COM格式)
start:
    mov word [1234], 0    ; 初始化保险箱触发地址,使其退出首次循环
wait_for_sig:
    mov ax, [0]           ; 等待保险箱写入自身地址到DS:0
    cmp ax, 0
    je wait_for_sig

    mov si, ax            ; 记录保险箱程序地址
    add si, 1024          ; 跳过保险箱所在区域(保证至少1024字节间距)
scan_arena:
    cmp byte [si], 0CCh   ; 扫描非初始值区域(其他程序)
    jne eliminate_target  ; 发现目标,发起攻击
    inc si
    jmp scan_arena

eliminate_target:
    mov byte [si], 0CCh   ; 覆盖为非法指令,淘汰目标程序
    jmp scan_arena
代码说明
  • 所有指令均为8086合法指令,符合Core Wars引擎规则
  • 仅访问竞技场内存,无非法操作
  • 长度远小于512字节限制
  • 逻辑流程:触发保险箱信号→获取保险箱位置→扫描并淘汰其他程序

内容的提问来源于stack exchange,提问作者AyAm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 18:55:27