首先用IDA打开,找到主程序,如图
两个判断的地方是需要重点分析的。
分析可知第一个地方是初始化所以重点分析check函数
因为题目为填数游戏,所以看到这里猜测是一个类似数独的游戏
可以看到块检查函数中,先生成一个数组用来存放每一块检查后的结果,然后根据所有块的检查结果是否都通过来确定返回值。
检测的方法是,将对应的位置的数所在数组标志为0,通过检查0到8是否都被标志来检查数独的完整性。
检查行和列的方法都是类似的,所以不再赘述,重点在初始化函数中。
函数比较简单基本上就是把数组中的元素取出来然后作为一个int型放入新的数组a1中。
可以看到初始的数组如上图所示
对应的数组为
0 0 7 5 0 0 0 6 0
0 2 0 0 1 0 0 0 7
9 0 0 0 3 0 4 0 0
2 0 1 0 0 0 0 0 0
0 3 0 1 0 0 0 0 5
0 0 0 0 0 0 7 1 0
4 0 0 0 0 8 2 0 0
0 0 5 9 0 0 0 8 0
0 8 0 0 0 1 0 0 3
在网上找对应的数独解密工具
http://www.llang.net/sudoku/calsudoku.html
结果如图
在线解出后, 要将原来有数字的位置换为0
在最后结果上加入flag即可