num game Write Up 2017全国大学生信息安全竞赛信息安全技能赛

名字里Sudo比较多,很显然(?)是个数独题,这个题得学会猜。。因为没有什么输入的函数,大致看出每个函数的意思就好,没有必要去深究地太细。

首先把程序拖进IDA,然后反编译一下,拿到伪代码,变量比较乱,但是结构还算清晰:

主要流程就是Sudo->set_data->input->set_dudo->check,最后check那里拿到1就可以了,flag就是能够拿到1的输入值。

第一个Sudo构造函数实际上是申请了324个Byte的空间,用来存储数独中9*9=81个数,然后set_data实际上是对数独的初始化,在_data_start_那里,如下图所示:

注意这里是db类型的数据,是有一个byte,而我们要拿到的是int,也就是要四个byte,对db按d,转换成dd类型,即为int:

全部转换以后,可以拿到一个数独的初始化方案,然后在线找个网站解一下就好了:

然后输入这个解,就可以success,要注意的是原来已经初始化的地方需要用0来表示。


猜你喜欢

转载自blog.csdn.net/wannafly1995/article/details/80881872