xctf-高校战疫-Re-fxck!

admin 2022年1月5日23:10:47评论74 views字数 949阅读3分9秒阅读模式

>

>

xctf-高校战疫-Re-fxck!

Frank

先看大致流程:flag->preprocess->check

preprocess(char *flag, int len, char *processed)

等价代码:
https://paste.ubuntu.com/p/Xsv3ZvVqgm/
or
https://paste.ubuntu.com/p/5yJgWZszbt/

通过flag生成一个新的字符串processed,送进下面的函数进行check

check(const char *processed)

由于没有看到公告,下载最新的附件,我在check的那个switch的状态机那块纠结了许久。。
更新附件后processed可以直接通过调试在strcmp那里dump出来,不用看这一部分。
但是我还是写一下用旧的二进制怎么推出processed吧

op代表这个FSM的转移方式

check函数中构造的
xctf-高校战疫-Re-fxck!
jump_table在下面的状态机中的作用是连接不相邻的两个状态,在op为221与253时会转移到jump_table指定的状态

而不难发现,jump_table的值是定值

(有点像无向图的连图

如果学过OI可以差分得到processed初始值。

op[196] processed[cur]++, rev(res[cur]--)
op[197] processed[cur]--, rev(res[cur]++)

op[168] cur++, rev(cur--)
op[169] cur--, rev(cur++)

op[221] if(!processed[cur])jump(jump_table[cur])
op[253] jump(jump_table[cur]-1)

op[1]   assert(processed[cur]==res[i++])

得到processed值为:
4VyhuTqRfYFnQ85Bcw5XcDr3ScNBjf5CzwUdWKVM7SSVqBrkvYGt7SSUJe

正解
https://paste.ubuntu.com/p/HzGNwQ232s/

爆破:
正向爆破也是可行的,只是字符集里头忘了加-所以没爆出来
https://paste.ubuntu.com/p/RDZZh54yxD/


yuchoxuuan

真·大佬。。
佩服佩服


  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年1月5日23:10:47
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   xctf-高校战疫-Re-fxck!https://cn-sec.com/archives/720021.html

发表评论

匿名网友 填写信息