3DMGAME 3DM首页 新闻中心 前瞻 | 评测 游戏库 热门 | 最新 攻略中心 攻略 | 秘籍 下载中心 游戏 | 汉化 购买正版 论坛

注册 登录

QQ登录

只需一步,快速开始

查看: 73261|回复: 45
打印 上一主题 下一主题

[分享] 用CE更改任何RPCS3遊戲

  [复制链接]

2万

主题

4万

帖子

1万

积分

膝盖中箭MOD组

Rank: 12Rank: 12Rank: 12

贡献度
-1973
金元
234795
积分
15608
精华
2
注册时间
2006-12-24

世界杯足球

跳转到指定楼层
主题
发表于 2018-3-28 21:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 cailei110 于 2018-11-23 11:11 编辑

1.先下載CE,自己百度下,我是用CheatEngine 6.7 版本
2.編輯-設定裡面把圈起來地方打勾


3.點選該遊戲的程序


4.數值類型選4 Bytes,然後右鍵定義新的自定義類型(自動彙編)


5.裡面內容都清空,貼上下面這些
alloc(ConvertRoutine,1024)
alloc(ConvertBackRoutine,1024)
alloc(TypeName,256)
alloc(ByteSize,4)
alloc(UsesFloat,1)
alloc(CallMethod,1)


TypeName:
db '4byte_bswap',0


ByteSize:
dd 4


UsesFloat:
db 0


CallMethod:
db 0


ConvertRoutine:
[64-bit]
mov eax,[rcx]
bswap eax
ret
[/64-bit]


[32-bit]
push ebp
mov ebp,esp
mov eax,[ebp+8]
mov eax,[eax]
bswap eax
pop ebp
ret
[/32-bit]


ConvertBackRoutine:
[64-bit]
bswap ecx
mov [r8],ecx
ret
[/64-bit]


[32-bit]
push ebp
mov ebp,esp
push eax
push ebx
mov eax,[ebp+8]
mov ebx,[ebp+10]
bswap eax
mov [ebx],eax
pop ebx
pop eax
pop ebp
ret
[/32-bit]
7.你會看到變成4byte_bswap


8.遊戲玩到你可以變換數據的地方(例如金錢就是到可以買賣的地方),在數值輸入你現在金錢後搜尋


9.搜到一堆後,更改數據(買東西賣東西之類),然後輸入新的數據後搜尋


10.這時候左邊結果應該剩下很少,隨便選一個後,修改數值


11.回遊戲看,已經變成99999999了


12.如果你發現你修改的那個數據後,原遊戲還是沒變化,不彷之前搜尋剩下的幾個都改一改,一定有一個對


13.可以將此次搜尋出來的結果儲存起來,之後每次開CE都可以馬上帶入你之前抓到的值直接用






本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

725

主题

2293

帖子

8万

积分

游戏之神

Rank: 13Rank: 13Rank: 13Rank: 13

贡献度
12595
金元
332302
积分
83610
精华
0
注册时间
2017-6-5

足球

舒服的沙发
发表于 2018-3-29 22:40 来自手机 | 只看该作者
本帖最后由 cailei110 于 2018-11-23 11:06 编辑

[模拟器找到的数据地址与ps3金手指的地址]

用ce找到的数据地址与ps3金手指的地址相差正好100000000(8个0)
比如ps3金手指文件里金钱地址是0x4000,那么ce直接定位到10004000就是模拟器里金钱的地址。

这是因为rpcs3模拟器是用固定的地址作为ps3内存存放游戏数据。也许模拟器作者觉得固定地址方便。咱修改也方便了不少。


[ps3游戏内存数值与一般游戏不同]
ps3游戏的十六进制数值与一般游戏相反,为正向排列。比如数值10000,一般游戏内存中是10 27 00 00,而ps3里面是00 00 27 10。用ce写修改脚本的时候要注意数值的顺序转换。
所以修改数值要注意这点。比如有100元钱,ce找的地址是0x40000003,那么实际上金钱地址是0x40000000,因为游戏数据是正向的。
脚本也不能直接mov [40000000],#100,而要写成mov [40000000],64000000。
或者用bswap命令转换顺序,例如mov eax,#100 ; bswap eax ; mov [40000000],eax 这样。


[用ce调试rpcs3模拟的游戏]
经过跟踪发现,rpcs3会先把游戏的代码全部翻译为64位汇编,实际是在64位汇编中运行的。汇编代码每次启动游戏会重新翻译生成,所以地址是动态的。

用ce打开rpcs3,找到要修改的数据,find access能找到对应的汇编代码。
跟踪过程和普通游戏差不多,需要注意的是,因为代码是逐条翻译过来的,所以跟踪起来感觉是一小段一小段的。
当看到 cmp dword ptr [rcx+1C],00 ;jne xxx ,说明这段翻译的代码执行完了。正常会跳走做一些事情,然后回到这里下面的代码继续执行。所以直接在jne下面的代码上 run untill继续跟就行了。
就像一个人翻译了一篇文章,念一句要喘口气,然后继续念下一句。只要看到段落标记直接执行到下一句就行了。

跟踪过程中能发现有一块频繁读写的地址其实是当作ps3寄存器来用的。可以理解为一块地址作为ps3游戏内存,一块地址作为ps3寄存器。通过翻译ps3游戏代码模拟ps3的cpu操作数据。
这就是模拟器。。。

[翻译出来的实际代码可读性极低]
轻松修改是不可能的,花很多时间修改确实很不值得。但不修改很可能要花更多时间去玩游戏,这就值得吗。。。修改和不修改,在省时间和游戏乐趣中权衡,这是个答案因人而异的问题。

跟踪的时候如果把一小段一小段的代码都记录下来,就能得到一大段模拟器翻译出来的代码了。但还是很难直接看出来代码的作用。本来mips汇编就比较难读,模拟器翻译过来的更是难以看懂。
相比起来一般基于pc平台开发的游戏,汇编代码里经常找到很多文本提示。加上pc平台游戏的调试器ollydbg什么的很丰富强大,所以pc游戏容易修改。
为了方便理解,放几个机战Z时狱篇的修改脚本。
就是用上面的修改方法找到地址的。



狙击10
[ENABLE]
10E732E6:
add qword ptr [rcx+00000108],0a
[DISABLE]
10E732E6:
add qword ptr [rcx+00000108],02


加速10
[ENABLE]
10EBC026:
add qword ptr [rcx+00000118],0a
[DISABLE]
10EBC026:
add qword ptr [rcx+00000118],03


全机4个强化插槽a
[ENABLE]
10D09A79:
mov eax,4
[DISABLE]
10D09A79:
movzx eax,byte ptr [rax+rdx+47]


队伍击破点数无限a
[ENABLE]
10EB5041:
mov eax,2
[DISABLE]
10EB5041:
movzx eax,byte ptr [rax+rdx+55]


弄明白套路就好改多了。再来一个。0改造也能选择满改奖励a [ENABLE]10D06C91:db eb [DISABLE]






找数值时,可以加个数值格式方便自动转换顺序。
新增方式,在4bytes上右键→选define new custom type (lua)分别把下面的2byte、4byte 格式贴上。
之后就选新增的格式来找数值就不用自己换算。

-----------------------------------------------------------------------------------------------
alloc(TypeName,256)
alloc(ByteSize,4)
alloc(ConvertRoutine,1024)
alloc(ConvertBackRoutine,1024)

TypeName:
db '2 Byte Big Endian',0

ByteSize:
dd 2

//The convert routine should hold a routine that converts the data to an integer (in eax)
//function declared as: stdcall int ConvertRoutine(unsigned char *input);
//Note: Keep in mind that this routine can be called by multiple threads at the same time.
ConvertRoutine:
//jmp dllname.functionname
[64-bit]
//or manual:
//parameters: (64-bit)
//rcx=address of input
xor eax,eax
mov ax,[rcx] //eax now contains the bytes 'input' pointed to
xchg ah,al //convert to big endian

ret
[/64-bit]

[32-bit]
//jmp dllname.functionname
//or manual:
//parameters: (32-bit)
push ebp
mov ebp,esp
//[ebp+8]=input
//example:
mov eax,[ebp+8] //place the address that contains the bytes into eax
mov ax,[eax] //place the bytes into eax so it's handled as a normal 4 byte value
and eax,ffff //cleanup
xchg ah,al //convert to big endian

pop ebp
ret 4
[/32-bit]

//The convert back routine should hold a routine that converts the given integer back to a row of bytes (e.g when the user wats to write a new value)
//function declared as: stdcall void ConvertBackRoutine(int i, unsigned char *output);
ConvertBackRoutine:
//jmp dllname.functionname
//or manual:
[64-bit]
//parameters: (64-bit)
//ecx=input
//rdx=address of output
//example:
xchg ch,cl //convert the little endian input into a big endian input
mov [rdx],cx //place the integer the 4 bytes pointed to by rdx

ret
[/64-bit]

[32-bit]
//parameters: (32-bit)
push ebp
mov ebp,esp
//[ebp+8]=input
//[ebp+c]=address of output
//example:
push eax
push ebx
mov eax,[ebp+8] //load the value into eax
mov ebx,[ebp+c] //load the address into ebx

//convert the value to big endian
xchg ah,al

mov [ebx],ax //write the value into the address
pop ebx
pop eax

pop ebp
ret 8
[/32-bit]
-----------------------------------------------------------------------------------------------
alloc(TypeName,256)
alloc(ByteSize,4)
alloc(ConvertRoutine,1024)
alloc(ConvertBackRoutine,1024)

TypeName:
db '4 Byte Big Endian',0

ByteSize:
dd 4

//The convert routine should hold a routine that converts the data to an integer (in eax)
//function declared as: stdcall int ConvertRoutine(unsigned char *input);
//Note: Keep in mind that this routine can be called by multiple threads at the same time.
ConvertRoutine:
//jmp dllname.functionname
[64-bit]
//or manual:
//parameters: (64-bit)
//rcx=address of input
xor eax,eax
mov eax,[rcx] //eax now contains the bytes 'input' pointed to
bswap eax //convert to big endian

ret
[/64-bit]

[32-bit]
//jmp dllname.functionname
//or manual:
//parameters: (32-bit)
push ebp
mov ebp,esp
//[ebp+8]=input
//example:
mov eax,[ebp+8] //place the address that contains the bytes into eax
mov eax,[eax] //place the bytes into eax so it's handled as a normal 4 byte value

bswap eax

pop ebp
ret 4
[/32-bit]

//The convert back routine should hold a routine that converts the given integer back to a row of bytes (e.g when the user wats to write a new value)
//function declared as: stdcall void ConvertBackRoutine(int i, unsigned char *output);
ConvertBackRoutine:
//jmp dllname.functionname
//or manual:
[64-bit]
//parameters: (64-bit)
//ecx=input
//rdx=address of output
//example:
bswap ecx //convert the little endian input into a big endian input
mov [rdx],ecx //place the integer the 4 bytes pointed to by rdx

ret
[/64-bit]

[32-bit]
//parameters: (32-bit)
push ebp
mov ebp,esp
//[ebp+8]=input
//[ebp+c]=address of output
//example:
push eax
push ebx
mov eax,[ebp+8] //load the value into eax
mov ebx,[ebp+c] //load the address into ebx

//convert the value to big endian
bswap eax

mov [ebx],eax //write the value into the address
pop ebx
pop eax

pop ebp
ret 8
[/32-bit]

评分

1

查看全部评分

回复 支持 反对

使用道具 举报

175

主题

2694

帖子

2732

积分

游戏达人

Rank: 7Rank: 7Rank: 7

贡献度
123
金元
22399
积分
2732
精华
0
注册时间
2005-11-30
硬硬的板凳
发表于 2018-5-5 22:11 | 只看该作者
楼主真乃大神也!!!!!!!!!!!!!!!真好在玩魔界战记D2 ~~~~~~
回复 支持 反对

使用道具 举报

0

主题

174

帖子

365

积分

高级玩家

Rank: 4

贡献度
0
金元
3652
积分
365
精华
0
注册时间
2011-12-29
冰凉的地板
发表于 2018-5-6 11:42 | 只看该作者
谢谢楼主  不过机战 天狱篇无限  显示 Access violation
回复 支持 反对

使用道具 举报

62

主题

4710

帖子

5056

积分

游戏精英

Rank: 8Rank: 8

贡献度
33
金元
49237
积分
5056
精华
0
注册时间
2015-6-1
5#
发表于 2018-5-7 21:49 | 只看该作者
不错 收藏了。
回复 支持 反对

使用道具 举报

89

主题

1561

帖子

1596

积分

游戏狂人

骨灰级宅男玩家

Rank: 6Rank: 6

贡献度
82
金元
12680
积分
1596
精华
0
注册时间
2008-3-27
6#
发表于 2018-5-17 15:40 | 只看该作者
好贴。。
回复 支持 反对

使用道具 举报

0

主题

2213

帖子

2572

积分

游戏达人

Rank: 7Rank: 7Rank: 7

贡献度
50
金元
23724
积分
2572
精华
0
注册时间
2006-5-29
7#
发表于 2018-5-29 01:35 | 只看该作者
技术贴,果然有效果。
回复 支持 反对

使用道具 举报

0

主题

50

帖子

50

积分

初级玩家

Rank: 2

贡献度
0
金元
500
积分
50
精华
0
注册时间
2018-5-11
8#
发表于 2018-7-12 05:25 | 只看该作者
牛币级大神
回复 支持 反对

使用道具 举报

13

主题

1418

帖子

1435

积分

游戏狂人

Rank: 6Rank: 6

贡献度
24
金元
13393
积分
1435
精华
0
注册时间
2007-2-26
9#
发表于 2018-7-31 22:33 | 只看该作者
2次变化以后~就没有地址了~搜索不到
回复 支持 反对

使用道具 举报

6

主题

497

帖子

622

积分

超级玩家

Rank: 5Rank: 5

贡献度
2
金元
6140
积分
622
精华
0
注册时间
2009-11-29
10#
发表于 2018-9-22 17:48 | 只看该作者
本帖最后由 shuzhaoxuan 于 2018-9-25 19:57 编辑

大佬,我想请教一个问题。
龙之皇冠99级以前的经验值是搜4byte_bswap嘛?我这里搜不到啊。输入EXP 后面的数字,搜不到数据。
但奇怪的是金钱我就可以直接搜到。技能点我用2byte_bswap也可以搜到,唯独经验值搜不到。
这个经验值应该怎么搜?

另外您在别的帖子里提供的龙之皇冠经验值的内存地址,我用了以后不好使。
在内存编辑器里搜不到那个地址。直接添加地址,数据显示??,也没法修改。
我修改金钱的内存地址,跟您的地址核对了一下也不一样。是不是不同人电脑内存地址不一样的?



回复 支持 反对

使用道具 举报

23

主题

749

帖子

770

积分

超级玩家

Rank: 5Rank: 5

贡献度
10
金元
7304
积分
770
精华
0
注册时间
2011-4-18
QQ
11#
发表于 2018-10-7 19:50 | 只看该作者
感谢,写的很详细
回复 支持 反对

使用道具 举报

0

主题

63

帖子

129

积分

中级玩家

Rank: 3Rank: 3

贡献度
0
金元
1291
积分
129
精华
0
注册时间
2014-9-4
12#
发表于 2018-11-18 19:42 | 只看该作者
请问修改后数值变问号是什么情况?
回复 支持 反对

使用道具 举报

0

主题

36

帖子

106

积分

中级玩家

Rank: 3Rank: 3

贡献度
0
金元
1055
积分
106
精华
0
注册时间
2009-7-20
13#
发表于 2018-12-11 22:47 | 只看该作者
牛逼啊 6666
回复 支持 反对

使用道具 举报

0

主题

20

帖子

113

积分

中级玩家

Rank: 3Rank: 3

贡献度
0
金元
1125
积分
113
精华
0
注册时间
2015-9-23
14#
发表于 2018-12-26 10:15 | 只看该作者
先谢谢大老了,一会试试
回复 支持 反对

使用道具 举报

0

主题

20

帖子

113

积分

中级玩家

Rank: 3Rank: 3

贡献度
0
金元
1125
积分
113
精华
0
注册时间
2015-9-23
15#
发表于 2018-12-26 10:39 | 只看该作者
好贴好贴啊
回复 支持 反对

使用道具 举报

0

主题

35

帖子

105

积分

中级玩家

Rank: 3Rank: 3

贡献度
2
金元
966
积分
105
精华
0
注册时间
2010-10-30
16#
发表于 2019-3-26 17:47 | 只看该作者
楼主厉害~~谢谢
回复 支持 反对

使用道具 举报

33

主题

2101

帖子

2184

积分

游戏达人

Rank: 7Rank: 7Rank: 7

贡献度
14
金元
21276
积分
2184
精华
0
注册时间
2009-10-4
17#
发表于 2019-4-5 11:44 | 只看该作者
LZ ,7909版本用ce找不到地址了,我现在修改机战,用ce什么也查不到了
回复 支持 反对

使用道具 举报

4

主题

108

帖子

165

积分

中级玩家

Rank: 3Rank: 3

贡献度
0
金元
1646
积分
165
精华
0
注册时间
2009-2-3
18#
发表于 2019-5-6 15:56 | 只看该作者
修改圣斗士星矢战记,完全没用
回复 支持 反对

使用道具 举报

93

主题

3177

帖子

3451

积分

游戏达人

Rank: 7Rank: 7Rank: 7

贡献度
48
金元
32586
积分
3451
精华
0
注册时间
2007-12-7
19#
发表于 2019-5-8 15:01 | 只看该作者
龙之皇冠 搜索到金钱数字,修改后 游戏内没变化~~
回复 支持 反对

使用道具 举报

9

主题

457

帖子

583

积分

高级玩家

Rank: 4

贡献度
1
金元
5786
积分
583
精华
0
注册时间
2016-12-3
20#
发表于 2019-5-29 00:59 | 只看该作者
修改战国basaraHD合集 ,一改模拟器就卡死
回复 支持 反对

使用道具 举报

0

主题

284

帖子

346

积分

高级玩家

Rank: 4

贡献度
0
金元
3462
积分
346
精华
0
注册时间
2009-4-24
21#
发表于 2019-6-7 20:49 | 只看该作者
非常感谢  这是个好东西
回复 支持 反对

使用道具 举报

4

主题

2841

帖子

2673

积分

游戏达人

Rank: 7Rank: 7Rank: 7

贡献度
4
金元
26565
积分
2673
精华
0
注册时间
2008-7-1
22#
发表于 2019-6-22 21:17 | 只看该作者
改机战系列的芯片应该怎么搜索
回复 支持 反对

使用道具 举报

7

主题

290

帖子

337

积分

高级玩家

Rank: 4

贡献度
3
金元
3252
积分
337
精华
0
注册时间
2012-9-15
23#
发表于 2019-9-24 16:56 | 只看该作者
搜到地址,可是数值仍然无变化
回复 支持 反对

使用道具 举报

14

主题

1585

帖子

1783

积分

游戏狂人

Rank: 6Rank: 6

贡献度
14
金元
17270
积分
1783
精华
0
注册时间
2010-11-26
24#
发表于 2019-10-24 13:11 | 只看该作者
牛!!!!!!!!!
回复 支持 反对

使用道具 举报

4

主题

169

帖子

322

积分

高级玩家

Rank: 4

贡献度
0
金元
3215
积分
322
精华
0
注册时间
2016-6-14

龙年勋章

25#
发表于 2019-10-28 21:12 | 只看该作者
此乃神贴,造福一方
回复 支持 反对

使用道具 举报

9

主题

2242

帖子

2107

积分

游戏达人

Rank: 7Rank: 7Rank: 7

贡献度
25
金元
20068
积分
2107
精华
0
注册时间
2009-1-21
26#
发表于 2019-11-6 06:58 | 只看该作者
这个牛逼了
回复 支持 反对

使用道具 举报

5

主题

379

帖子

428

积分

高级玩家

Rank: 4

贡献度
2
金元
4198
积分
428
精华
0
注册时间
2007-2-14
27#
发表于 2019-11-20 21:25 | 只看该作者
除了击坠数,其他都能改数字。不知道怎么改芯片
回复 支持 反对

使用道具 举报

5

主题

1063

帖子

1135

积分

游戏狂人

Rank: 6Rank: 6

贡献度
31
金元
10112
积分
1135
精华
0
注册时间
2003-11-28
28#
发表于 2019-12-8 02:02 | 只看该作者
谢谢楼主的分享!
回复 支持 反对

使用道具 举报

0

主题

47

帖子

118

积分

中级玩家

Rank: 3Rank: 3

贡献度
0
金元
1180
积分
118
精华
0
注册时间
2013-9-19
29#
发表于 2019-12-21 23:53 | 只看该作者
成了感谢楼主
回复 支持 反对

使用道具 举报

1

主题

31

帖子

100

积分

中级玩家

Rank: 3Rank: 3

贡献度
3
金元
878
积分
100
精华
0
注册时间
2008-8-21
30#
发表于 2020-2-10 16:07 | 只看该作者
Access violation 能解决吗?能解决就是真正的大神。既然分享出来了,那么就要负责任!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|3DMGAME ( 京ICP备14006952号-1  沪公网安备 31011202006753号

GMT+8, 2025-3-15 11:09 , Processed in 0.162548 second(s), 16 queries , Memcache On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表