码迷,mamicode.com
首页 > 其他好文 > 详细

逆向初级-硬编码(六)

时间:2021-04-20 15:28:55      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:class   其它   汇编指令   通过   还需   宽度   直接   word   标识   

6.1.前缀指令

1、硬编码的结构
技术图片
2、前缀指令是分组的

<1> LOCK和REPEAT前缀指令:
	LOCK			FO
	REPNE/REPNZ 	F2
	REP/REPZ		F3
<2> 段前缀指令:
	CS(2E)
	SS(36)
    DS(3E)
    ES(26)
    FS(64)
    GS(65)   
<3>操作数宽度前缀指令
	66
<4>地址宽度前缀指令。
	67

6.2.经典定长指令_修改ERX

技术图片
不包含Eb,Gb,说明是定长指令;

包含Eb,Gb,说明是变长指令

1、PUST/POP
技术图片
DTDebug中安Ctrl+E快捷键测试
技术图片
2、INC/DEC

0x40 - 0x47    INC ERX     加1
0X48 - 0X4F    DEC ERX	   减1

测试
技术图片
3、MOV Rb,Ib

0xb0 - 0xb7      MOV Rv,Ib     //后面跟1个字节的立即数

4、MOV ERX,Id

0xb8 - 0xbF	      MOV ERX,Id    //后面跟4个字节的立即数

技术图片
5、XCHG EAD,ERX

0x90 - 0x97 XCHG EAX,ERX

技术图片

6.3.经典定长指令_修改EIP

1、0x70 - 0x7F
技术图片
2、0x0F 0x80 - 0x0F 0x8F
技术图片
技术图片
3、其它指令
技术图片
技术图片

4、其它指令
技术图片

6.4.经典变长指令_ModRM

1、经典变长指令_ModR/M

0x88	MOV Eb,Gb		G:通用寄存器
0x89	MOV EV,GV		E:寄存器/内存
0x8A	MOV GB,Eb		b:字节
0X8B	MOV Gv,EV		v:Worder,duubleword or quadword

当指令中出现内存操作对象的时候,就需要在操作码后面附加一个字节来进行补充说明,这个字节被称为ModR/M,该字节的8个位被分成了三部分
技术图片
Mod(第6,7位)和R/M(第0,1,2位)共同描述指令中的E部分,即寄存器/内存
技术图片
2、当Mod = 00时,ModR/M字节通过寄存器直接进行内存寻址

例如当操作指令为88 01时,其对应的汇编为MOV BYTE PTR DS:[ECX], AL

88 是操作指令,其后跟随的01为ModR/M
技术图片
0x88描述了操作数宽度为b(byte),且操作数的顺序为Eb Gb,所以这条汇编指令为MOV BYTE PTR DS:[ECX], AL

同理可以分析出如下操作指令对应的汇编指令
技术图片
3、当Mod = 01时,ModR/M字节通过寄存器+I8进行内存寻址(I为立即数,即8位立即数)

例如当操作指令为88 41 12时,其对应的汇编为MOV BYTE PTR DS:[ECX+12],AL

88 是操作指令,其后跟随的41为ModR/M
技术图片
所以这条汇编指令为MOV BYTE PTR DS:[ECX+12],AL

同理可以分析出如下操作指令对应的汇编指令
技术图片
4、当Mod = 10时,ModR/M字节通过寄存器+I32进行内存寻址

例如当操作指令为88 81 12 34 56 78时,其对应的汇编为MOV BYTE PTR DS:[ECX+78563412],AL

88 是操作指令,其后跟随的81为ModR/M
技术图片
所以这条汇编指令为MOV BYTE PTR DS:[ECX+78563412],AL
同理可以分析出如下操作指令对应的汇编指令

技术图片
5、当Mod = 11时,ModR/M字节直接操作两个寄存器

例如当操作指令为88 C1时,其对应的汇编为MOV CL,AL

88 是操作指令,其后跟随的C1为ModR/M
技术图片
所以这条汇编指令为MOV CL,AL

同理可以分析出如下操作指令对应的汇编指令
技术图片

6.5.经典变长指令_Reg/Opcode

技术图片
上一节中,3-5位用来标识寄存器,Mod字段 与 R/M字段共同用来标识寄存器与内存。但3-5字段,并不仅仅用来标识寄存器,有些时候,用来标识Opcode。

参见Table A-2中
技术图片
80 81 82 83 这几个编码,并没有明确给出具体的操作码是什么。

特别说明:凡是出现Grp的,均参见TableA-6
技术图片
举例说明:80 65 08 FF

1.第一个字节为80 查Table-2表,得到对应结构:Eb,Ib

2.第二个字节为ModR/M字段,所以拆分65:

? 01 100 101

Mod 与 R/M字段 查Table2-2 得到对应的结构:[EBP+DIS8]

3.100 字段 查表TableA-6 得到对应操作码为:AND
技术图片
4.最终指令格式

AND [ebp+dis8],Ib

AND BYTE PTR SS:[EBP+08],0xFF
技术图片

6.6.经典变长指令_SIB字段

ModR/M字段是用来进行内存寻址的,可当地址形如DS:[EAX + ECX*2 + 12345678]时,仅仅靠ModR/M字段,是描述不出来的。这时就在ModR/M后面增加一个SIB字节,与ModR/M字段共同描述。

下图是上两节没有涉及到的三种情况
技术图片
这三种情况表示,在ModR/M字节后,还紧跟着一个SIB字节。SIB字节的8个位被分成了三部分:
技术图片
举例说明:88 84 48 12 34 56 78

1.第一个字节为88 查Table-2表,得到对应结构:MOV Eb,Gb
技术图片
2.第二个字节为ModR/M字段,所以拆分84:

? 01 000 010
技术图片
如果查看ModR/M结果是[--][--]+dis8,则还需要一个字节(SIB)来确定[--][--]里面的内容

3.SIB字节48分析
技术图片
Base + Index*2Scale (Scale描述2Scale,所以只能为 *1 *2 *4 *8)

48拆分:01 001 000

[EAX + EXC*2]
技术图片
4.结果

88 84 48 12 34 56 78 对应汇编 MOV BYTE PTR DS:[EAX+ECX*2+78563412],AL
技术图片

逆向初级-硬编码(六)

标签:class   其它   汇编指令   通过   还需   宽度   直接   word   标识   

原文地址:https://www.cnblogs.com/derek1184405959/p/14674362.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!