| 修改众 |
08-06-09 06:41 |
这是本区第1个调用子程序的实际例子
102相对于101,指针没变化 人物数组结构增加了4byte的偏移量 也就是说增加了1个变量在人物数组中
[[006D7224]+C] 玩家1 [[006D7224]+10] 玩家2 [006d5E08]+10 练习模式天气 006D5E0C 2byte 天气时间 真 [006d7228]+488 float 天气时间数字
人物数组结构 C X 10 Y 13C 当前动作? 174 HP 176 HPMax 482 MP 484 MPMax 52c 4byte 卡片生成基数 530 4byte 剩余卡片数量 (到0就没有卡片可以用了 554 卡片完成度 (500 就打开1张卡片 556 byte 卡片数量 564 4byte 卡片选择 568 4byte 卡片数量2
===============天气的改修 找天气编号地址失败。所以就从天气剩余时间入手。 天气在时间999的时候就会改变。 因此观察将时间置为999的代码,附近代码是这样
0046FE22 - 8b ce - mov ecx,esi 0046FE24 - 5e - pop esi 0046FE25 - e9 76 80 ff ff - jmp 00467ea0 0046FE2A - 66 3d e7 03 - cmp ax,03e7 0046FE2E - 7c 14 - jnge 0046fe44 0046FE30 - 6a 01 - push 01 参数1入栈 0046FE32 - 51 - push ecx 参数2入栈,这个就是天气的代码 0046FE33 - 8d 4e 04 - lea ecx,[esi+04] 将必要指针放进ecx 0046FE36 - 66 c7 05 0c 5e 6d 00 e7 03 - mov word ptr [006d5e0c],03e7 天气时间置为999 0046FE3F - e8 cc 3a fc ff - call 00433910 调用天气变化子程序 0046FE44 - 8b ce - mov ecx,esi 0046FE46 - 5e - pop esi 0046FE47 - e9 54 80 ff ff - jmp 00467ea0 0046FE4C - cc - int 3 0046FE4D - cc - int 3
要改变天气就很简单了。 直接将参数入栈,然后call 00433910 就可以。
具体实现脚本是这样
[ENABLE] createthread(weather) alloc(weather,1000)
weather: mov esi,[006d7224] push 01 push [006d5E1C] lea ecx,[esi+04] mov word ptr [006d5e0c],03e7 call 00433910 ret [DISABLE] dealloc(weather)
这个脚本将 [006d5E1C] 作为指针,天气的代码就存放在这个指针中 |
|