首先,我们在cmd中打开运用,如下图
然后我们可以看到然后我们可以看到输出了一个wrong,ok,那么下一步就变成了找到wrong字符串和user这些字符串的位置 ,那么我们打开ida,打开程序,看到下面的界面
点击Strings或者你直接shift f12也不是问题,然后得到下面的界面
那么现在,我们点击wrong username,我们来到了下面这个界面
然后点击黄色部分,跳转到函数界面(右键有个new window,点击那个)
如下图
ok,那我们第一步先解决wrong username的问题往上回溯,可以看到避开wrong username的路径是黄色区域
那么我们基本就可以断定上面的比较函数应该就是对比user是否正确的了
通过对比,我基本判断出了左边的函数应该是输出的函数,右边的函数应该是输入的函数 ,那么到目前为止,我们就确定了Str中存的有可能是我们的username,Str1中存储的可能是我们的password
那么这个时候,我们再看这一段,基本就可以确认,Str2中存储的应该是用户名,现在我们输入试一下
现在,我们的猜测是对的那么继续往下,我们找到了wrong的位置以及它所属的函数,如下
ok,那么我们现在的分析目标就变成了下面这个块了ok那么让我们回忆一下,我们前面提到过Str1中存储的是我们输入进去的password,,而很巧合的是这里也出现了一比较函数,那么我们可以大胆猜测下,byte_14001E270应该就是我们要找的password,既然如此,我们给它重名下
然后我们点击Str1上方的password,我们会惊奇的发现,这里啥都没有.,这合理吗?这不合理.......
难道答案是0D0h?我试过,不对,所以我们还要再往上找,我们会发现,password在和Str1比较前,它的下面还有个函数我眉头一皱,觉得事情没有那么简单.
那么我们现在重头梳理一遍,loc_1400120D0这个函数,我们通过一些思考,可以反应过来,这里Str实际上就是个定值,那么我们跳进去看看,嗯.........发现了很长一段........
不过我们不用理会,这里我们就要提一下了,前面lea修饰符把password的地址给了rcx,而这里又用到了rcx,所以基本可以确定,这里可能就是把password现场写入的函数这就解释了为什么我们当时看password的时候,里面啥都没有
既然如此,我们就不用和它客气了,直接动态调试(ps:其实我本来看到password全空我就直接动调了,纯粹是因为不理解,只是在这里我想思考的全面点,所以补充了合适的逻辑链)
好了,现在会重新上面的操作不过这次我们需要回到下面这个界面来设置断点,点击
左边的蓝色小圈圈,得到下面这个界面,然后动调
此时,我们得到下图
可以直接可以直接盲猜它们应该用的ascii码,所以得到password:c2lwYw==,然后我们输入验证一下
成功,
就此结束 (ps:如果一直打不开下断点的那个界面而一直显示函数界面,把函数界面全部关了试试)