利用OD进行软件破解需要用到的基础汇编知识

一.通用寄存器及其作用简介

  通用寄存器包括了8个16/32位的寄存器,分别为AX/EAX, BX/EBX,CX/ECX, DX/EDX, SP/ESP(利用esp定律脱壳就是看这个的,如果只有这个寄存器的值是高亮的,那么就可以用),BP/EBP, DI/EDI, SI/ESI。

其中AX/EAX,BX/EBX,CX/ECX,DX/EDX这四个寄存器一般作为通用的数据寄存器,用来暂时存放计算过程中用到的操作数,结果或其他信息。

AE/EAX:作为累加器用,是算数运算的主要寄存器。还有所有的I/O指令都使用其与外部设备传送信息

BX/EBX:是基址寄存器,在内存寻址时存放基地址。

CX/ECX:常用来保存计数值,如在移位指令,循环指令中用作隐含的计数器。

SP/ESP,BP/EBP,SI/ESI,DI.EDI:通常是在寻址器寻址时,提供偏移地址,所以也叫作指针或变址寄存器

SP/ESP:称为堆栈指针寄存器,用来指出栈顶的偏移地址

BP/EBP:称为基址指针寄存器,esp始终指向栈顶,EBP是在堆栈中寻址用的 

二.数据传送指令(只写了一些常用的)

1.传送指令 MOV Reg/Mem,Reg/Mem/Imm

  意思是把后面的值赋给前面(Reg--寄存器,Mem--存储器,Imm--立即数)

2.交换指令 XCHG Reg/Mem,Reg/Mem

将两个寄存器/存储器的内容交换,要注意的是两个操作数的数据类型要一致

3.堆栈操作指令

 堆栈具有先进先出的特点,通常用来保存程序的返回地址,有进栈/出栈操作

作用:保护数据用,先将寄存器中的数据保存在堆栈中,这就是入栈。然后,可以对他们进行操作而不影响原来的数据,需要用到原数据时,再出栈。 

进栈:PUSH Reg/Mem 

出栈:Pop Reg/Mem

4.转移指令(重点)

转移指令包括条件转移指令和无条件转移指令两大类

无条件转移指令:JMP  不用多说,就是程序运行到这里的时候必定跳转,在OD中这行代码的左侧有一条红色的线,表示将要跳转,如果不想让他跳可以将其设置为nop,这就是常用的nop法破解。

有条件转移指令:JZ/JE,在OD中只表示为JE,在OD中看运行到这一行时会不会具体的跳,可以在此处设置断点,然后F9运行,左侧的线是灰色的表示不跳,红色的表示将要跳转。需要注意的是,JE跳与不跳还与OD右侧中显示的Z标志位有关,若为1则跳,为0不跳,破解测试时可以直接更改标志位,但要注意这样修改无法保存,若想要保存跳,可以直接修改代码为JMP即无条件跳转。

5.子程序的调用和返回指令

调用指令(CALL 子程序名/Reg/Mem)在OD中单步走到call指令时,可以按F7进入到子程序中

返回指令(RETN Imm)

--------------------------------------------------------------------------------------------------------------------------------

我的第一篇博客到这就写完了,自己刚学习破解没多久,对内容的理解还不是很深,如果有哪位发现了文章中的错误,还希望各位能够不吝赐教!

 

 

 

 

 

 

 

                                      

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值