大会 - 安全的竞争

时间:2016-11-05 13:47:38

标签: assembly x86-16

我参加了名为' 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

ax在0-64K之间随机

2 个答案:

答案 0 :(得分:2)

首先,AX未知,计算无意义,但push ax;。之后,从循环的第二遍开始,AX得到了poped,但仍然是未知和恒定的,所以你需要记住2"内存var"值,它将是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

答案 1 :(得分:0)

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