只写一下技术难点:
1. 取得地图。这个版本是C++写的程序,因此破解比XP版的要难得多。Ollydbg看了两个半天。结论如下:
* 程序BASE ADDRESS+0x868b4处为一个4字节的全局指针。推测为全局控制类。取名为GAME_THIS(指向全局GAME对象)
* 地图对象是从全局GAME对象编译0x10处
地图的宽(width),高(height)各为4字节,分别在地图对象的+0x8,+0xc处
* 地图对象+0x44处为一个二维数组对象,其+0xc处开始有一个长度=width值的指针数组。每个指针指向一个长度=height值的字节数组(也可以是bool数组)
2. 拿到地图后就可以显示并自动翻开了。但是需要计算客户区域的座标。
对Win7 扫雷进行放大缩小后可发现,客户区域是保持纵横比放大缩小的,因此不能简单的用窗口大小来算。于是采用扫描纵横方向中心线的像素进行判断。
3. 自动翻开的处理。因Win7版和XP版不一样,是使用DirectUI做的窗口,所以用PostMessage(WM_LBUTTONDOWN,...)这样的方法是不起作用的。这里采用mouse_event来做。
源代码和编译好的程序放在:
http://download.youkuaiyun.com/detail/superarhow/5081068
运行结果: