上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的值互换