xctf-高校战疫-Re-fxck!

admin 2022年1月5日23:10:47CTF专场评论7 views949字阅读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

真·大佬。。
佩服佩服


特别标注: 本站(CN-SEC.COM)所有文章仅供技术研究,若将其信息做其他用途,由用户承担全部法律及连带责任,本站不承担任何法律及连带责任,请遵守中华人民共和国安全法.
  • 我的微信
  • 微信扫一扫
  • weinxin
  • 我的微信公众号
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年1月5日23:10:47
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                  xctf-高校战疫-Re-fxck! http://cn-sec.com/archives/720021.html

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: