用到的工具:dnsPy
,一款优秀的反编译工具
https://github.com/dnSpy/dnSpy/releases
打开Assembly-CSharp.dll
,它在Mine Sweeping\Mine Sweeping_Data\Managed
中
- unity在打包后,会将所有我们写的代码编译成Assembly-CSharp.dll这么一个动态链接库
审计下代码,关键点在这:
简单说明下:
-
Grids
中文意思是网格的意思,这个类存储的是游戏中逻辑判断的各种方法:存放棋盘的变量在这:
-
Elements
这个类实例化后的对象就是每个小格格,这么一个元素 -
Awake()
方法会在类实例化时调用,包含了对元素属性的一系列操作
找到存储相应数据的地方(点击要找的变量即可):
这些数据没看出什么特殊的地方,把这些数据复制下来放到一个txt里,记得把 // Token: 0x04000009 RID: 9 public static int[,] MayWorldBeAtPeace = new int[,]
这些去掉,可以减少一点处理逻辑。我们还原一下算法,把棋盘自己给画出来:
import re
import matplotlib.pyplot as plt
infile = open('in.txt','r')
data = re.findall('\d+',infile.read())
A = data[0:29*29]
B = data[29*29:]
xlist = []
ylist = []
for i in range(29*29):
if (((int(A[i]) ^ int(B[i]))-233)//2333):
xlist.append(i//29)
ylist.append(i%29)
plt.scatter(xlist, ylist)
plt.show()
infile.close()
扫一下:
有个链接,访问一下得到flag:
de1ctf{G3t_F1@g_AFt3R_Sw3ep1ng_M1n3s}