黑客攻防从入门到精通(加密与解密篇)
上QQ阅读APP看书,第一时间看更新

1.4 常用的汇编语言命令

在加密中会常用到几个汇编语言命令,所以在这里做一下说明,便于以后的参考和运用。

跳转命令

根据条件做出是否跳转的决定,通常前面会有一个判断语句,例如,

CMP AX, BX       比较AX与BX
        JZ XX             相减为0则跳转到XX标号行

上面两行语句命令意为用AX减BX,它的值如果为0,则跳转到XX的标号行。

常用的跳转命令有以下几种。

JZ/JE             相等或为0则跳转(机器码为74或0F84)
        JNZ/JNE          不相等或不为0则跳转(机器码为75或0F85)
        JL/JLE            小于、小于或等于则跳转
        JG/JGE           大于、大于或等于则跳转
        JMP              无条件跳转(机器码为EB)

比较语句

CMP AX, BX       AX寄存器减去BX寄存器的内容
        AND AX, BX       AX与BX做“与运算”
        OR AX, BX        AX与BX做“或运算”
        TEST AX, BX       与AND AX, BX命令有相同效果
        XOR AX, BX        使AX的内容清零,每个寄存器与自己作异或运算等于清零动作

子程序

一个子程序的例子:CALL 15F:334422

在软件的加密中,子程序是个很重要的概念,它是一个主程序的分支,用来指定某些特定动作,即一个程序不可能就是一条主程序到头,肯定会调用子程序,由子程序来实现注册的功能,并对其进行比较,然后标记是否注册正确。因此,破解的关键在于找准程序作注册判断的部分,进入那个注册子程序。子程序的返回码是RET。

算术运算

ADD AX, BX        加法运算AX=AX+BX
        SUB AX, BX        减法运算AX=AX-BX
        INC AX           寄存器加AX=AX+1
        DEC AX           寄存器减AX=AX-1
        MUL             乘法运算
        DIV               除法运算

数据操作

MOV AX, BX       数据传输指令,将BX的值移送到AX中
        XCHG AX, BX      将AX与BX的值互换