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}