0%

2020 GXZYCTF easyparse

题目在比赛的时候没做出来,赛后复盘发现硬件断点下错了,梳理逻辑后发现很简单。
第一层考点:下准断点
这是一个rust编译的程序,因此可读性较差,先找到输出对输出函数下断点
_$LT$std..io..stdio..Stdin$u20$as$u20$std..io..Read$GT$::read::h174af29f99bd8aef
每次执行这个函数都是从缓冲区读入一个字节,当所有字节都读完之后再一个一个字节验证,很容易联想到pintools爆破求解
但稍微耐心点调试发现加密过程很简单
密文是程序执行过程中生成的也需要dump
解密脚本如下

1
2
3
4
5
6
7
8
9
10
result = [144, 332, 28, 240, 132, 60, 24, 64, 64, 240, 208, 88, 44, 8, 52, 240, 276, 240, 128, 44, 40, 52, 8, 240, 144, 68, 48, 80, 92, 44, 264, 240]
flag=''
for i in result:
for c in range(256):
if((c^0x63)<<(2&0x3f)==i):
flag+=chr(c)
break


print flag