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地址就可以了,不过使用这个
方法时要小心,否则使程序跑飞就完蛋了!


发布评论