EIP寄存器的作用:
CPU下一次要执行的代码指令的地址
1、 JMP指令:
MOV EIP,寄存器/立即数/内存 简写为 JMP 寄存器/立即数/内存
jmp的原理就是:把eip的值修改成你想设置的值
2、 CALL指令:
PUSH 下一行地址
MOV EIP,立即数/寄存器/内存 简写为:CALL 立即数/寄存器/内存
与JMP唯一的区别:
在堆栈中存储Call指令下一行地址 ,就是多了一个push 下一行地址
原理:
1、把cll指令的下一行地址放入栈顶。
2、esp的值-4
3、eip的值改成你想跳的指令地址
3、 RET指令:
ADD ESP,4
MOV EIP,[ESP-4]简写为:RET
原理:
1、esp+4
2、eip的值改成[esp-4]。
逻辑上:
ret = pop eip
————————————练习01.exe——————————-
如图,有个demo程序,密码必须是123456才会提示成功,其他的提示都是提示失败。
demo下载地址:
链接: https://pan.baidu.com/s/1DbIAbTt77Tn0JUuSGvZ5lA 密码: gwkj
打开od,载入程序反汇编
判断的结果的汇编地址:004096DB
成功登录CALL起始地址:004096E1 (有传参)
成功登录的CALL地址 :00409709
登录失败call执行的起始地址:00409749 (有传参)
登录失败的CALL地址:00409771
———————————————————–
简单破解方式:
1、nop 004096DB判断结果那一行
2、把00409749 行的代码改成 jmp 004096E1 (直接修改eip,把程序执行到成功的代码里面)
破解成功后,任何密码都可以登录成功。
后续的文章中将会教大家怎么查找call,怎么找参
评论前必须登录!
注册