2024年3月12日发(作者:)

关于暴力破解中所用到的汇编指令机器码知识

我们在暴力破解中修改的对象基本上都是条件跳转指令(如 JZ、JNZ、JG。。。等等)和无条件跳转指令JMP,

对于其它地方的修改多数都是改成NOP,所以这里主要讲一下跳转指令对应的机器码。在80X86 体系的

CPU中,成对条件跳转指令(指的是判断条件刚好相反)如下所示:

JZ <--> JNZ

JE <--> JNE

JB(JNAE) <--> JNB(JAE)

JC <--> JNC

JA(JNBE) <--> JNA(JBE)

JG(JNLE) <--> JNG(JLE)

JL(JNGE) <--> JNL(JGE)

JS <--> JNS

JP(JPE) <--> JNP(JPO)

JO <--> JNO

80X86体系CPU中的条件跳转指令分为单字节和双字节指令两种,分别对应8BIT和16BIT跳转;而与

条件跳转指令相匹配的无条件跳转指令 JMP也有单字节和双字节指令两种,分别对应8BIT和16BIT跳转,

当我们需要将条件跳转指令改成相应的无条件跳转指令时,因为要保持修改前后机器码 长度的一致性,

所以要注意被修改的条件跳转指令是单字节还是双字节指令,从而用相应字节的JMP机器码来代替,下表

列出了暴力破解中条件跳转指令的修改方 法:

8位跳转指令修改方法

汇编指令

JZ ????????

JE ????????

JB ????????

JNAE ????????

JC ????????

JA ????????

JNBE ????????

JG ????????

JNLE ????????

JL ????????

JNGE ????????

JS ????????

JP ????????

JPE ????????

JO ????????

机器码 相反汇编指令

JNZ ????????

JNE ????????

JNB ????????

JAE ????????

机器码 测试标志位

改后的机

器码

对应汇编指令

74 XX 75 XX

Z = 0 或 1

72 XX

72 XX

77 XX

73 XX

C = 0 或 1

C = 0 或 1

Z OR C = 0 或

1

(S XOR O) OR

Z = 0 或 1

S XOR O = 0

或 1

S = 0 或 1

P = 0 或 1

O = 0 或 1

EB XX JMP ????????

JNC ???????? 73 XX

JNA ????????

JBE ????????

JNG ????????

JLE ????????

JNL ????????

JGE ????????

76 XX

7F XX 7E XX

7C XX

78 XX

7A XX

70 XX

7D XX

JNS ???????? 79 XX

JNP ????????

JPO ????????

7B XX

JNO ???????? 71 XX

关于暴力破解中所用到的汇编指令机器码知识

16位跳转指令修改方法

汇编指令

JZ ????????

JE ????????

JB ????????

机器码

0F 84

XX

0F 82

相反汇编指令

JNZ ????????

JNE ????????

JNB ????????

JAE ????????

机器码 测试标志位

修改后的

机器码

对应的汇编指

0F 85 XX

Z = 0 或 1

JNAE ???????? XX

JC ????????

JA ????????

0F 82

XX

0F 87

0F 83 XX

C = 0 或 1

JNC ???????? 0F 83 XX

C = 0 或 1

JNA ????????

JBE ???????? JNBE ???????? XX

JG ???????? 0F 8F

0F 86 XX

Z OR C = 0 或 1

(S XOR O) OR Z

= 0 或 1

S XOR O = 0 或

1

NOP

JMP ????????

JNG ???????? 0F 8E

JLE ???????? XX

JNL ???????? 0F 8D

JGE ???????? XX

JNLE ???????? XX

JL ???????? 0F 8C

90 EB XX

JNGE ???????? XX

JS ????????

JP ????????

JPE ????????

JO ????????

0F 88

XX

0F 8A

XX

0F 80

XX

JNS ???????? 0F 89 XX

S = 0 或 1

JNP ???????? 0F 8B

JPO ???????? XX

P = 0 或 1

JNO ???????? 0F 81 XX

O = 0 或 1

关于暴力破解中所用到的汇编指令机器码知识

关于跟踪程序时如何在Softice中动态改变条件跳转指令的执行方向:

其实这个问题我已经在“破解常见问题/技巧”中仔细讲过,可还是老有人来问,现在再次将相应的

Softice列出来!

跳转指令

JZ、JNZ、JE、JNE

JB、JNB、JAE、JNAE、JC、JNC

JA、JNBE

JNA、JBE

测试标志

Z=0或1

C=0或1

R FL=Z

R FL=C

Softice命令

Z OR C = 0

R FL=+Z 或 R FL=+C 或 R FL=+Z+C

Z OR C = 1 R FL=-Z-C

(S XOR O)

OR Z = 0

(S XOR O)

OR Z = 1

S XOR O =

0

S XOR O =

1

S=0或1

O=0或1

P=0或1

R FL=+Z 或 R FL=+S-O 或 R

FL=-S+O 或 R FL=+S-O+Z 或 R

FL=-S+-O+Z

R FL=+S+O-Z 或 R FL=-S-O-Z

JG、JNLE

JNG、JLE

JGE、JNL R FL=+S-O 或 R FL=-S+O

JL、JNGE

JS、JNS

JO、JNO

JP、JPE、JNP、JPO

R FL=+S+O 或 R FL=-S-O

R FL=S

R FL=O

R FL=P

还有一种方法是用鼠标点击寄存器窗口的EIP,然后直接输入目标代码的IP地址就可以了,不过使用这个

方法时要小心,否则使程序跑飞就完蛋了!