版权声明:墨痕诉清风 https://blog.csdn.net/u012206617/article/details/88083090
查找字符串:unregistered
找到关键位置处后,发现je跳转改为nop并没什么作用
关键在于al值为0,所有未注册
al值为 esp+4中的值获得
esp+4又是两处地址调用得到,如上图
右键call两处地址分别下断点
调试在第一个端点处调试,则另一个可以取消了
eax为函数返回值,后结果被push进我们的断点函数
那么上一个call下断点
我们输入的是5个字母,cmp eax,4 如果小于4直接retn,报错数据太短
接下来就是push 3个参数进入函数,这个函数应该就是加密计算的函数
在整个函数内运行调试,查看开始到结束retn的所有过程
记录中间是否还有retn是因为标志位未实现而导致未进入的
一般我们写程序也会返回两个值,要么正确要么错误,所有未注册自然会进入错误,而正确进入正确的retn
第一个retn,因为返回值为eax,那么我们把al改为1(mov al,1)直接retn,测试成功破解。
第二个retn前有3个函数,就是做加密算法的,我们自己做加密算法是通过计算机某为一只进行各种计算得出结果。
判断3个函数就是做此功能。