easyCpp 攻防世界

工具

IDA+STL知识

思路展开

复杂语句,大量的C++ STL语句,vector容器等相关概念。

动态调试

整体梳理一遍逻辑:
16个整型输入
1
生成16个斐波那契数(这里和上面的16 个输入对应起来)在这里插入图片描述
输入经过transform和accumulate两个函数运算出结果在这里插入图片描述
运算出的结果与斐波那契前16 个比较,不相等则错误。在这里插入图片描述
斐波那契前16 个数是公开的,搞清楚transform和accumulate在干什么,逆推输入就可。
动调下断点:这几个函数和最终判断环环相扣,在这两个函数和最后的关键判断下断点,看输入就知道上一个操作在干什么。
输入
100 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
transform:在这里插入图片描述
从第二个数开始每一个数都加上第一个数。
accumulate在这里插入图片描述
逆序

脚本

fib = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987][::-1]
for i in range(1,len(fib)):
	print (fib[i]-fib[0])

求出输入再输入就出flag
flag{987-377-843-953-979-985}

静态分析

c++逆向题代码很多,如何找到关键:
push_back() 在Vector最后添加一个元素(参数为要插入的值)
Iterator(迭代器),迭代器的作用:遍历字符
(back_inserter(尾部插),inserter(插入指定位置),front_inserter(头部插))
本题中大量迭代器的使用,真正的函数只有transform和accumulate,看到这里整体就明朗了。

0x01输入静态1

push_back() 在Vector最后添加一个元素(参数为要插入的值)
输入16个整型放到v24 Vector容器。

0x02生成16个斐波那契数在这里插入图片描述

生成16个斐波那契数放到fibs Vector容器。

0x03.transform

点开可以看到一大堆iterator相关的代码,但关键是其中的lambda函数,也就是关键的一元操作。
transform
lamdalamda
简单的加法,再结合下面的
在这里插入图片描述
operator的自加,就是后面的15个数,都加上第一个数,再返回。

0x04.accumulate

accumulate点进去,关键也在lambda
accumulate
点进去lambda
copy
操作的地方只有copy函数,函数一层套着一层的变量相互赋值,这里一定要做好注释,你会发现是尾部赋值给头部,就是逆序

0x05.脚本破解
fib = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987][::-1]
for i in range(1,len(fib)):
	print (fib[i]-fib[0])

求出输入再输入就出flag
flag{987-377-843-953-979-985}

总结

c++题目代码多,但逻辑总会出的简单

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值