是一个C#编写的程序,在dnspy中打开,找到主函数,可以看到大致逻辑
不知道dat_secret的值,动态调试看看
在主函数中添加断点,调试,因为本题的fag形式为:
Hint:本题解出相符串后请用flag{}包裹,形如:flag{[email protected]}
找到神似flag的值,尝试一下,成功
又是一道游戏类c#语言编写的题目,在dnspy中打开,可以找到源码
对源码进行分析
这一部分是创建雷区,MineField创建雷区, AllocateMemory是内存分配,这个函数及逆行方块布局及雷区分布
这部分是对是否踩到雷区的判断,下面的if判断中有GetKey函数的调用,猜测是未踩到雷的情况,那么上面就是踩到类的情况,第二个判断若成立,则this,stopwatch.Stop(),停止进程计时,Application.DoEvents()处理应用程序消息队列中的所有待处理事件,Thread.Sleep(1000)线程暂停 1 秒 ,new SuccessPopup函数创建一个新实例,并显示为对话框函数。看到其他大佬的wp知道第一个判断踩到雷代码可以删掉,实现游戏程序踩雷也不会退出。(小小体验一把外挂的感觉)
先放一下GeyKey函数:
// Token: 0x0600000D RID: 13 RVA: 0x000025DC File Offset: 0x000007DC
private string GetKey(List 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);
这段程序是先用Random()设置随机数,将array数组设置为随机数,将array2数组值赋给array3,再和array异或,得到新的array3,这里应该就是成功后的输出
dnSpy实现程序修改容易的多,在光标停放的函数出按Ctrl+Shit+e这样就可以进入程序修改界面,
修改好的程序要进行编译(右下角红色圈标注的)
具体修改程序方法可以参考:
两种方式进行 C# 反编译修改源码 - lsgxeva - 博客园 (cnblogs.com)
现在是猎杀时刻(嘿嘿)
电路很多点到有雷的地方,最后给出的结果是乱码,再尝试一次,直接点数字,得到flag
这个题目本来是想通过动调得到array数组的值,但是动调后没有显示,尝试其他大佬的wp的方法