同人星球BBS -> 游戏修改 -> [修改教程]指针的应用(二) [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

修改众 08-07-02 12:29

已经明白指针了吧,那不算什么,入门而已。
想成为高手就要看这篇[s:2]


不过我还是要先声明,高手不是那么容易当的。
汇编是基本功,不会汇编就永远成不了高手。[s:1]


每次都要自己搜索指针很麻烦吧,我也不喜欢玩1次搜索1次。
咱就喜欢1劳永逸。

假如我们要用生命值做为指针。
被攻击生命值会减少,这个减少的过程其实就 将新的生命值写入生命的地址。
在生命值上右键"find out what write to this address",然后让怪打自己1下,就可以找到被怪攻击,自己hp减少的代码
从汇编代码上来说,代码几乎都是这样 -----mov 生命值地址,生命值
只要修改下这个代码,把生命值地址保存起来,这样就可以实现自动获得
通常只要在CE的汇编脚本中,申请1个新的内存地址做为指针,再申请1些空间写入我们的拦截代码即可。

假设CE得到的hp减少代码是这个 mov [esi+08],eax
eax保存的是新的生命值,[esi+08]就是生命值的地址
汇编脚本中的代码就应该这样写

alloc(新的指针,4)  //申请1个指针,存放1个地址用4个字节就够了
registersymbol(新的指针)  //注册这个指针,这样才能在代码中当作地址使用
alloc(拦截hp指针,1000)  //这里放我们的拦截代码,大小要足够
label(exit拦截hp)  //设置返回标签

生命值减少的代码:
jmp 拦截hp指针  //注意,1个jmp需要5个字节的代码长度
                //如果原本的代码长度不足,就会把后面 的代码破坏掉,需要在返回前补足原本代码。
                //如果原本的代码超过5个字节,就要补上足够的nop

拦截hp指针 :
mov [新的指针],[esi+08]
mov [esi+08],eax  //补上原本的代码
                          //破坏掉的代码也要在这里恢复
jmp exit拦截hp  //返回原本的代码位置


运行这个脚本后,只要被怪攻击,就可以记录下hp的地址,存放在我们定义的指针中。

然后在地址列表中,添加指针形式的地址,指针就用脚本中定义的那个新指针,写入对应偏移量就可以了。




有时候,改变自己hp的地址通常也用来改变敌人的hp,
这就有可能造成拦截到不是自己的hp指针。
所以,拦截脚本根据情况加上合适的判断代码
比如这样
cmp [新的指针],0  //对比指针是否已经保存
jne exit  //已经保存就直接返回

所以,找到只改变自己hp代码是最好的。可以免去1些麻烦。

有些游戏,用来改变hp的代码,也用来改变经验值,魔法等等。
对于这样的游戏这个方法就不管用了。这种游戏比较少。通常windows游戏都不会这么做。

elliotor 08-07-02 18:28
Quote:
引用第0楼修改众于08-07-02 12:29发表的 [修改教程]指针的应用(二) :
有些游戏,用来改变hp的代码,也用来改变经验值,魔法等等。
对于这样的游戏这个方法就不管用了。这种游戏比较少。通常windows游戏都不会这么做。


Rol online 就是这样的- -,SP和HP都是同一个代码改变的。

修改众 08-07-02 19:43
让怪先打自己,确保得到自己的hp指针即可
[s:1]


查看完整版本: [-- [修改教程]指针的应用(二) --] [-- top --]

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

You can contact us