BUUCTF--[FlareOn5]Ultimate Minesweeper

测试文件:https://wwa.lanzous.com/ito1Rdzdtpa

 

代码分析

找到进行判断的主要函数处

上面的if条件进行的弹出结束提示,后面的就是弹出我们需要的flag信息。GetKey函数实际就是我们输出flag的函数

        private string GetKey(List<uint> revealedCells)
        {
            revealedCells.Sort();
            Random random = new Random(Convert.ToInt32(revealedCells[0] << 20 | revealedCells[1] << 10 | revealedCells[2]));
            byte[] array = new byte[32];
            byte[] array2 = new byte[]
            {
                245,
                75,
                65,
                142,
                68,
                71,
                100,
                185,
                74,
                127,
                62,
                130,
                231,
                129,
                254,
                243,
                28,
                58,
                103,
                179,
                60,
                91,
                195,
                215,
                102,
                145,
                154,
                27,
                57,
                231,
                241,
                86
            };
            random.NextBytes(array);
            uint num = 0u;
            while ((ulong)num < (ulong)((long)array2.Length))
            {
                byte[] array3 = array2;
                uint num2 = num;
                array3[(int)num2] = (array3[(int)num2] ^ array[(int)num]);
                num += 1u;
            }
            return Encoding.ASCII.GetString(array2);
        }

 

将上面的if条件删除,保存为exe文件,把正确数字的位置找出来,再使用原来的程序,对照点正确的位置,输出flag。

 

get flag!

flag{Ch3aters_Alw4ys_W1n@flare-on.com}

 

posted @ 2020-06-24 00:52  Hk_Mayfly  阅读(673)  评论(0编辑  收藏  举报