311| 6
|
[教程] 用插件修改客户端的基础方法 |
这篇文章是以北斗插件为基础去写的,如果你用的是 MapleEzorsia-v2 的话那大体上是一样的,北斗可能会有一些扩充;但是如果你用的其他版本的话,那不一定会适用,请自行判断。 前面写《如何汉化客户端内存里的字符串》时已经有提到如何用插件修改内存了,这里详细介绍一下北斗插件里几个修改内存的方法。 如果你是个小白,那么打开插件的 Client.cpp 文件,找到方法
修改数值 常用的修改数值的命令有
这里面要注意的是 byte、short、int、double 分别对应 1、2、4、8个字节,你必须选择对应的方法去修改,而不是乱改,否则会修改到不该改的地方。 比如有这么一段字节码(此处均为十六进制,省略0x) B9 01 B9 10 27 00 00 假如这段字节码表示的汇编指令是 mov ecx, 1 mov ecx, 2710h 你要把第一行的 1 改为其他值,那你应该使用 WriteByte,如果你使用了 WriteInt 的话,就会把(包括第二行的) 01 B9 10 27 同时修改掉了,那么整个汇编指令就错乱了。 同样的,如果你要把第二行的 0x2710 修改为其他,那你应该使用 WriteInt,如果你只使用 WriteByte 对 10 处进行修改的话就会变成 B9 XX 27 00 00 但是这里是 XX 27 00 00 一起读取的,那么就会出现修改后的值不是你的预期值的问题。 然后是内存地址的问题,IDA 处最左边显示的内存是第一个字节的地址,也就是说你要修改第一行的 1 的话,应该用 IDA 的内存地址 +1 修改字符串 然后我们北斗封装了两个方法用于修改字符串,具体的请看《如何汉化客户端内存里的字符串》
因为程序读取字符串的字节码时,会以0字节作为终止符,如果读不到0字节就会认为这个字符串还没结束,会继续读。 所以用原始的老方法 WriteString 去修改字符串就会遇到一个问题:比如你要把 "To Alliance" 改成 "对联盟",就会变成 "对联盟iance",你必须要改成 "对联盟 " 后面加5个空格才行。 用ReplaceString就不会有这个问题了。 批量修改字节 方法一 填充相同的字节
相当于删掉一部分指令,而不是替换成其他内容。 方法二 填充指定字节
CodeCave 用汇编指令直接写 如何汉化客户端内存里的字符串:https://moguwuyu.com/thread-14-1-1.html
购买主题
已有 4 人购买
本主题需向作者支付 3 蘑菇币 才能浏览
| |
我尽可能地不设置回复可见,希望让跟帖更有质量,有问题欢迎跟帖提问。
|
|
| |
| |
| |
| ||
我尽可能地不设置回复可见,希望让跟帖更有质量,有问题欢迎跟帖提问。
|
||
Powered by Discuz! X3.5
© 2001-2025 Discuz! Team.