od分析:windows自带的扫雷游戏

主要内容:使用OllyDBG分析windows自带的32位扫雷游戏;

介绍:学习windows逆向分析的简单例子之一;

1,下画图的API断点(比如BeginPaint等等之类的api)

od分析:windows自带的扫雷游戏_第1张图片

2,点击F9,看是否断在api上,然后返回调用此api的函数:

od分析:windows自带的扫雷游戏_第2张图片

3,确定调用BeginPaint周边有没有可以函数,并且测试功能:

od分析:windows自带的扫雷游戏_第3张图片

4,测试可疑函数01002AC3

od分析:windows自带的扫雷游戏_第4张图片od分析:windows自带的扫雷游戏_第5张图片

5,进入01002AC3,测试里面所有call

od分析:windows自带的扫雷游戏_第6张图片

od分析:windows自带的扫雷游戏_第7张图片od分析:windows自带的扫雷游戏_第8张图片od分析:windows自带的扫雷游戏_第9张图片od分析:windows自带的扫雷游戏_第10张图片od分析:windows自带的扫雷游戏_第11张图片od分析:windows自带的扫雷游戏_第12张图片

010026a7是画方块的地方;

6,分析函数010026a7

od分析:windows自带的扫雷游戏_第13张图片

分析代码

//local.1 是实际的x坐标  local.2实际的Y坐标   
//esi是相互的x坐标,eax是相互的y坐标
eax = 0 
eax = eax+1
ds:[0x1005338] == 9
local.2 = 0x37 ==55
local.3 =eax//eax是y坐标
ebx== 0x1005360//循环的起始地址,方块数据存储的起始地址
while(eax<= 9)
{
  esi = 0 
  esi = esi+1
  local.1 = 12
  while(esi <= 9)//ds:[0x1005334] == 9   
  {
    eax = 0 
    eax = ds:[ebx+esi]  //0x1005360 + esi; 只能得到2种值   0f  8f  取不到10,esi+1的
    // 0f && 0x1f      0000 1111&&0001 1111 =f     0f && 0x8f   0000 1111&&1000 1111 =f
    eax = eax && 0x1f//   结果只有1种:  f
    //ds:[eax*4+0x1005A20]   [f*4+0x1005A20]= [1005A5C] == 0x3A010E9D;
    //这个0x3A010E9D画出的是方块的样子,游戏开始的时候全都一样
    call  BitBltlocal.1 =local.1 + 16  //local.1 增加16(x增加一个方块大小)
    esi =esi+1//x坐标++
  }
  local.3  = local.3+1
  eax =local.3 //y坐标++
  local.2 = local.2+16 //local.2 增加16(y增加一个方块大小)
  ebx = ebx+32 //每次循环后,下一次的循环起始+32字节  
}


7,分析:扫雷9*9,起始地址:0x1005360

od分析:windows自带的扫雷游戏_第14张图片

更改三个框里的8F为0f,第三个框全8f

od分析:windows自带的扫雷游戏_第15张图片

运行游戏,游戏前2行没有出现雷,第三行全是雷;

od分析:windows自带的扫雷游戏_第16张图片

 

总结:

 

方块数据存储的起始地址:0x1005360

游戏开始时:两个0x01之间表示是数据区域,区域里面0x8f 表示是雷 ,0x0f 表示不是雷; 

游戏结束后:0x40是空白 0x42是对应的数字(表示2) ,0xcc表示触发的雷,0x8f 表示表示未触发的雷

你可能感兴趣的:(windows逆向分析)