pe逆向入门笔记一汇编指令学习及crackme初体验

pe逆向入门笔记一
汇编指令学习及crackme初体验
push略
pop指令
如 执行  pop eax
则栈顶的数会传给 eax这个寄存器
具体说明:
原来esp 地址为0019ff84,值773E62C4
eax为 00000000
运行 pop eax后(f7)
esp 地址为0019ff88,值00293000
eax为773E62C4


pushad将所有的寄存器的值都push到内存中去


popad将所有的堆栈的值都pop回寄存器中


move略


LEA取地址指令
类似于MOV指令, 但是第一个操作数是一个通用寄存器,并且第二个操作数是一个内存单元。当计算的时候要依赖于之前的结果的话,那么这个指令就非常有用。


XCHG EAX,ECX
交换两个操作数


INC和DEC  一个是使寄存器或内存值加一,另一个减一


add 和 sub 略
MUL(无符号数的乘法)
有两种乘法,第一个种是MUL,这种是无符号数乘法,只有一个操作数,另一个操作数是EAX,结果存放到EDX:EAX中
IMUL(有符号数的乘法)


逻辑指令


and 只有两个二进制位都为1的时候结果才为1,其他情况,结果都为0。
or 该指令AND的不同之处在于,两位中只要有一位为1,结果就取1。
xor该指令时异或运算,当两位不同时取1,相同时取0。
NOT 按位取反


比较跳转
我们知道,某些指令的指令会影响到标志位,最常见的就是零标志位Z。
cmp
该指令是比较两个操作数,实际上,它相当于SUB指令,但是相减的结构并不保存到第一个操作数中。只是根据相减的结果来改变零标志位的,当两个操作数相等的时候,零标志位置1。
如果操作数1大于等于操作数2,标志位s会被置0,如果操作数1小于操作数2,标志位s会被置1
test(逻辑比较)将两个数值进行与操作


跳转指令jmp
jz是当z为0时跳转
jnz是当z不为0的时候跳转


call指令和ret指令
设置下一条执行的指令,右键设置为新的eip,eip值会改变。
如果不想跟进这个函数,则用follow这个按钮就可以查看函数而不跟进
出现的ret指令就是子程序的结束
为了让子程序执行完ret指令后,知道要返回到哪里,返回地址将要存到堆栈当中
执行完call指令后,call指令的下一条指令地址会被存放到堆栈的栈顶中
f2进行下断点
返回地址在ret中存放


循环指令
loop 地址


逆向入门小例子

小例子地址:http://download.csdn.net/detail/zsd747289639/9859942

因为太简单,所以就不细细写,以下是步骤提示

1、搜索调用的api名称
找到api调用的地方,在那个函数的首部设置断点。
在进行下一步的分析
注意函数的返回地址,根据返回地址来寻找用户名校验函数(会对用户名进行是否数字等校验)
判断是否为数字,只要把c标志位置零,即可绕过,但要根本解决办法的话需要对其调用处进行nop操作。
最后函数需要无条件执行调用成功的信息,总不能改z标志位吧,所以这里我们要修改跳转指令,把je改为jmp无条件条状。(je是判断z是否为1,如果是1则跳转)
2、将修改后的文件保存到可执行文件,全选,弹出另一个窗口,然后保存
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值