注册 | 登录

游侠NETSHOW论坛





查看: 3990|回复: 9
打印 上一主题 下一主题

分享偶今天对城市兵装上限代码的一点研究 [复制链接]

帖子
1502
精华
1
积分
1180
金钱
6398
荣誉
22
人气
92
评议
0
跳转到指定楼层
楼主
发表于 2010-3-26 21:05:38 |只看该作者 |倒序浏览
这段代码是判断城市兵装、攻具、舰船上限的代码,程序中共有7段判断,都差不多,修改起始地址分别为:
0x0047B382 0x0047BDB73 0x005C7321 0x005ED009 0x005F1BAE 0x00607848 0x00607B64

看看原始的程序:
0047B370 - 8b 44 24 04      - mov eax,[esp+04]        //将兵装类型放入EAX
0047B374 - 85 c0                - test eax,eax                //测试EAX否为0(剑兵)
0047B376 - 7c 1c                - jnge 0047b394        //EAX为0则跳转到0047B394
0047B378 - 83 f8 0b             - cmp eax,0b                //比较EAX与11(11以上应该是未知兵装)
0047B37B - 7f 17                - jg 0047b394                //如果EAX大于11则跳转到0047B394
0047B37D - 33 c9                - xor ecx,ecx                //ECX清零
0047B37F - 83 f8 04             - cmp eax,04                //比较EAX与4(1-4为兵装,5-11为攻具舰船)
0047B382 - 0f 9f c1             - setg cl                //如果EAX大于4则将CL(ECX的低8位)置为1(由于ECX是0,此命令即将ECX置为1)
0047B385 - 49                   - dec ecx                //ECX自减1(即如果EAX代表兵装,此时ECX是0xFFFFFFFF,如果EAX代表攻具舰船,此时ECX是0x00000000)
0047B386 - 81 e1 3c 86 01 00    - and ecx,0001863c        //将ECX与兵装最大值(99000)做逻辑与操作(即如果EAX代表兵装,ECX置为兵装上限值,如果EAX代表攻具舰船,ECX仍为0)
0047B38C - 83 c1 64             - add ecx,64                //将ECX的值加上攻具舰船上限(100),仍置入ECX(这解释了为什么兵装上限设为99900,攻具上限设为100时,实际兵装上限为100000)
0047B38F - 8b c1                - mov eax,ecx                //将EAX的值置为ECX(上限)的值
0047B391 - c2 04 00             - ret 0004                //返回
0047B394 - 33 c0                - xor eax,eax                //EAX清零
0047B396 - c2 04 00             - ret 0004                //返回

VAN解除了这个上限,使兵装与攻具船舰共享一个上限。
【VAN的改法(修改了前面加*的地址)】
0047B370 - 8b 44 24 04       - mov eax,[esp+04]
0047B374 - 85 c0                - test eax,eax
0047B376 - 7c 1c                - jnge 0047b394
0047B378 - 83 f8 0b             - cmp eax,0b
0047B37B - 7f 17                - jg 0047b394
0047B37D - 33 c9                - xor ecx,ecx
0047B37F - 83 f8 04             - cmp eax,04
*0047B382 - 90 90 90           - nop nop nop                //取消原来对兵装、攻具舰船的区别处理,等于将攻具舰船等同于兵装
0047B385 - 49                    - dec ecx                //ECX自减1(此时ECX是0xFFFFFFFF)
*0047B386 - 81 e1 FF FF FF 07    - and ecx,7FFFFFFF        //将ECX与兵装上限(2亿多)做逻辑与操作(即兵装和攻具舰船的上限都设为此值)
*0047B38C - 83 c1 00             - add ecx,00                //将ECX的值加上攻具舰船最大值(改为0,则此句执行完上限不变)
0047B38F - 8b c1                - mov eax,ecx
0047B391 - c2 04 00             - ret 0004
0047B394 - 33 c0                - xor eax,eax
0047B396 - c2 04 00             - ret 0004

偶觉得有必要将兵装和攻具船舰上限区别对待,所以也改了一下
【我的改法(修改了前面加*的地址)】
0047B370 - 8b 44 24 04          - mov eax,[esp+04]
0047B374 - 85 c0                - test eax,eax
0047B376 - 7c 1c                - jnge 0047b394
0047B378 - 83 f8 0b             - cmp eax,0b
0047B37B - 7f 17                - jg 0047b394
0047B37D - 33 c9                - xor ecx,ecx
0047B37F - 83 f8 04             - cmp eax,04
*0047B382 - 7f 08                - jg 0047b38c                //如果EAX大于4则跳转到0047B386, 同时省下一个字节
*0047B384 - b9 3c 86 01 00       - mov ecx,000186a0        //直接将ECX置为兵装上限(比如100000),删掉ECX自减1这一个字节,同时再省下一个字节
*0047B389 - 90                   - nop                //空执行一个富裕字节
*0047B38A - eb 03                - jmp 0047b38f        //无条件跳转到0047B38F,不再去加攻具舰船上限值
*0047B38C - 80 c1 64             - add cl,64                //CL(ECX的低8位)的值设为攻具舰船上限(比如100),这个无符号操作突破了127限制,使攻具舰船最大值可达到255
0047B38F - 8b c1                - mov eax,ecx
0047B391 - c2 04 00             - ret 0004
0047B394 - 33 c0                - xor eax,eax
0047B396 - c2 04 00             - ret 0004

好了,这就是4个小时的研究成果,贴上来分享一下,希望能有点借鉴作用。

使用道具 举报

帖子
314
精华
0
积分
157
金钱
652
荣誉
0
人气
0
评议
0
沙发
发表于 2010-3-26 21:34:13 |只看该作者
第一时间~~~    20破~~~~~~~~~~`

使用道具 举报

游侠剑阁工作组【制作】
蜀军 侦察兵 偃月刀

剑阁工作组资深组员勋章

帖子
2686
精华
1
积分
2244
金钱
1129
荣誉
69
人气
105
评议
0

板凳
发表于 2010-3-26 22:45:31 |只看该作者
好复杂···能做成修改器更好···LZ强人·····

使用道具 举报

帖子
1502
精华
1
积分
1180
金钱
6398
荣誉
22
人气
92
评议
0
地板
发表于 2010-3-26 23:22:48 |只看该作者
已经做到自己的修改器里了。。。

使用道具 举报

游侠剑阁工作组【制作】
蜀军 侦察兵 偃月刀

剑阁工作组资深组员勋章

帖子
2686
精华
1
积分
2244
金钱
1129
荣誉
69
人气
105
评议
0

5#
发表于 2010-3-27 03:34:44 |只看该作者
原帖由 ryan_knight_12 于 2010-3-26 23:22 发表
已经做到自己的修改器里了。。。


了解了,应该是那个统帅决定攻击的修改器吧?

不知LZ在游侠是否专发一帖提供修改器了?

使用道具 举报

游侠剑阁工作组【评测】
海斗士·美人鱼
幽暗城·亡灵巫师

大头像勋章白金会员勋章活跃勋章荣誉勋章特色头衔勋章剑阁工作组资深组员勋章人气勋章·初级

帖子
17965
精华
6
积分
14880
金钱
677
荣誉
435
人气
3470
评议
0

6#
发表于 2010-3-27 07:35:14 |只看该作者

回复 #5 bondelj 的帖子

使用道具 举报

帖子
907
精华
0
积分
454
金钱
3433
荣誉
0
人气
7
评议
0
7#
发表于 2010-3-27 12:16:59 |只看该作者
强人啊,用汇编来分析啊!!!!

使用道具 举报

帖子
1502
精华
1
积分
1180
金钱
6398
荣誉
22
人气
92
评议
0
8#
发表于 2010-3-27 13:19:46 |只看该作者

回复 #5 bondelj 的帖子

鉴于游侠里面都是GM、FPE牛人,所以我要等到完善后再到这里发

使用道具 举报

游侠剑阁工作组【制作】
蜀军 侦察兵 偃月刀

剑阁工作组资深组员勋章

帖子
2686
精华
1
积分
2244
金钱
1129
荣誉
69
人气
105
评议
0

9#
发表于 2010-3-27 23:27:25 |只看该作者
原帖由 ryan_knight_12 于 2010-3-27 13:19 发表
鉴于游侠里面都是GM、FPE牛人,所以我要等到完善后再到这里发

LZ严谨,期待完善的修改器·····

使用道具 举报

军议校尉

帖子
980
精华
0
积分
521
金钱
1657
荣誉
3
人气
1
评议
0
10#
发表于 2010-3-27 23:31:21 |只看该作者
楼主发这种让人看不懂的帖子,真是罪过啊。 我过来围观一下。

使用道具 举报

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

手机版|Archiver|游侠NETSHOW论坛 ( 苏ICP备2023007791号 )

GMT+8, 2025-10-21 07:47 , Processed in 0.373797 second(s), 12 queries , Gzip On, Memcache On.

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

分享到