首页 > 系统相关 >安全测试之探索windows游戏扫雷

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

时间:2024-04-25 16:34:00浏览次数:31  
标签:rand 游戏 windows OD 点击 扫雷 堆栈 函数

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

动态调试(分析)

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

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

),如下图:

 

 


 

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

 

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

 

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

 

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

 

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

 

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

)】按钮。

 

 


 

观察OD,如下图:

 

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

 

以上代码大概意思是先设置了全局宽0x09,高0x0C,雷数0x0A的变量,通过判断两层循环,随机生成了宽和高。得地图基地址:0x01005340。通过分析下图得知无雷是0x0F,有雷是0x8F,墙壁是0x10。

 


 

通过宽,高的地址,打印出扫雷区域和雷数,并可以更直观的区分边墙,雷。

下面开始要想如何标记雷了,通过假设WinProc(通过栈回溯到消息回调函数)中看到有关GetDC函数,大致猜测会用到Bitblt,在OD中ctrl+g输入要跟随的表达式,录入“BitBlt”,按F2设置断点,点击扫雷区域任意一个位置,OD会断在BitBlt位置。

在BitBlt中还有一个BitBlt函数,初步判断觉得是用双缓冲方式绘图,

BitBlt(hDestDC,//目的DC XDest, // 目的x坐标 YDest, // 目的y坐标 10, // 10, // 重绘区域的高和宽 hSrcDC, // 源DC 0, 0, SRCCOPY);// 指定操作方式计算雷的坐标(点击第一个扫雷的方块,查看坐标),需要注意边墙,如下图:

 


 

减去边墙的值:

-0x04=0x0C(12)-0x10(16)

0x27=0x37(55)-0x10(16)

得到坐标公式:x(XDest:12)=1*0x10(16)-0x04(4),y(YDest:55)=1*0x10(16)+0x27(39)。

代码编写

通过以上大致的分析,可进行代码的编写了,

 

 


 

成果

 


 

输入3landmine位置,获取出landmine(10墙壁,8Flandmine,0F无雷)

 


 

输入2自动扫雷,标记雷并开出地图

 


 

通过这个小项目,首先加强了对软件的一种逆向思维,如:看到这一种面板,大概猜到是用数组来实现的,其次雷的布局是随机生成的,然后通过动态调试可以了解实现方法(开发者的一种实现思路),可找到关键的基地址,几种状态(无雷,有雷,墙壁),最后编码阶段可以理解内存的操作,几个重要的API,FindWindow获取句柄,OpenProcess打开句柄,ReadProcessMemory读取内存信息,PostMessage异步消息模式,CloseHandle关闭句柄。其中有一些分析有误或不到位的地方还请拍砖。多逆向,分析代码有很多帮助,不仅可以拓宽自己编程与测试的思维及水平,还能发现,开发及利用程序中的漏洞或给程序打补丁等。希望小伙伴们在这条任重而道远的路上加油,互勉。

标签:rand,游戏,windows,OD,点击,扫雷,堆栈,函数
From: https://www.cnblogs.com/Jcloud/p/18157987

相关文章

  • 前端工程师-自动拉取iconfont的批处理文件-windows10版本-用到了powershell的解压功能
    直接上代码,有任何问题直接留言,我们一起讨论  @echooffSETdirName=替换成压缩包解压后希望叫的名字SETOldPattern=font_*_*rmdir/q/s"删除原来的iconfont文件夹,这里替换成原来的文件夹的地址"curl--output%这里的地址是你想把从iconfont上下载下来的安装包......
  • Windows服务器等保审核安全设置
    1.开启账户锁定策略进入Windows服务器,快捷键“WIN+R”打开运行窗口。输入“gpedit.msc”并点击确定,依次点击“计算机配置”>“Windows设置”>“安全设置”>“账户策略”>“账户锁定策略示例: *多次登录锁定,可以设置次数多点2、密码长度最小值建议设置为8位以上进入Windows......
  • Mysql8 设置允许远程连接 (Windows环境)
    1.Windows防火墙开放端口3306: 2.修改mysqlmy.ini配置文件(C:\ProgramData\MySQL\MySQLServer8.0)添加或修改允许所有IPbind-address=0.0.0.03.Windows打开CMD命令窗口--登录mysqlmysql-uroot-p;--添加权限grantallon*.*to'root'@'localhost';--刷新......
  • 01、Windows 排查
    Windows分析排查分析排查是指对Windows系统中的文件、进程、系统信息、日志记录等进行检测,挖掘Windows系统中是否具有异常情况1.开机启动项检查一般情况下,各种木马、病毒等恶意程序,都会在计算机开机启动过程中自启动查看开机启动项:1.利用操作系统中的启动菜单(注意有的......
  • windows系统修复笔记
    windows修复笔记 1.检查修复硬盘chkdskC:/R/f2. 修复引导Bootrec.exe/fixmbrBootrec/fixbootbootrec/RebuildBcdbcdbootc:\windows/sc:3.系统文件修复sfc/SCANNOW 参考连接:还原或修复运行WindowsServerEssentials的服务器|MicrosoftLear......
  • 使用 Docker 自建一款怀旧游戏之 - 超级马里奥
    1)超级马里奥简介《超级马里奥》(SuperMario)是任天堂公司创造的一款经典游戏系列,是世界上最知名、最成功的游戏之一。这个系列由日本设计师宫本茂于1985年创造,最初的游戏名为《超级马里奥兄弟》(SuperMarioBros.),推出后风靡全球。2)在线部署2.1)安装Docker环境#高版本......
  • Windows比较两个文件夹各级目录的差异
    最近想把某云盘的会员停掉,所以需要把文件都存到本地,但是有担心没有下载完全,所以想着用命令来比较两个文件夹的内容是否完全一样。用命令:robocopyFolder1Folder2/L/S/NJH/NJS/NP/NS/NDLWindowsPowerShell版权所有(C)MicrosoftCorporation。保留所有权利。安装最新......
  • Windows编程系列:设备I/O
    Windows设备在Windows平台下,设备被定义为能够与之进行通信的任何东西。最常见的I/O设备包括:文件、文件流、目录、物理磁盘、卷、控制台缓冲区、磁带驱动器、通信资源、mailslot和管道等。平常我们使用的文件,目录都可以称之为设备。 本文是介绍设备的通用操作,以文件操作进......
  • MoUsoCoreWorker.exe 是 Windows 操作系统中的一个进程,它属于 Microsoft Update Stack
    MoUsoCoreWorker.exe是Windows操作系统中的一个进程,它属于MicrosoftUpdateStack的一部分,用于处理Windows更新和维护任务。具体来说,MoUsoCoreWorker.exe是WindowsUpdate的核心工作程序,负责检查、下载和安装操作系统和应用程序的更新。这个进程通常位于Windows......
  • windows 11系统下打开docker 提示 docker engine stopped
    windows11系统下打开docker提示dockerenginestopped参考链接:https://zhuanlan.zhihu.com/p/663821762装好了dockerforwindows以后,点开发现界面中心一直提示dockerenginestopped,按照很多方法都不行,后面再知乎的一个专栏里面找到了解决方法总结来说就是检查几个内容(以......