leevccc 发表于 2025-1-10 21:04:38

如何实现 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]
查看完整版本: 如何实现 wz 加密