同人星球BBS -> 游戏修改 -> [代码分析] PSUI 技能升级代码的分析 [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

修改众 07-12-14 13:39

前言:
看到高手做的外挂非常羡慕吧,于是自己也想学修改吧。
以下是最最简单的汇编修改,其他汇编修改的难度只会比这个更高。

汇编修改的不是具体某个地址,而是程序的走向。
通过操作程序的运行,来达到目的,这是最根本的修改。
修改是汇编技术的应用,也是电脑技术的综合体现。
如果只是想用金山游侠随便改改,那完全不用学汇编。

修改本身是比较乏味的,面对1大堆数字有意思么?
其实修改游戏的乐趣,大概就是向朋友炫耀。

==================================
修改工具 CE 5.3
游戏版本 "美版+日文化破解补丁"
进程 "PsuIlluminusOff1.exe"
目标 :职业技能快速升满


搜索内存中的数值然后修改。谁都会。
不过这里要说的是---汇编修改。也就是修改游戏的运行代码。
需要1点点的汇编基础。不过并不是传说中的那么困难。
仔细看过,会发现很简单。


启动游戏,然后CE加载 PsuIlluminusOff1.exe
首先是通过精确数值搜索,找到技能等级的地址。
(根据以前修改PSO的经验,没学的技能是FF,1级技能是00,2级技能是01
到这里,已经可以直接锁定这个数值到50了,这样就变成了50级技能。
不过请继续看下面

在这个地址上面右键,选择"Find out what write to this address" (找到是什么改写的这个地址
这会弹出1个小窗口。1开始里面什么也没有,是空的。
回到游戏,继续打怪,让技能升1级。
这时候,会发现这个窗口中出现内容了。
是的,这就是改变技能等级的汇编代码。
我们要修改的就是这个。

在这个代码上右键,选择 "Add this code to code list" (添加这个代码到代码列表
这会又弹出来1个 叫做"Advanced options"的窗口,并且这个代码也出现在其中。
现在可以关掉查找代码的那个小窗口了,因为已经用不到了。

在代码表中,右键这个技能升级的代码,选择 "Open the dissambler at this location "(打开这个代码所在位置
这会弹出来 "Memory Viewer“窗口。
注意看汇编代码的第1行 ,正是这个技能升级的代码。
下面就是技能升级的全部代码

0070b94e - cc                        - int 3
0070b94f - cc                        - int 3
0070b950 - 83 ec 44                  - sub esp,44
0070b953 - a1 60 12 94 00            - mov eax,[00941260]
0070b958 - 89 44 24 40                - mov [esp+40],eax
0070b95c - 83 7c 24 48 ff            - cmp dword ptr [esp+48],ff    ====>判断技能是不是FF
0070b961 - 56                        - push esi
0070b962 - 8b f1                      - mov esi,ecx
0070b964 - 0f 84 b5 00 00 00          - je 0070ba1f
0070b96a - 8b 07                      - mov eax,[edi]
0070b96c - 53                        - push ebx
0070b96d - 8b 5f 2c                  - mov ebx,[edi+2c]
0070b970 - 55                        - push ebp
0070b971 - 8b cf                      - mov ecx,edi
0070b973 - ff 90 90 00 00 00          - call dword ptr [eax+00000090]
0070b979 - ff 06                      - inc [esi]
0070b97b - 8b 4c 24 54                - mov ecx,[esp+54]
0070b97f - 8b e8                      - mov ebp,eax
0070b981 - 39 0e                      - cmp [esi],ecx
0070b983 - 72 62                      - jb 0070b9e7                        ====>这个跳转将会忽略掉技能升级的代码
0070b985 - 8a 56 07                  - mov dl,[esi+07]
0070b988 - 0f b6 46 04                - movzx eax,byte ptr [esi+04]
0070b98c - fe c2                      - inc dl                                    ====〉这里是技能升级的代码,
0070b98e - 83 e8 04                  - sub eax,04
0070b991 - 88 56 07                  - mov [esi+07],dl
0070b994 - 74 38                      - je 0070b9ce
0070b996 - 48                        - dec eax
0070b997 - 74 1c                      - je 0070b9b5
0070b999 - 48                        - dec eax
0070b99a - 75 3b                      - jne 0070b9d7
0070b99c - 8b 4c 24 58                - mov ecx,[esp+58]
0070b9a0 - e8 1b 24 00 00            - call 0070ddc0
0070b9a5 - 8d 44 24 0c                - lea eax,[esp+0c]
0070b9a9 - e8 d2 d7 ff ff            - call 00709180
0070b9ae - c6 44 24 40 01            - mov byte ptr [esp+40],01
0070b9b3 - eb 3b                      - jmp 0070b9f0
0070b9b5 - 8b 4c 24 58                - mov ecx,[esp+58]
0070b9b9 - e8 b2 23 00 00            - call 0070dd70
0070b9be - 8d 44 24 0c                - lea eax,[esp+0c]
0070b9c2 - e8 b9 d7 ff ff            - call 00709180
0070b9c7 - c6 44 24 40 01            - mov byte ptr [esp+40],01
0070b9cc - eb 22                      - jmp 0070b9f0
0070b9ce - 8b 4c 24 58                - mov ecx,[esp+58]
0070b9d2 - e8 49 23 00 00            - call 0070dd20
0070b9d7 - 8d 44 24 0c                - lea eax,[esp+0c]
0070b9db - e8 a0 d7 ff ff            - call 00709180
0070b9e0 - c6 44 24 40 01            - mov byte ptr [esp+40],01
0070b9e5 - eb 09                      - jmp 0070b9f0
0070b9e7 - 8d 44 24 0c                - lea eax,[esp+0c]
0070b9eb - e8 90 d7 ff ff            - call 00709180
0070b9f0 - 8b 16                      - mov edx,[esi]
0070b9f2 - 8b 46 04                  - mov eax,[esi+04]
0070b9f5 - 89 54 24 44                - mov [esp+44],edx
0070b9f9 - 8b 17                      - mov edx,[edi]
0070b9fb - 8b cf                      - mov ecx,edi
0070b9fd - 89 5c 24 3c                - mov [esp+3c],ebx
0070ba01 - 89 6c 24 38                - mov [esp+38],ebp
0070ba05 - 89 6c 24 1c                - mov [esp+1c],ebp
0070ba09 - 89 44 24 48                - mov [esp+48],eax
0070ba0d - ff 52 1c                  - call dword ptr [edx+1c]
0070ba10 - 8b 10                      - mov edx,[eax]
0070ba12 - 8d 4c 24 0c                - lea ecx,[esp+0c]
0070ba16 - 51                        - push ecx
0070ba17 - 8b c8                      - mov ecx,eax
0070ba19 - 53                        - push ebx
0070ba1a - ff 52 3c                  - call dword ptr [edx+3c]
0070ba1d - 5d                        - pop ebp
0070ba1e - 5b                        - pop ebx
0070ba1f - 8b 4c 24 44                - mov ecx,[esp+44]
0070ba23 - 5e                        - pop esi
0070ba24 - e8 63 47 0d 00            - call 007e018c
0070ba29 - 83 c4 44                  - add esp,44
0070ba2c - c2 08 00                  - ret 0008

很明显了,dl存放的就是这个技能的现在等级
inc dl 执行 dl =dl +1
这样就达到了技能升1级的作用。

怎么修改呢。先观察这个call的流程,
主要是看 cmp ,test这种判断语句,和后面的 je,jne的跳转语句。
这种语句的作用就是:
判断2个数是不是相等。然后根据结果决定是 继续执行je,jne后面的代码,还是直接跳到je,jne指向的代码。

观察发现,技能升级上面有2个判断跳转
第1个:
0070b95c - 83 7c 24 48 ff            - cmp dword ptr [esp+48],ff
0070b961 - 56                        - push esi
0070b962 - 8b f1                      - mov esi,ecx
0070b964 - 0f 84 b5 00 00 00          - je 0070ba1f
第2个:
0070b981 - 39 0e                      - cmp [esi],ecx
0070b983 - 72 62                      - jb 0070b9e7   

分析:
我们知道FF代表技能没有学习,所以可以猜到 第1个判断的作用就是:如果技能没学过,那么就跳过技能升级的部分。
而第二个判断虽然不能确定具体的意思,但是很明显的是:如果让它跳了,那技能就不能升级了。

所以,我们需要修改的就是这第2个判断。怎么修改呢,其实很简单!
把jb 用 nop 代替。(nop代码的意思是什么也不做。
当然,CE中操作更简单些。只需要在这个跳转代码上面右键,选择 "Replace with code that does nothing"( 让这条代码什么也不做
然后我们会看到,代码列表中多出来1个红色的代码。这就是这个被无效化了的跳转。


现在,让我们回到游戏去看看效果吧。

jay0087 07-12-19 21:26
[s:5]  [s:5]  [s:5] 麻烦死了。。。。简单来说就是把ff代码打开原理类似gba代码
gm8就比他简便多了

qa892166756 08-10-23 10:12
这才是完整的原理,支持版主! [s:2]  [s:2]  [s:2]


查看完整版本: [-- [代码分析] PSUI 技能升级代码的分析 --] [-- top --]

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

You can contact us