安全测试之探索windows游戏扫雷

2023-10-23 来源:本站原创 浏览次数:

北京皮炎医院哪最好 http://news.39.net/bjzkhbzy/210816/9322889.html

作者:京东工业宛煜昕

扫雷游戏相信很多人都从小玩过,在那个电脑游戏并不多的时代,扫雷成为玩的热度蛮高的一款游戏之一,然而就在有一次,接触到了一次不寻常的扫雷过程,使得后来我也有了这个冲动,也来做一次。通过动态调试,逆向和C来写一个扫雷辅助工具从而提高逆向与编码技能。

动态调试(分析)

首先进行扫雷程序的动态调试(分析):

打开OD(ollydebug工具),把扫雷拖放到OD中,F9运行;ctrl+G输入要跟随的表达式,输入rand,点击,跳转到该函数调用处,F2设置断点,此次是想通过APIrand函数来找寻突破口。在扫雷窗口的雷区中任意点击一个位置(图片中出现2的位置),再点击还原(按钮-),如下图:

此时OD会在刚设置的rand处的断点断下来,如下图:

通过找到随机函数rand,下面进行栈回溯,回到上级函数中,来找到push(压入栈)的参数,也就是说随机生成函数(rand)是随机生成的高,宽,雷数。点击K(调用堆栈),弹出K调用堆栈窗口,查看堆栈窗口信息,找到返回地址,双击K调用堆栈窗口中的返回地址,返回到上一层,此过程称为栈回溯。仔细观察下图的堆栈信息D2(返回地址)。

单步F8,观察寄存器,数据窗口和堆栈窗口变化,dwordptrss:[esp+0x4]或dwordptrds:[XXX]数据窗口跟踪数值(DFC44值是09),如下图:

返回到上层函数后,分析这里面的指令,得知刚才随机rand生成的宽(09),如下图,注意观察地址C7。

首先从这个函数返回的结果着手分析eax,单步后,可以看到往堆栈中(地址D2)压入了一个数字09,如下图:

通过以上分析,基本可以猜测得到周边的随机函数rand生成是高,雷数。可以试着改变扫雷设置(自定义雷区),如下图,来准确定位rand函数及传参,点击,再点击按钮。

观察OD,如下图:

发现push0C(DFC84值为0C),可以确定这个rand函数push0C就是雷区的高度。同时在内存区域也能明确看到一个大致的雷区图形,通过以上方法,大致可以猜测0x80就是雷。或者与IDA共同分析,通过静态分析,可以更直观的看到程序逻辑。得到如下数据:基地址,雷数等信息,如下图:

以上代码大概意思是先设置了全局宽0x09,高0x0C,雷数0x0A的变量,通过判断两层循环,随机生成了宽和高。得地图基

转载请注明:
http://www.wqopd.com/ynyjs/12310.html
  • 上一篇文章:

  • 下一篇文章: 没有了
  • 网站首页 版权信息 发布优势 合作伙伴 隐私保护 服务条款 网站地图 网站简介
    医院地址: 健康热线:
    温馨提示:本站信息不能作为诊断和医疗依据
    版权所有 2014-2024
    今天是: