是男人就撑过20秒的游戏分析+无敌Patch的实现
来源:互联网 发布:中国足球国家队 知乎 编辑:程序博客网 时间:2024/04/19 14:40
先简单说说《是男人就撑过20秒》这个游戏,就是操纵一架飞机躲避飞来的N多子弹,看你能支撑多长时间。(真的很变态)
好,言归正传。
首先,观察游戏,发现一点,那就是每当进入游戏后鼠标就会消失。当游戏结束之后,显示你支撑的时间时,鼠标又出现了。OK,这是一个很好的线索。
用OllyDBG加载游戏,在函数ShowCursor下断。运行游戏后,游戏第一次断这里
004042F0 /$ 53 push ebx
004042F1 |. 56 push esi
004042F2 |. 57 push edi
004042F3 |. 55 push ebp
004042F4 |. 83C4 D0 add esp, -30
004042F7 |. 6A 00 push 0 ; /Show = FALSE
004042F9 |. E8 24050000 call <jmp.&USER32.ShowCursor> ;
/ShowCursor
004042FE |. E8 5D030000 call 00404660
00404303 |. A1 C86D4000 mov eax, dword ptr [406DC8]
那么,这里就应该是游戏开始,鼠标消失用的那个ShowCursor,他的参数为FALSE说明分析没错。好,继续运行,开始游戏,当游戏结束时,不出所料,游戏断下来了。
00404590 /$ 53 push ebx
00404591 |. 83C4 E4 add esp, -1C
00404594 |. 8BD8 mov ebx, eax
00404596 |. 6A 01 push 1 ; /Show = TRUE
00404598 |. E8 85020000 call <jmp.&USER32.ShowCursor> ; /ShowCursor
0040459D |. 833D CC6D4000>cmp dword ptr [406DCC], 0
跟我想的一样,参数为TRUE,鼠标显示出来,这样应该离目标不远了。接着我们看看是哪来在CALL 00404590 。
00403614 |. 85C0 test eax, eax
00403616 |. 74 3B je short 00403653
00403618 |. 83F8 11 cmp eax, 11
0040361B |. 75 17 jnz short 00403634
0040361D |. 33D2 xor edx, edx
0040361F |. 8915 906D4000 mov dword ptr [406D90], edx
00403625 |. A1 DC694000 mov eax, dword ptr [4069DC]
0040362A |. E8 610F0000 call 00404590 ; 就是这里
0040362F |. E9 83040000 jmp 00403AB7
00403634 |> 8B15 806D4000 mov edx, dword ptr [406D80]
0040363A |. 0FB71455 125C>movzx edx, word ptr [edx*2+405C12]
00403642 |. 81C2 00504000 add edx, 00405000
00403648 |. FF05 806D4000 inc dword ptr [406D80]
于是,我将这个函数段跑了一遍,其中有个大循环,应该是初始化子弹的工作(由于那段代码太多,就不贴上来了)。其实上面的代码就是游戏是否结束的关键。我想大家也都看出来了。看这代码的头两句。
00403614 |. 85C0 test eax, eax
00403616 |. 74 3B je short 00403653 ; 很可疑的跳转!
这个跳转刚好跳过我们的结束代码地址00404590,所以不妨吧je改为jmp。保存后,运行游戏。发现飞机已经能够遨游在子弹群之中!!!
好了,既然已经将关键的地方找出来了,接下来就是写一个程序Patch了。(程序很简单,也没有什么注释~~ )
这样,我们就随随便便撑过20秒了。o(∩_∩)o...哈哈!
程序的源码和游戏我都放在附件里了,有兴趣的朋友可以玩玩~~~
- 是男人就撑过20秒的游戏分析+无敌Patch的实现
- 游戏编程总结(一) 是男人就撑过20秒
- 飞机躲避小游戏---是男人就撑100秒的源代码分析
- html5是男人就撑30秒
- 是男人就坚持20秒 java的swing弹弹球GAME
- 是男人的就看看
- 是男人就撑100秒自制版(VB)
- SDL小尝试,是男人就坚持20秒
- 是男人就坚持20秒—python版本
- Java小游戏——是男人就坚持20秒
- 是男人就坚持30秒
- "是男人就挺过二十秒"源代码
- "是男人就挺过二十秒"源代码
- 自己写的第一个android 游戏《是男人就下100层》
- 是男人就坚持50秒隐私策略
- 是男人就做的50道题目 题解
- CS,男人的游戏
- 是男人就回帖
- offsetTop,offsetWidth,offsetParent
- 15 个与日期时间相关的精典语句函数
- 守护网络安全,我们一直在努力
- 验证身份证号码是否有效
- offsetTop
- 是男人就撑过20秒的游戏分析+无敌Patch的实现
- ASP.Net学习之常用SQL存储过程
- 自考到底怎么样?
- 怎样即选择文件又选择文件夹路径
- 构建安全的Xml Web Service系列之初探使用Soap头
- bfin-xxx-gcc中bconfig.h的生成
- 在Visual C++中用ADO进行数据库编程
- 国家测绘局关于启用2000国家大地坐标系的通知
- 创建索引