2025TSCTF Singin

Base64换表+异或

这是一道签到题,但是刚开始做,ai辅助下还是做了好久呜呜。

用IDA打开直接F5,然后先别管开头定义变量的部分,应先看底下的逻辑,尤其是循环、判断之类的。
image
看到29行Buf1与Buf2比较之后输出对错,28调用了一个函数对Buf1进行处理
image
点进去发现处理流程就是异或,10行调用的函数就是Base64换表得到v7,在12行按F2下断点,注意v7是一个指针,且存在[rbp-10h],所以运行后拿到rbp地址,在hex窗口按G输入rbp地址,跳过去后上一行就是v7的地址,其指向的内存就是key也就是*v7
A0 E4 42 16 93 02 00 00注意按小端序处理,也就是000002931642E4A0,按G输入该地址即可看到v7为w/w5t/YF0wUnwoQKwJt=
下一步找到Buf2,按图中逻辑与v7异或即可得到flag,回到main中,由于比较是在memcmp,所以再汇编窗口中找到call memcmp并F2下断点,运行
image
这个函数有三个参数,按windows约定,三个参数分对应的寄存器为RCX、RDX、R8
所以G入RDX的地址得到的31个字节就是Buf2
image

去掉最后的00,剩下的就是Buf2,最后
s1=bytes.fromhex("237C34613202133D6712640D37023414037A2B692470346132706B76024228") key = b"w/w5t/YF0wUnwoQKwJt=" flag = bytes(t ^ key[i % 20] for i, t in enumerate(s1)) print(flag)

posted @ 2026-09-23 13:46  Yyytt  阅读(4)  评论(0)    收藏  举报