首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

2017大学生信息安全竞赛——填数游戏

连着做了几个安卓题,今天来看一个Windows的,记录一下IDA静态以及动态调试辅助分析的思路与技巧

01

静态分析

下载题目是exe可执行文件,拖入IDA,查看字符串发现敏感内容,找到引用处(注意看注释信息)

很明显需要set_sudu与check函数同时返回1,程序才能执行成功,先看看set_sudu做了什么

set_sudu函数就是取参数2逐字符进行验证,接着看看验证函数set_number

接下来看看check函数做了什么

check函数需要check_block,check_col,check_row三个函数同时返回真

不难发现这三个函数的功能,就是验证传入参数是不是9x9的数独

结合以上所有信息,我们还剩下一个疑问,数独数组是可以随便填的吗?

随便填了一个数独发现失败了,那么肯定与set_number的参数1有关系了

02

动态调试

在set_number函数设置断点,获得参数一的内存数据(整型数据,每一个元素占4个字节),dump出整理一下

原来二维数组本身是有部分数据的,因此本题成了解数独的题目,大家可以自行求解,这里直接给出结果

解出来数独后怎么插入数据呢?正好想起set_number函数中传入为0则直接跳过

例如:首行原数据是_ _ 7 5 _ _ _ 6 _

则插入时格式为340058902,其他以此类推,就能得到最终flag了

▼点击下载题目

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180402G1EI6400?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券