首页
社区
课程
招聘
[旧帖] [原创]PEDIY某单机游戏,加入简单功能 0.00雪花
发表于: 2011-10-22 15:45 4049

[旧帖] [原创]PEDIY某单机游戏,加入简单功能 0.00雪花

2011-10-22 15:45
4049

最近看了《加密与解密》,想起来自己一直玩儿的一个游戏有个BUG,于是想自己DIY游戏程序将它修正。本文内容很简单,欢迎指点、批评。
顺便申请邀请码,想转正啊~~如果可以的话,EMAIL:naylon@126.com~~是与否都先感谢

这款游戏叫GTA:ViceCity(侠盗:罪恶都市),各位可以去网上搜一搜
VC这款游戏有个严重BUG,在多核心处理器的计算机上很容易死机(全屏的话基本上就得重启),而且有时候游戏里鼠标不能动,必须来回按ESC/Resume才能解决(有时候RP不好就直接黑屏了)。解决方法倒是也容易,打开任务管理器,找到gta-vc.exe进程,右键“关系设置”,然后只勾选一个CPU(通常是CPU0),点确定即可。

可是每回进游戏都得再切出来一次调试,实在是很麻烦,于是我就想修改gta-vc.exe,让它启动时自动设置为在CPU0上运行。

1.分析任务管理器的内部实现
首先要分析taskmgr.exe,也就是系统的任务管理器,看看他是怎么实现为进程指定CPU运行的,既然要操作进程,那么它内部肯定需要用OpenProcess函数打开进程,然后用返回的句柄操作,那么我们就用OD调试之,给OpenProcess下断(注意要暂停刷新,否则都会一直断在OpenProcess里面)下好断之后,选中进程点关系设置,这时就断在了OpenProcess里,返回程序领空,来看看关键代码。

0100BA26  /$  55            PUSH EBP
0100BA27  |.  8BEC          MOV EBP,ESP
0100BA29  |.  51            PUSH ECX
0100BA2A  |.  53            PUSH EBX
0100BA2B  |.  56            PUSH ESI
0100BA2C  |.  57            PUSH EDI
0100BA2D  |.  FF75 08       PUSH DWORD PTR SS:[EBP+8]                ; /ProcessId
0100BA30  |.  33DB          XOR EBX,EBX                              ; |
0100BA32  |.  53            PUSH EBX                                 ; |Inheritable => FALSE
0100BA33  |.  68 00060000   PUSH 600                                 ; |Access = SET_INFORMATION|QUERY_INFORMATION
0100BA38  |.  8BF1          MOV ESI,ECX                              ; |
0100BA3A  |.  FF15 14110001 CALL DWORD PTR DS:[<&kernel32.OpenProces>; \OpenProcess
0100BA40  |.  8BF8          MOV EDI,EAX
0100BA42  |.  85FF          TEST EDI,EDI
0100BA44  |.  74 4E         JE SHORT taskmgr.0100BA94
0100BA46  |.  8D45 FC       LEA EAX,DWORD PTR SS:[EBP-4]
0100BA49  |.  50            PUSH EAX                                 ; /pSystemAffinityMask
0100BA4A  |.  8D45 08       LEA EAX,DWORD PTR SS:[EBP+8]             ; |
0100BA4D  |.  50            PUSH EAX                                 ; |pProcessAffinityMask
0100BA4E  |.  57            PUSH EDI                                 ; |hProcess
0100BA4F  |.  FF15 08110001 CALL DWORD PTR DS:[<&kernel32.GetProcess>; \GetProcessAffinityMask
0100BA55  |.  85C0          TEST EAX,EAX
0100BA57  |.  74 30         JE SHORT taskmgr.0100BA89
0100BA59  |.  8D45 08       LEA EAX,DWORD PTR SS:[EBP+8]
0100BA5C  |.  50            PUSH EAX                                 ; /lParam
0100BA5D  |.  68 5BB60001   PUSH taskmgr.0100B65B                    ; |DlgProc = taskmgr.0100B65B
0100BA62  |.  FF76 04       PUSH DWORD PTR DS:[ESI+4]                ; |hOwner
0100BA65  |.  6A 7C         PUSH 7C                                  ; |pTemplate = 7C
0100BA67  |.  FF35 705D0101 PUSH DWORD PTR DS:[1015D70]              ; |hInst = 01000000
0100BA6D  |.  FF15 FC130001 CALL DWORD PTR DS:[<&user32.DialogBoxPar>; \DialogBoxParamW
0100BA73  |.  83F8 01       CMP EAX,1
0100BA76  |.  75 0E         JNZ SHORT taskmgr.0100BA86
0100BA78  |.  FF75 08       PUSH DWORD PTR SS:[EBP+8]
0100BA7B  |.  57            PUSH EDI
0100BA7C  |.  FF15 0C110001 CALL DWORD PTR DS:[<&kernel32.SetProcess>;  kernel32.SetProcessAffinityMask
0100BA82  |.  85C0          TEST EAX,EAX
0100BA84  |.  74 03         JE SHORT taskmgr.0100BA89
0100BA86  |>  33DB          XOR EBX,EBX
0100BA88  |.  43            INC EBX
0100BA89  |>  57            PUSH EDI                                 ; /hObject
0100BA8A  |.  FF15 5C110001 CALL DWORD PTR DS:[<&kernel32.CloseHandl>; \CloseHandle
0100BA90  |.  85DB          TEST EBX,EBX
0100BA92  |.  75 14         JNZ SHORT taskmgr.0100BAA8
0100BA94  |>  FF15 68110001 CALL DWORD PTR DS:[<&kernel32.GetLastErr>; [GetLastError
0100BA9A  |.  50            PUSH EAX                                 ; /Arg3
0100BA9B  |.  68 68750000   PUSH 7568                                ; |Arg2 = 00007568
0100BAA0  |.  FF76 04       PUSH DWORD PTR DS:[ESI+4]                ; |Arg1
0100BAA3  |.  E8 789AFFFF   CALL taskmgr.01005520                    ; \taskmgr.01005520
0100BAA8  |>  5F            POP EDI
0100BAA9  |.  5E            POP ESI
0100BAAA  |.  8BC3          MOV EAX,EBX
0100BAAC  |.  5B            POP EBX
0100BAAD  |.  C9            LEAVE
0100BAAE  \.  C2 0400       RETN 4
0065B845   > \8B8424 440400>MOV EAX,DWORD PTR SS:[ESP+444]           ;  案例 0 --> 分支 0065B5DA
0065B84C   .  55            PUSH EBP
0065B84D   .  6A 78         PUSH 78
0065B84F   .  8B08          MOV ECX,DWORD PTR DS:[EAX]
0065B851   .  890D A4977800 MOV DWORD PTR DS:[7897A4],ECX
0065B857   .  E8 007D0000   CALL <JMP.&d3d8.Direct3DCreate8>
0065B85C   .  33FF          XOR EDI,EDI
0065B85E   .  A3 B4977800   MOV DWORD PTR DS:[7897B4],EAX
0065B863   .  3BC7          CMP EAX,EDI
0065B865   .  75 0C         JNZ SHORT gta-vc-b.0065B873
0065B867   .  5D            POP EBP
0065B868   .  5F            POP EDI
0065B869   .  33C0          XOR EAX,EAX
0065B86B   .  5E            POP ESI
0065B86C   .  81C4 30040000 ADD ESP,430
0065B872   .  C3            RETN
……
0065B857   .  E8 007D0000   CALL <JMP.&d3d8.Direct3DCreate8>

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 6
支持
分享
最新回复 (23)
雪    币: 1000
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
强悍! 支持原创!
2011-10-22 15:49
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
信任技术精湛,支持原创~
2011-10-22 16:01
0
雪    币: 63
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
新人报到,看贴必回。学习中.......
2011-10-22 16:20
0
雪    币: 58
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
很不错,非常不错 支持
2011-10-22 17:05
0
雪    币: 10
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
还得需要查看KX
2011-10-22 17:47
0
雪    币: 4
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
非常好啊 讲得细致啊 学习了 谢谢楼主
2011-10-22 18:02
0
雪    币: 8711
活跃值: (18460)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
8
不错,支持一下,分享一个小程序
上传的附件:
2011-10-22 18:45
0
雪    币: 37
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
lz 实在抱歉 对于我这样0基础的人来说这绝对是神帖 好好学习
2011-10-29 20:47
0
雪    币: 408
活跃值: (156)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
10
在贴吧看到楼主的大作,赞一个
2011-10-29 21:04
0
雪    币: 227
活跃值: (66)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
11
多谢楼上各位朋友们的支持
不过看了看KSSD里面PEDIY的文章,真是自愧不如呐,确实是仍需努力!!
KSSD里面精品文章真的很多,推荐大家多去学习学习,起码我是获益匪浅~
2011-10-29 21:09
0
雪    币: 34
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
都是新人,跟楼主差距太大,向楼主学习!!!
2011-10-29 21:37
0
雪    币: 103
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
原来邀请码是需要发布程序的啊
2011-10-30 10:46
0
雪    币: 36
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
有100KX可以买
2011-10-30 11:44
0
雪    币: 55
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
学习了,还要学好汇编啊!
2011-10-31 11:51
0
雪    币: 104
活跃值: (31)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
文本的教程
看着的确挺难d的
不愧是邀请码列表里的
慢慢学习吧
2011-11-6 22:44
0
雪    币: 37
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
意思明白了, 代码还没能看懂, 还得继续进修啊
2011-11-6 23:07
0
雪    币: 106
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
不过看不懂 呵呵  我是连代码都不会的  不过 神啊
2011-11-8 10:09
0
雪    币: 9
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
好好的学习学习~~~~~~
2011-11-8 10:24
0
雪    币: 1
活跃值: (48)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
很不错  支持楼主
2011-11-8 10:25
0
雪    币: 106
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
谢谢楼主分享  学习了
2011-11-10 12:02
0
雪    币: 3511
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
新人报到,看贴学习中
2011-11-10 12:25
0
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
楼主有实力啊
2011-11-30 13:09
0
雪    币: 292
活跃值: (153)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
24
...........悄悄学习,努力奔向前方。
2011-11-30 13:14
0
游客
登录 | 注册 方可回帖
返回
//