BUUCTF reverse [GUET-CTF2019]number_game
打开IDA64进行分析,进入main函数。
进入sub_4006D6函数,这个函数是对用户输入的字符进行验证,长度小于10并且只能输入0~4的字符。
然后进入下面的两个函数,看了半天没搞懂这两个函数是干啥的,接着往下分析。
sub_400881这个函数是将经过转换完赋值给这些字节,就是将这些#都换成转换完的数据
sub_400917这个函数是个验证函数,表示没有看懂操作,经过看大佬的wp才发现原来是个数独。根据上一个给#赋值的操作,我们可以推测应该是给数独填数。我们进行动态调试。
输入0123456789后运行步过加密函数查看v7,发现他们的对应关系。
0123456789 7381940526
根据数独可知要填入的十个数是0,4,2,1,4,2,1,4,3,0
。
贴出脚本
arr=[48, 52, 50, 49, 52, 50, 49, 52, 51, 48,0] biao=[7,3,8,1,9,4,0,5,2,6] flag=[0]*10 for i in range(10): flag[biao[i]] = arr[i]; print(flag)
flag{1134240024}