题目下载:ctf2.b93676be23733b2fcda3988c1133c1c1
解题思路:
是个 Linux 下的 ELF 文件,拖到 IDA 中分析,定位 main 函数,F5 看代码。
逻辑很简单,先输入 flag,然后重点在 if 语句的判断,也就是 sub_8048630 函数是对 flag 进行检查,双击进去。
s 就是输入的 flag,v1 显然是 flag 的长度,首先 v1 要等于 29,可以确定 flag 长度是29,为了清晰点,先修改一下变量名。
可以确定 flag 要满足的逻辑:flag[i] == A[ B[i] / 3 - 2 ]。其中,A、B数组在下图
用 python 脚本跑出 flag。此处要注意,A 数组的第一个字节 0x6C 和 B 数组的 0x48 要包含进来。
#coding:utf8
A = 'lk2j9Gh}AgfY4ds-a6QW1#k5ER_T[cvLbV7nOm3ZeX{CMt8SZo]U'
B = [0x48, 0x5d, 0x8d, 0x24, 0x84, 0x27, 0x99, 0x9F, 0x54, 0x18, 0x1E, 0x69, 0x7E, 0x33, 0x15, 0x72, 0x8D, 0x33, 0x24, 0x63, 0x21, 0x54, 0x0C, 0x78, 0x78, 0x78, 0x78, 0x78, 0x1B]
flag = ''
for i in range(len(B)):
flag += A[B[i]/3 - 2]
print flag
# kctf{YoU_hAVe-GOt-fLg_233333}