文章目录

  • 分析
    • Part01:初始化
    • Part02:调用 `transform` 对 `vector` 进行操作
    • Part03:调用 `accumulate` 对数组元素进行处理
    • Part04:剩余的一点
  • 总结
    • **对于 STL 库函数的分析**
    • **lambda 表达式的逆向**
  • 一道经典的 C++ 的逆向,做完之后总结一下

分析

  • 64位elf,无壳,直接拖入 IDA 中进行分析
  • 主要的逻辑全部在 main 函数中实现

Part01:初始化

  • 首先对 vector 等变量进行初始化,然后进入两个 for 循环,先是从命令行读入 16 个数,然后调用 fib 函数初始化另一个 vector
  • fib 函数就是计算斐波那契数列

Part02:调用 transformvector 进行操作

  • 先来整理一下 C++ STL 里面 transform 函数的用法,它定义在 <algorithm> 头文件中。我强烈建议对于库函数直接翻到源文件看解释,没有比这个更言简意赅的了
  • 下图中展示了接收 4 个参数的 transform 函数的含义,其是将 [first,last) 间的元素按照 op 进行变换后,出入到 result 迭代器中
  • 在源程序中,对变量重命名一波之后就会非常清晰,可以看到是将输入的第二个数字和最后一个数字之间的内容经过 lambda 表达式的变换输入到 midVec
  • 关键就在于这个 lambda 表达式,它其实很简单,就是将传入的两个参数相加再返回
  • 看一下上层的函数,发现传入的第一个参数始终是 transform 的第四个参数,传入的第二个参数是迭代过程中迭代到的值
  • 总结一下这部分的代码做的事:将输入的数据中第2~16个数加上第一个数,结果保存在 midVec

Part03:调用 accumulate 对数组元素进行处理

  • 还是先看一下 accumulate 函数的注释
  • 这个函数用于将一个 [first,end) 之间的数累加起来,初始值和累加的方法由参数3和参数4指定
  • 回到源程序,这里稍微有点绕,主要是没用的变量太多了。下面是 accumulate 的主要部分,可以看到主要还是对数组进行遍历
  • 我们先不管其他的,先来看 lambda 表达式。还是挺绕的,但是好在代码比较少,整理一下,可以看出这实际上是将 value 插入到了 mid1 之中,然后再将 mid2 中的值拷贝到 mid1 的后边。
  • 看懂了 lambda 部分,上层的就比较好懂了,最终起到的作用就是将 [begin,end) 之间的元素逆序的送入参数1对应的迭代器中

Part04:剩余的一点

  • 先总结一下上面两部干的事:首先将输入数的2~16个分别加上第一个数,然后调用 accumulate 配合 lambda 表达式进行翻转
  • 剩下的就很简单了,就是将处理过的 iptVecfibVec 进行比较,若正确就输出 flag,很容易就能算出这 16 个数来。
    int decrypt() {vector<int> fibVec;int cnt;// generate fibfor (cnt = 0; cnt < 16; cnt++) {fibVec.push_back(fib(cnt));}reverse(fibVec.begin(), fibVec.end());for (cnt = 1; cnt < 16; cnt++) {fibVec[cnt] -= fibVec[0];}for (cnt = 0; cnt < 16; cnt++) {cout << fibVec[cnt] << endl;}
    }
    
  • 得到 flag

总结

  • 我感觉这题出的真挺好的,很基础,完全没有故意把你往坑里带或者必须得靠脑洞才能过的点,全部都是 C++ 逆向的常规操作,分析通了就是秒
  • 我感觉这里面涉及到 C++ 逆向的重点主要有这么几个

对于 STL 库函数的分析

  • 很多函数名一看上去就懵逼,尤其是 C++ 的函数名经常有一个屏幕的宽度那么长,但其实很多函数都可能是库函数,去逆向之前不妨先在 Google 搜索一下,找找思路再开始闷头看。

lambda 表达式的逆向

  • 它最误导人的地方就是 [对象参数] 这一部分,因为它打破了函数的封闭性,使得编译器会在生成代码的时候将上层的一些变量传到下层的栈空间中,让参数传递显得很混乱。
  • 逆向过程中对于 lambda 表达式的分析,我觉得应该自顶向上地看,弄清楚 lambda 表达式中哪那部分是函数调用的参数,哪部分是对象参数,可以帮助我们分析上层的函数被调用时传入的参数。

推一手我的博客:buptlxr.top,求关注

西湖论剑 easyCpp writeup相关推荐

  1. 西湖论剑CTF2019

    Crypto 哈夫曼之谜 哈夫曼.png 下载下来就一个文件,里面全是0101和一些字符. 搜索哈夫曼,了解到哈夫曼压缩时用到的哈夫曼树. 猜测下面的字符代表频率. 哈夫曼树建立过程如下 哈夫曼树建立 ...

  2. 西湖论剑预选赛Misc第二题Write-UP

    近期铺天盖地宣传的"西湖论剑"网络安全技能赛预选已经结束了.在这里随便糊一篇文章(也是我第一次写Write-Up文章),就聊聊杂项最先放出的那个第二题的解法. 首先拿到题,解压,发 ...

  3. 2023西湖论剑wirteup

    2023西湖论剑wirteup 文章目录 2023西湖论剑wirteup 机你太美 take_the_zip_easy mp3 Isolated Machine Memory Analysis 前言: ...

  4. 2019西湖论剑·网络安全大会开幕 安全赋能数字新时代...

    2019年4月20日-21日,以"安全:赋能数字新时代"为主题的2019西湖论剑•网络安全大会(以下简称"西湖论剑")在杭州国际博览中心举行.西湖论剑自2012 ...

  5. 2019西湖论剑·网络安全大会开幕 安全赋能数字新时代

    2019年4月20日-21日,以"安全:赋能数字新时代"为主题的2019西湖论剑•网络安全大会(以下简称"西湖论剑")在杭州国际博览中心举行.西湖论剑自2012 ...

  6. 远禾科技出席阿里ASRC生态大会 并参与安恒西湖论剑...

    近日,由阿里安全响应中心举办的2019 ASRC生态大会与安恒承办的2019西湖论剑·网络安全大会在互联网之都杭州成功召开,作为网络安全行业的两大盛会,得到了协会领导.业界权威.行业大咖.领导品牌.企 ...

  7. 远禾科技出席阿里ASRC生态大会 并参与安恒西湖论剑

    近日,由阿里安全响应中心举办的2019 ASRC生态大会与安恒承办的2019西湖论剑·网络安全大会在互联网之都杭州成功召开,作为网络安全行业的两大盛会,得到了协会领导.业界权威.行业大咖.领导品牌.企 ...

  8. 2023西湖论剑——misc——MP3

    西湖论剑--misc--MP3 附件下载 链接:https://pan.baidu.com/s/1A-QFz3qC4Q2mSdZKBYqZNw 提取码:lulu MP3详解 这个应该是2023年这一届 ...

  9. WP-2021西湖论剑

    2021西湖论剑-wp 前言 全靠大佬打,我是划水的. 灏妹的web 页面开发中 Dirsearch扫一下,idea泄露 ezupload 查看页面源代码,发现提示 ?source=1 发现使用_FI ...

  10. 2022西湖论剑-初赛CTF部分wp-Zodiac

    2022西湖论剑-初赛CTF部分wp-Zodiac 文章目录 2022西湖论剑-初赛CTF部分wp-Zodiac WEB real_ez_node 扭转乾坤 Node Magical Login PW ...

最新文章

  1. java mysql 查询结果_JAVA中显示MYSQL查询结果
  2. feign_与Feign客户轻松进行REST通信
  3. 天翼云从业认证(2.1)云计算的定义、特点、背景和发展历程
  4. 已知序列求蝶形运算_(数字信号处理选择题.doc
  5. idea 调试技巧1
  6. VM虚拟机下配置centos linux系统
  7. 20165208 课下作业
  8. 洛谷 3373 【模板】线段树 2
  9. jaegeropentracing的Java-client
  10. TIG:一款威胁情报收集小工具
  11. 工大瑞普虚拟思科实验室full(U7.3)环境配置方法
  12. php短信接口开发(http协议)
  13. 15b万用表怎么测电容_FLUKE-15B+型数字万用表操作规程
  14. PLC温室大棚自动控制系统
  15. matlab 马赫带效应,matlab图像处理基础实例
  16. 牛客网练习赛24B 凤凰
  17. 大学生职业规划8000字_大一职业规划书8000字
  18. 【20保研】北京航空航天大学计算机学院2019年全国优秀大学生夏令营活动通知...
  19. Python中函数的常见操作(创建、调用、递归函数等等)【非常详细】
  20. DDR,DDR2,DDR3,DDR4,LPDDR的区别

热门文章

  1. 淘宝大数据产品解析之淘宝数据魔方技术架构(1)
  2. 如何删除 Windows 10 上的 Windows.old 文件夹?
  3. 世纪光棍节、神棍节快乐!
  4. ios 操作通讯录联系人
  5. eCognition软件中ESP2插件的下载与安装
  6. 超链接 与众不同的鼠标滑过超链接下划线动画效果
  7. IDL读写FITS文件
  8. 台风怎么看内存颗粒_入手三星Bdie颗粒内存条,只超到了3866MHz,看样子得换主板了...
  9. 按头安利 好看又实用的冰淇淋VRay材质球素材看这里
  10. 小米路由器sn算ssh密码_【玩转路由】小米路由器安装Misstar Tools(MT)工具箱