首先先打开程序
一个很简单的逻辑,比较用户名和序列号是否符合,
在这个过程中,
- 输入
- 校验
- 返回值
这里出现了知识点
一个个试验,ctrl+G,出现输入框, 输入GetDlgItemTextA
确定
简单的来说,程序从这里开始输入,
汇编代码
MOV指令可以在CPU内或CPU和存储器之间传送字或字节
PUSH :把值推入栈值,相当于赋值
Call :循环指令,前面是赋值(应该是用户名和序列号),猜这就是循环验证了
下面可能就是结果了,按f8一个个运行查看提示
我继续向后运行,就发现了上面这个,随便输入用户名密码,按下f2,设置断点,记录下当前位置
Ctr+f2重来
找到了用户名
那么按照上面的推论,就是
输入+验证+返回值
又向下运行了几行
出现了
那么可以确定,上面推论是对的,幸亏提前设置了断点,重来
现在在call之前,右边是1
经过了test,变成了0
双击数字可以改变,
之前的实验我们已经知道,0是失败,1是成功
双击
最后还是提示错误,可能改错了,重来
这里改下,改成0,不跳转就是成功
方法二
已经知道在004011f5出跳转不成功就会成功
在此处,双击或按空格键,输入指令nop
单机右键,复制到可执行文件->选择->保存文件,再打开就可以随便输入了