组装 - 安全竞争

Posted

技术标签:

【中文标题】组装 - 安全竞争【英文标题】:Assembly - safe competition 【发布时间】:2016-11-05 13:47:38 【问题描述】:

我参加了名为“Code guru - Extreme”的比赛 在本次比赛中,8086 装配有保险柜和钥匙。 一个保险柜和一把钥匙是有联合数据段的,你需要制作一把能破坏保险柜的钥匙。 安全示例:

L:
     mov ax, [1234]
     cmp ax, 5678
jne L

打开保险箱的钥匙示例

L:
    mov ax, 5678
    mov [1234], ax
jne L

现在我有一个保险箱,我不能打破它

and     al, 0FEh
push    ax
clc
mul     ax
xor     ax, dx
or      al, 1
loc_10A:
    sub     [0A2h], ax
    pop     ax
    push    ax
jnz     loc_10A

safekey 的模拟是在 Core Wars 8086 engine 内完成的。 rules 如下,其中 safekey 都是战争中的幸存者:

幸存者不能在固定地址上加载,因为游戏 引擎每轮将它们加载到一个随机地址。那些节目 生成的必须是 COM 而不是 EXE,并且只包含 8086 条指令。

每个幸存者都会收到一组自己的完整寄存器 (寄存器),其他幸存者无法访问。在 此外,每个幸存者都有一个 2048 字节的“个人”堆栈,即 其他幸存者也无法进入。

在运行第一轮游戏之前,游戏引擎 将 arena 中的所有字节初始化为值 0CCh(注意:这 字节值是“不受支持”的指令 - 详情如下)。那么发动机 将每个幸存者加载到竞技场内存中的随机位置,即 - 完全按原样复制幸存者文件的内容。这 两个幸存者之间的距离,以及两个幸存者之间的距离 幸存者和竞技场边缘,保证至少1024 字节。每个幸存者的代码最大为 512 字节。

在第一轮之前,游戏引擎初始化寄存器(的 每个幸存者)到以下值:

BX、CX、DX、SI、DI、BP - 重置。 标志 - 重置。 AX, IP - 初始幸存者的位置,游戏引擎加载幸存者的竞技场中的随机偏移量。 CS、DS - 所有幸存者共有的竞技场部分。 ES - 同一组的幸存者共享内存的段(段)(请参阅高级技术)。 SS - 幸存者个人堆栈的开始部分。 SP - 偏移幸存者个人堆栈的开始。

此时游戏以回合开始,每一回合运行游戏引擎运行每个幸存者的下一条指令,直到结束 游戏结束:在 200,000 轮之后,或者当一个幸存者仍然存在时 在竞技场。幸存者在每轮比赛中的顺序 在游戏开始时随机确定,并且不 期间发生变化。

在以下情况下,幸存者将被取消资格:

运行非法指令(例如:字节 060h,不转换为任何汇编指令)。 游戏引擎运行“不支持”指令(例如:“INT 021h”)。游戏引擎阻止尝试启动的运行指令 与操作系统或计算机硬件的直接通信。 尝试访问不在竞技场范围内的内存, 并且不在幸存者的“个人”堆栈范围内。 攻击其他幸存者是通过在竞技场内存中写入有关他们的代码的信息来完成的(为了让他们执行其中一项 以上三项行动),并因此取消他们的资格。早些时候, 因此,必须找到它们的藏身之处:)

【问题讨论】:

你的问题是什么? 那个例子没有多大意义。所以你确实改变了原来的锁码?如果是,为什么不只是je L。如果您在原始锁之前添加了该密钥,则L 标签和jne L 不属于该密钥(如果 ZF=0,它甚至可以无限循环)。 如果那个锁已经在运行,那么ax 是随机的,甚至是常数 0-64k,所以你可以做一些聪明的事情,比如 nopasara 作为答案,或者只是将每个偶数放入 [0A2h ] 每两个周期(不要太快),直到你不小心碰到正确的一个。 (解锁有限制吗?) 【参考方案1】:

首先AX是未知的,计算没有意义但是push ax;。稍后,从循环的第二遍开始,AX 被弹出但仍然未知且恒定,因此您需要捕捉 2 个“内存变量”值之间的差异,它将是 AX 值。类似的东西:

  mov cx, 0ah;    
     delay:
        nop;
        loop delay;
     l2:
        mov ax, [0A2h];
        mov bx, [0A2h]; 
        sub ax, bx
     jz l2;
        mov [0A2h], ax;
     jmp l2

【讨论】:

【参考方案2】:
l: 
   mov bx, 0a2h 
   mov dx, 0xffff            
   mov word [bx], dx
   nop
   nop
   mov ax, word [bx]
   sub dx, ax 
   mov word [bx], dx 
   mov dx, 0xffff 
   jmp l  

【讨论】:

欢迎来到 ***。请不要只发布代码;发表解释。见***.com/help/how-to-answer。另请参阅***.com/conduct。

以上是关于组装 - 安全竞争的主要内容,如果未能解决你的问题,请参考以下文章

隧道传输子命令时套接字竞争的安全隐患

云计算产业进入“软实力”竞争时代,得安全者得“天下”

北航数模21中青杯 B题 港珠澳大桥桥梁设计与安全策略 A题汽车组装车间流水线问题

北航数模21中青杯 B题 港珠澳大桥桥梁设计与安全策略 A题汽车组装车间流水线问题

北航数模21中青杯 B题 港珠澳大桥桥梁设计与安全策略 A题汽车组装车间流水线问题

北航数模21中青杯 B题 港珠澳大桥桥梁设计与安全策略 A题汽车组装车间流水线问题