码迷,mamicode.com
首页 > 其他好文 > 详细

【破解】扫雷去除时间限制

时间:2015-05-19 14:45:09      阅读:190      评论:0      收藏:0      [点我收藏+]

标签:扫雷   逆向   时间限制   

前一篇文章
【逆向】扫雷算法分析
主要分析了 扫雷 的部分算法(绘制雷区和生成地雷),本篇文章开始着手对扫雷进行部分破解。

首先肯定要去除的就是时间校验了。
一般设置时间都会调用到SetTimer这个函数,直接找一下啊函数,果然发现程序有这个函数的调用,直接下断点
技术分享
F9运行,当点击雷区的时候,程序断下

0100383B  |.  6A 00         push 0x0                                 ; /Timerproc = NULL
0100383D  |.  68 E8030000   push 0x3E8                               ; |Timeout = 1000. ms
01003842  |.  53            push ebx                                 ; |TimerID
01003843  |.  FF35 245B0001 push dword ptr ds:[0x1005B24]            ; |hWnd = 001F0666 (‘扫雷‘,class=‘扫雷‘)
01003849  |.  891D 64510001 mov dword ptr ds:[0x1005164],ebx         ; |
0100384F  |.  FF15 B4100001 call dword ptr ds:[<&USER32.SetTimer>]   ; \SetTimer

SetTimer函数的原型

UINT_PTR SetTimer(
HWND hWnd, // 窗口句柄
UINT_PTR nIDEvent, // 定时器ID,多个定时器时,可以通过该ID判断是哪个定时器
UINT nElapse, // 时间间隔,单位为毫秒
TIMERPROC lpTimerFunc // 回调函数
);

下断运行,发现每当鼠标点击界面的时候,就会触发这个函数,发生中断,但是当恢复运行的时候,秒数依然在增加,所以这个函数并不是记录时间的关键
技术分享

看看附近代码,发现了一处关键点

01003830 >    FF05 9C570001 inc dword ptr ds:[0x100579C]             ;  ??可疑点

对0x100579c的地方下内存写入断点,重新运行,当界面出现时,点击鼠标,程序断下,再次运行,发现程序再次断下
技术分享
再次运行,程序再次断下,发现0x100579c地方变成2,那么可以看见,这个地方就是记录程序的运行时间。
直接nop点这段代码保存,就去掉时间限制了
技术分享

其实破解的方法还有很多。对于内存变化,可以用CE(Cheat Engine )来扫描内存中出现变化 的地方

ce附加扫雷进程


0的时候扫描一次
技术分享

5的时候扫描一次
技术分享


30的时候扫描一次
技术分享

确定地址为0x100579c,和上面od找到的地址一样,同样的od载入,转到对应代码nop掉就行了。

最近实在太忙,所以很早之前欠下的文章慢慢补齐来。接下来差不多准备写一个一键扫雷的外挂了,敬请期待n(≧▽≦)n

【破解】扫雷去除时间限制

标签:扫雷   逆向   时间限制   

原文地址:http://blog.csdn.net/nightsay/article/details/45844119

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!