如何实现 wz 加密
本文将根据 Implementing Custom WZ Encryption 的内容,用最新的工具来教你如何给 wz 加密wz 文件加密
首先要下载一个支持自定义密钥的 HaRepacker(写轮眼),比如 推荐一个HaRepacker工具
我以 GMSv083 原版的 TamingMob.wz 为例(因为这文件是最小的)。
先修改写轮眼的加密,因为用的083原版文件,所以就用GMS(old)加密
工具 -- 导出文件为 -- IMG
选择你要导出的 wz 文件,然后选择一个文件夹,他会把 img 文件导出到这个文件夹中。
文件 -- 新建
名称输入 wz 文件名
类型是常规
版本输入你的游戏版本比如83
加密类型选择最后一个 Use custom encryption key 这时候会弹出一个密钥的框给你
只有图中红框内的值可以修改,红框外的值改了也没用,上面区域叫做 IV,下面区域叫做 Key,里面填入 byte 类型的值。改完后点保存。
然后点确定创建好 wz 文件,选中创建好的 wz 文件
工具 -- 导入 -- IMG
将刚刚导出的 img 文件重新导入到新建的 wz 中,这时候会弹出一个框让你选择加密方式,注意 此时选择的是img原本的加密方式,不是新的加密方式!因为我们导出时是GMS,所以导入的时候还是GMS。
导完以后检查一下 wz 文件,红色的 img 表示是新导入的,确保这些 img 双击后可以展开说明没问题。
然后继续选中这个 wz
文件 -- 保存
加密类型和文件版本应该是你创建时设置的值,不需要改变。选择一个目录保存即可。
重新打开写轮眼回到第一步,此时你用 GMS 加密打开新创建的 wz 就变成了这样子的乱码,无法读取
只有选择新的密钥才能正确读取 wz 文件
至此 wz 加密算是完成了。
用 img 格式的客户端其实就多一个步骤,把加密后的 wz 用新密钥导出为 img 就可以了。
有一个特殊的 wz 文件就是 List.wz 如果你要加密这个文件的话,你需要先用老密钥打开这个文件,复制里面的内容,然后用新密钥创建新的wz,类型选择List.wz,创建完把原来的内容粘贴进去即可。
客户端读取加密后的 wz
你需要修改客户端下两个 dll 文件, 分别 PCOM.dll 和 ZLZ.dll
我印象中,只有加密了List.wz才需要修改ZLZ.dll,否则不需要动ZLZ.dll的。
总之
[*]PCOM.dll 必须要改
[*]如果你进入有怪物的地图就崩溃,在没怪的地图正常的话,那就要检查List.wz是否已经加密,并且修改了ZLZ.dll,遇怪崩溃就是这两个没有加密导致的。
两个 dll 的修改方式是一样的
用二进制编辑工具(如 Free Hex Editor Neo)打开这两个 dll,按(HEX)搜索 4D 23 C7 2B
会查到如下内容
仔细看红框处就是你要修改的值,4d 23 c7 2b 改成你的 iv,13 08 .. 改为你的 key 首列内容,和上面设置密钥的位置是对应的。
修改完保存即可。
这个地方本质上其实是客户端存密钥的位置,我们把这里的值改了,客户端读取到的密钥就变了。于是就用了新的密钥去读取 wz/img。是很初级的办法。
这个文章所谓的加密方法是最低级的方法,只防君子。
等你学会逆向弄明白客户端的逻辑以后,就可以直接在内存里做手脚,或者直接修改读取wz的方法,从而实现更难破解的加密手段。这种手段不方便公开,因为公开了就失效了。
页:
[1]