运行看看正常情况是怎么样的

进来显示后接受输入。

IDA 反编译看情况

这里我们发现 输入后 直接有个 if 判断,所以我认为这个 if 语句里面的函数调用才是最关键的。

sub_3B1240

计算输入是否在我们的数组里面

现将数组放置到 table 里面

然后函数 sub_3B1000 这个函数里面是对一个数组0的位置填入我们的输入。

得到 对应的数独 原本的格式

利用网上的在线工具得到解密的答案

result = [[5, 4, 6, 7, 1, 9, 2, 3, 8],
 [9, 2, 1, 8, 3, 4, 6, 5, 7],
 [8, 3, 7, 6, 2, 5, 4, 1, 9],
 [7, 1, 8, 4, 6, 3, 9, 2, 5],
 [4, 5, 3, 2, 9, 1, 7, 8, 6],
 [6, 9, 2, 5, 8, 7, 1, 4, 3],
 [2, 8, 4, 9, 5, 6, 3, 7, 1],
 [3, 6, 5, 1, 7, 2, 8, 9, 4],
 [1, 7, 9, 3, 4, 8, 5, 6, 2]]

这样我们可以得到我们所需要输入的值,然后我们会发现,我们的输入是每9个一组 在 table 中找到对应的偏移的。

从而就可以进行 对应的计算了。