题目来源:
CTF
题目描述:
菜鸡最近迷上了玩游戏,但它总是赢不了,你可以帮他获胜吗
题目附件:
e3dd9674429f4ce1a25c08ea799fc027
题目思路:
main函数反编译,分析代码逻辑,构造脚本
解题过程:
打开发现是一个游戏,直接输入12345678就能直接拿到flag
用IDA静态分析:在函数中搜索main,进入main函数,按F5进行反汇编
int __cdecl main(int argc, const char **argv, const char **envp)
{
int result; // eax
main_0();
return result;
}
跳转到main_0函数,分析代码,当所有灯点亮时,进入sub_13F7AB4(),跳转到该函数
int sub_13F7AB4(void)
{
return sub_13FE940();
}
这是关键的输出flag的函数。
分析代码,发现是创建了两个长度为57的字符串,并进行运算。
把sub_13F7AB4()函数翻译成python脚本就是
a=[18,64,98,5,2,4,6,3,6,48,49,65,32,12,48,65,31,78,62,32,49,32,
1,57,96,3,21,9,4,62,3,5,4,1,2,3,44,65,78,32,16,97,54,16,44,
52,32,64,89,45,32,65,15,34,18,16,0]
b=[123,32,18,98,119,108,65,41,124,80,125,38,124,111,74,49,
83,108,94,108,84,6,96,83,44,121,104,110,32,95,117,101,99,
123,127,119,96,48,107,71,92,29,81,107,90,85,64,12,43,76,86,
13,114,1,117,126,0]
i=0
c=''
while (i<56):
a[i]^=b[i]
a[i]^=19
c=c+chr(a[i])
i=i+1
print (c)
zsctf{T9is_tOpic_1s_v5ry_int7resting_b6t_others_are_n0t}