同人星球BBS -> 游戏修改 -> [代码分析]神圣纪事(Sacred) 的反修改分析 [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

修改众 07-12-10 15:05

搜索金钱 4b

0 金钱
+4 攻击 2b
+6
+8
+a
...
+e



130 生命

作弊不死

004faf48 push 01 ===jmp 00500ee7
004faf4a push ebx
004faf4b mov ecx,ebp

0050292f je  =======jmp


前几天,朋友推荐了1个游戏给我《神圣纪事 (Sacred)》
感觉和暗黑差不多,打装备升级做任务的那种模式。

玩了1会就烦了。
然后开始修改。


首先当然是改钱了。 (因为容易找嘛~
很快就找到了钱的地址。(根据经验,钱的旁边应该有点有用的东东。
随便上下看看。
发现钱后面就是人物的所有能力。攻击,防御,敏捷等等都在。(哦~ 这么简单啊
修改所有能力到65535 (2字节的上限就这么多啦,哦哈哈,这才是真正的无敌啊~随便砍个怪看看效果去~

就在1刀秒掉1个野怪的同时,自己也死了! (不会吧,我自己怎么死了 ? 头一次碰到这种事。
再看看,所有能力也都变成了0或者1 (哎哟,真可怕,这是什么bug ?

重新把所有能力改到 1000 (改少点吧,不然又可能bug
结果刚砍死另外1个怪,同样的事再次发生。又挂了。所有能力变0 (晕,这是....反修改?

查找是什么让HP变成0,自己怎么死的。
得到了如下的代码
005105fc - 90                        - nop
005105fd - 90                        - nop
005105fe - 90                        - nop
005105ff - 90                        - nop
00510600 - 8b 44 24 08                - mov eax,[esp+08]
00510604 - 83 f8 02                  - cmp eax,02
00510607 - 77 0b                      - ja 00510614
00510609 - 8b 54 24 04                - mov edx,[esp+04]
0051060d - 89 94 81 78 04 00 00      - mov [ecx+eax*4+00000478],edx ===〉断在这里,edx此时为0
00510614 - c2 08 00                  - ret 0008
哦。。
我是这么死掉的啊。( 这个看起来很奇怪的call是什么,这么短,看起来功能就是让我死用的嘛
跟出去,看看是谁调用的这个call
得到如下代码


...
004faf34 - 55                        - push ebp
004faf35 - 50                        - push eax
004faf36 - e8 a5 66 0a 00            - call 005a15e0
004faf3b - 56                        - push esi
004faf3c - 8b cf                      - mov ecx,edi
004faf3e - e8 5d 6f f9 ff            - call 00491ea0
004faf43 - e9 9f 5f 00 00            - jmp 00500ee7
004faf48 - 6a 02                      - push 02
004faf4a - 53                        - push ebx
004faf4b - 8b cd                      - mov ecx,ebp
004faf4d - e8 ae 56 01 00            - call 00510600 ===>就是这里调用的那个call
004faf52 - 8b 4d 10                  - mov ecx,[ebp+10]
004faf55 - 51                        - push ecx
004faf56 - e8 b5 95 f2 ff            - call 00424510
004faf5b - 8b 55 0c                  - mov edx,[ebp+0c]
004faf5e - 83 c4 04                  - add esp,04
004faf61 - 50                        - push eax
...
哦,原来如此,这果然是个反修改的call。 (这就好办了,让它不起作用就可以了
正好上面有个jmp,就用这个吧。
直接把
push 02
push ebx
mov ecx,ebp
改成
jmp 00500ee7

好了,回到游戏。再次修改了能力,砍怪果然不死了。 (我砍,我砍,哈哈,死不了了吧

不过还有个问题,虽然不会死了,就是能力值会变成0
如法炮制,得到能力值变成0的代码
这是1小部分
...
005028fd - 8b 86 96 03 00 00          - mov eax,[esi+00000396]
00502903 - 8b d7                      - mov edx,edi
00502905 - 33 d0                      - xor edx,eax
00502907 - 8b 41 04                  - mov eax,[ecx+04]
0050290a - 3b c2                      - cmp eax,edx
0050290c - 74 0e                      - je 0050291c
0050290e - 88 5c 24 13                - mov [esp+13],bl
00502912 - c7 86 96 03 00 00 01 00 00 00  - mov [esi+00000396],00000001 ===>生命值变成1
0050291c - 66 8b 86 a6 03 00 00      - mov ax,[esi+000003a6]
00502923 - 8b 51 08                  - mov edx,[ecx+08]
00502926 - 25 ff ff 00 00            - and eax,0000ffff
0050292b - 33 c7                      - xor eax,edi
0050292d - 3b d0                      - cmp edx,eax
0050292f - 74 0d                      - je 0050293e
00502931 - 88 5c 24 13                - mov [esp+13],bl
00502935 - 66 c7 86 a6 03 00 00 01 00  - mov word ptr [esi+000003a6],0001 ===>力量变成1
0050293e - 8d 41 0c                  - lea eax,[ecx+0c]
...

( 哇啊,这游戏作者真无聊,居然有这种让所有能力变成1的代。明显就是不让修改嘛。
(不过嘛,嘿嘿,正好被我利用了
把变成1的地方改成自己想要的数值。
变成了如下
...
005028fd - 8b 86 96 03 00 00          - mov eax,[esi+00000396]
00502903 - 8b d7                      - mov edx,edi
00502905 - 33 d0                      - xor edx,eax
00502907 - 8b 41 04                  - mov eax,[ecx+04]
0050290a - 3b c2                      - cmp eax,edx
0050290c - 74 0e                      - je 0050291c
0050290e - 88 5c 24 13                - mov [esp+13],bl
00502912 - c7 86 96 03 00 00 01 00 00 00  - mov [esi+00000396],0000ffff ===>生命值变成65535
0050291c - 66 8b 86 a6 03 00 00      - mov ax,[esi+000003a6]
00502923 - 8b 51 08                  - mov edx,[ecx+08]
00502926 - 25 ff ff 00 00            - and eax,0000ffff
0050292b - 33 c7                      - xor eax,edi
0050292d - 3b d0                      - cmp edx,eax
0050292f - 74 0d                      - je 0050293e
00502931 - 88 5c 24 13                - mov [esp+13],bl
00502935 - 66 c7 86 a6 03 00 00 01 00  - mov word ptr [esi+000003a6],ff7f ===>力量变成65535
0050293e - 8d 41 0c                  - lea eax,[ecx+0c]
...

哇哈哈,这下能力不仅不变成0,想要多少就能变多少了,太好啦
[s:1]

snow5782 07-12-10 23:51
看不懂 [s:8]  [s:8]  [s:8]

真的看不懂阿 [s:8]  [s:8]  [s:8]  [s:8]

zxcv 08-05-25 21:45
可以讲解中文版的步骤吗? 拜託...
我无法举一反三....

DL:
http://www.verycd.com/topics/220475/


查看完整版本: [-- [代码分析]神圣纪事(Sacred) 的反修改分析 --] [-- top --]

Powered by PHPWind v5.3 Code © 2003-05 PHPWind
Time 0.068885 second(s),query:4 Gzip enabled

You can contact us