XCTF分站赛, 这次分别出了jump和simplefs两个题目, simplefs有其他师傅比我先出了, 就没有写wp了.
jump
通过静态分析查看, 判断函数返回值永远是0, 经过调试之后发现这里会改变程序的控制流
对输入进行交叉引用, 可以发现这些地方flag相关:
1 | sprintf(qword_4C9400, (__int64)"%c%s%c", 2LL, (const char *)flag, 3LL); |
这些地方其实进行了转化, 大致的逻辑为, 将输入(2flag3的形式)从开头依次取第一个字节放在最后.
总计0x23次
sub_40293E中判断是否结束:
1 | if ( v34 <= dword_4C613C ) |
结束了之后的sub_401F62(qword_4C9408);
对生成的0x23个字符串进行了排序, 从小到大.
从sub_401E48
函数可以猜测到sub_401F62
是在排序, 自己输入数据进行验证可以证明
sub_401E48
:
1 | do |
密文数据生成和校验在sub_402826:
1 | //依次取排序之后的0x23个字符串的最后一个字符组成密文数据 |
逆向脚本:
1 | from sympy import true |
flag:CTF{cwNG1paBu=6Vn2kxSCqm+_4LETvFRZDj}
如果您喜欢此博客或发现它对您有用,则欢迎对此发表评论。 也欢迎您共享此博客,以便更多人可以参与。 如果博客中使用的图像侵犯了您的版权,请与作者联系以将其删除。 谢谢 !