CTF EasyStrcmp

这篇博客详细介绍了如何通过分析程序的函数调用和循环结构,定位到关键的数据和指令,特别是涉及到了cmp和jz指令在判断流程中的作用。作者通过追踪str数据段的内容和输入值的关系,揭示了程序校验flag的过程,并提出了通过改变输入值来规避特定函数执行的方法。
摘要由CSDN通过智能技术生成

首先,在左边的框框中找到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,就是我们需要 的答案

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cjz-lxg

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值