ctf.show---->r3

做题笔记。

下载 查壳。

64ida打开。

先运行一下:

? 不是说4位数值么。。。

得,看ida。

 __isoc99_sscanf(dest, "%x", &v5);

懂了 dest指向的是v5 ,那么dest怎么来的:

往上走:

通过strncpy得到

但是问题是v19怎么来的,代码中,没有涉及到v19如何而来?

伪代码满足不了,查看汇编呗:

所以实际,v19就是input的值。这里也说明了,为什么我们输入<6的数值会出现:

分析完成,那么,我们if判断下断点看看:

 注:(别忘了。。。 - -)

当输入123456时。

如下:

继续测试:

当输入123456667时。

在v19的接收中,【只会接收第六位的数】且【去除最后一位】----为了演示原理。

而在关键算法中,v17【1~5】都是定值(已写在内存,仅只有v5更变,而v5输入也没有做任何变形。)


 

思考:

那么,是不是仅需要当 v5等于0时 就能求解出 算法中v17【1~5】的值

进而通过  最终结果0xFFFF 减去  v17【1~5】  =  v5?(上面其实已经写过v5=0时。。)

计算: 0xFFFF - v17【1~5】的值>>> v5 

测验:

咳,这里 其实更建议用flag{1a9f},因为你要提交。

我这么写,只是证明传入原理。。。

flag{1a9f}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值