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

注册 登录

QQ登录

只需一步,快速开始

查看: 5360|回复: 7
打印 上一主题 下一主题

[秘籍] 从添加魔法石的过程中,解释如何制作x64位ct脚本。包含调用call,堆栈处理等细节。。。

[复制链接]

100

主题

786

帖子

4314

积分

游戏精英

Rank: 8Rank: 8

贡献度
631
金元
17599
积分
4314
精华
3
注册时间
2008-1-21

旧版萌之委员会''永久''

QQ
跳转到指定楼层
主题
发表于 2017-3-1 22:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 瘸腿大象 于 2017-3-1 22:28 编辑

首先我假设你有一定的ce脚本编写基础了。这篇可算是进阶篇。

这个游戏的物品地址很好找,2级指针而已。但直接改物品数量的话,魔法石不生效。
推测是没有调用刷新物品效果的代码。所以考虑使用游戏自己的添加物品call。

在商店买东西,搜索改变物品数量的代码,结果如下。
1 1413F2232 - 8B 0C 88   - mov ecx,[rax+rcx*4]
1 1413F2235 - 44 89 04 30   - mov [rax+rsi],r8d                   item+
1 1413F2250 - 83 3C 06  00 - cmp dword ptr [rsi+rax],00
1 1413F2266 - 83 3C 06  00 - cmp dword ptr [rsi+rax],00

返回2次后来到这里
14161302D - 41 B0 01              - mov r8l,01
141613030 - 48 89 C1              - mov rcx,rax            rcx=物品ID
141613033 - 89 DA                 - mov edx,ebx            rdx=增加后的数量
141613035 - E8 36B7DDFF           - call 1413EE770        item+2                这个就是增加物品call


接下来就是怎么写脚本。
注意这些就好
1 x64没有pushad popad命令,所以要写一堆push pop来还原寄存器数据。
2 x64调用call之前,要sub esp,20 ,call调用之后要add esp,20。这是x64系统规定的。
3 x64程序做jmp跳转,最好是在同一个模块里,不要globalalloc申请内存。这样的jmp才是5个字节,否则就算远跳,要破坏20个字节。
4 很多时候用createthread来创建线程会出错,所以最好在游戏里找到一个会被高频率执行的代码做跳转。

脚本示例,添加显示宝箱的魔法石
<



祝修改愉快。


评分

2

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-3-28 18:03 , Processed in 0.028766 second(s), 18 queries , Memcached On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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