那么为什么是停留在这里呢,我们在这个地址后面可以看见一个Yep,this key is right!,再往下面看可以看见,
可以看见Nope,this serial is wrong!。那么可以推断这两个就是输入数据之后弹出的提醒。那么要想二选一,在它们的前面必然会有一个判断语句。向上面看,可以发现两个push指令,可以猜测这就是我们输入的数据。这也是在00403324下断点的原因。接下来执行这两条push指令,执行之前先记录一下右上角寄存器窗口的数据
然后依次执行两条push指令
执行之后,从栈窗口可以看见两个熟悉的值
执行完后,选中push edx右击选择follow in dump->Implicit stack address。可以看到下方的数据窗口有变化,但是为乱码。
在数据窗口右击选择Long->Address with ASCII dump转换数据窗口的查看形式
然后在数据窗口跳转到EDX的地址处,可以看到两个值,一个是我们前面输入,那另一个就是正确的序列值
输入D6C9DAC9验证,成功
但是当name的值发送改变后,验证就无法通过。说明serial是以name的值为基础进行变化的
三、分析生成serial的算法
既然输入正确的serial值会弹出Yep,this key is right!字符串提示,那么在字符串出现之前会有一个条件判断语句来决定如何进一下操作。那么可以在Yep,this key is right!字符串的上方代码区域里寻找条件转移的语句。