首先,在左边的框框中找到main函数在哪,点击打开,得到类似于下面这个界面
然后通过看它给我们划分出来的函数,我们首先找到correct和wrong在哪里然后点击它的函数名
我们可以找到它的跳转函数的位置,那么点击它的函数名,
到这里,我们其实看到了一个循环,
那么,我们的目标就变成了找到这个里面最关键的那个数据,也就是跳转,那么怎么看那个比较关键呢?找和wrong有关的跳转,
那么我们的目标就明确了,我们不能让程序顺利执行到黄色的那个函数,那么我们向上找,我们发现的第一条跳转语句就是jz,并且可以跳过wrong有关的函数
那么现在我们可以基本判断出jz指令上面的cmp指令,应该就是flag的内容了,但注意观察,比较的两个寄存器ecx,和eax,首先看ecx,我们可以发现ecx首先是被赋了str段的一个值,然后又被加了1,那么str段是什么,我们点击一下 ,然后浏览函数全图
,我们发现,每一个被比较的对象实际上都是str数据段中的内容,所以,基本可以断定,str段中的是我们输入的内容
而第一张图片里第一个push下面是输出函数,第二个push下面是输入函数;
那么此时我们已经可以具体推断出下面ecx里面其实
装的就是flag内部的内容,不过输入的ecx每一个都被加了1,这就是我提前提到过的循环的影响,所以,每一次比较单位字符,ecx都加1,然后在和eax里面的内容进行比较
那么现在我们点击打开
最后我们得到了上面的值,然后将字符串全部-1,就是我们需要 的答案