扫雷分析与一键秒杀实现.docx
《扫雷分析与一键秒杀实现.docx》由会员分享,可在线阅读,更多相关《扫雷分析与一键秒杀实现.docx(13页珍藏版)》请在冰豆网上搜索。
扫雷分析与一键秒杀实现
扫雷逆向-雷区显示的各种情况
2012年12月28日星期五
23:
52
扫雷分析手记
首先运行扫雷,如图1
图1
发现UI上面有显示数字667,那么就可以考虑借助CE工具了.打开CE工具,附加扫雷进程,并扫描十进制数值667,如图2
图2
出现3个地址,而且都是绿色的,表示是基址,然后单击鼠标右键,让旗帜数量减少一个,变成了666,如图3
图3
然后在CE用再次搜索十进制数值666,这个时候只剩下一个地址了,如图4
图5
这唯一的地址就是旗帜的内存地址了.
然后打开扫雷菜单栏中自定义窗口,如图6
图6
这个编辑框可以编辑雷区的数组高度和宽度以及地雷的数目,使用同上面定位旗帜内存地址的方法可定位高度,宽度,雷数的内存地址为0x01005338,0x01005334,0x01005330
信息归纳如下:
雷区数组x,y下标从1开始
数组高度基址:
0x01005338
数组宽度基址:
0x01005334
地雷个数基址:
0x01005330
旗帜个数基址:
0x01005194
数组最大范围由0x1005340-->0x100565E
接下来打开OD,定位当地雷个数的内存地址,如图7
图7
试想一下,如果要插上旗帜,必然要访问数组对吧,并且旗帜数会减少,这点毫无疑问,对旗帜个数所在内存0x01005194,下内存写入断点
即可,然后运行起扫雷,然后插上一颗旗帜,这个时候就断下来了,如图8
图8
这里减少了旗帜的数目.会发现这里是跟旗帜相关,雷区数组内存地址还无法定位,所以马上改换策略,对地雷个数所在内存地址
下内存写入断点,然后通过自定义窗口修改一下地雷的数目,这个时候就会断下来,下面就对网格数组的访问,数组访问公式也产生了,如图9
图9
接下来就是根据数组计算公式Address=1005340h+高度*32+宽度来确定网格中的各种状态,我们选择左上角的点来
计算,方便一下,Address=1005340h+1*32+1=1005361h,如图10
图10
在这里插上一个旗帜,必然会将这个标志修改为旗帜的标志,所以对这个字节下一个内存写入断点,运行起来扫雷,并插上一根旗帜,马上就断下来了,如图11
图11
这样就能知道8E是插上旗帜的状态了,测试一下可知这个函数是插旗帜函数,然后继续按上面方法测试各种状态,归纳各种状态
如下:
白方块(上面什么都没有):
0F
显示出来时地雷上面一个叉叉:
0B
旗帜:
没有插在地雷上(但是未显示):
0E插在地雷上:
8E
地雷:
有雷状态(未显示出来):
8F踩到地雷爆炸:
CC地雷显示出来但是未踩上:
8A
显示出来的空格子:
40
显示出来的1:
41
显示出来的2:
42
图文对照如图12
图12
图13
网格内存地址计算公式图文说明如图14:
图14
图15
图16
成功的状态如图17:
图17
最后注入扫雷,将扫雷调成最高难度,单击鼠标右键秒杀效果如图18:
图18