ACTF2023

type
status
date
slug
tags
summary
category
icon
password
😀
强度巨高在打,但是赛中算没出题hhhh5555555,复盘以及复现一下

tree

赛中最接近出的题

直接打开看行为可以发现它不解析#include头文件,会给你编译一个cpp代码
初步观察可以看到三个check,全过可以从server返回flag
查找字符串,一开始以为是模仿的gcc编译器,但是问学长说不像(这里就缺乏经验了已经,问的时候学长就说先看是啥的编译器,自己调了很久也没有去想)字符串发现是clang
源码非常复杂,而且有很多handler的结构,导致函数调用往往是跳转表,这里一定得恢复符号(后面check3不恢复符号几乎没办法分析,相反能恢复符号就好做)
check1有一个 == 25,这里其实很容易测试,这里会计算符号的优先级,直接从最高等级的* /视到低等级的比较条件运算符,等级越低数字越大,然后就测到 += 1可以让check1 + 1,其它会减一,所以最后的结构里面 += 1比其它的多一即可
然后有这个函数(这里已经恢复了符号表):
notion image
这里会捕捉一个名为AAA的class
我们要让我们的结构通过这里的check:
(这部分都是当时猜的,然后也没有去恢复符号表了)
notion image
然后多虚函数继承就过了这里的check2
下午四点就过了check2,本以为形势一片大好,结果游戏才刚刚开始,check3做到早上四点,没救
小折腾了一下,直接搞了个clang15.0.4给bindiff进去,但这里当时是看不到的,而且直观上会往这里面看
总之这里一直边调边猜(现在看看这个凌晨两点的记录有些消愁了,但是确实调了几个小时没进展,各种玩意也在反复试)
晚上的时候放出hint:需要看一下ast_matcher相关,然后我们一直在找已有的符号以及字符串
不料其实不是这样,应该自己搞一个ast_matcher的api调用,再bindiff进去,就好看了
这部分已经是赛后做的了(小问了一下出题人)
自己把clang安了,然后编译一个这个(这个会匹配for(int i=1;i<2;i++){}
然后bindiff进去,结果:
notion image
对照自己编译出来的loop_printer,就好搞多了
<++的匹配点比较明显
这里一开始一直找不到比较的数字,然后发现会写在栈上:
notion image
前面的++<比较容易识别,就是这里的数字有点难找,然后注意这里的"1"和"2"和"f"是一样的,只是一个符号,相当于
notion image
没有实际意义
匹配上check3以后,把check3=5构造一下,把check1抵消一下,得到最后的payload:
notion image
发给服务器远程也是可以通的(没截图),没问题了
这题有一个很麻烦的点,第三个check必须恢复符号表,否则根本看不出来它是匹配的符号还是自定义的符号名,前两个check中间过程比较清晰,好猜些,第三个的中间比对过程相当难看与抽象,甚至最后一个数字我还找了好一会
上一篇
常见逆向加解密整合
下一篇
mac环境配置
Loading...
文章列表
Hi~, I ‘m moyao
reverse
pwn
pentest
iot
android
others
ctf
iOS