shaokui123 发表于 2024-8-5 13:26

非PE 类文件的读取加密

如题,大家都知道pe类的程序加密很容易,最简单的就是用各种壳一套就加密了。
但是非pe类的文件加密,又要保持原有主程序能正常读取,这个相关资料就少很多了。
最近遇上一个游戏,可以自己二开mod玩耍,但是自己建模写脚本费时费力,生成的mod有专用的解包器可以打开。
生成的mod资源包想加密保护自己的成果,当然是相对的。
这个游戏里面的音乐图片模型等各种格式的文件,最终都封包成一个dat格式的mod文件,调试发现运行主程序后会直接读取这个包里文件。
用传统的方式找到一些加密工具是能加密,但是主程序就无法读取识别了。由于没有源码,也无法从初始端进行修改对应。
网络搜索时看到有朋友有同样需求,只是没有答案。

“”“标题可能描述的不是很准确,具体说一下我想要实现的功能:
[*]进入游戏的登录器.exe、客户Duan程序client.exe和加密过的资源文件在同一个目录,
[*]当我运行登录器并进入游戏的时候能正常加载加密过的资源文件供客户Duan使用。
[*]我想做的就是这么个程序,简单的说就是资源文件就是游戏的补丁文件,不想让人轻易盗取,我要对补丁文件进行加密和解密

这个实现过程我个人的理解不知道对不对:

[*]游戏的登录器.exe或者是客户Duan程序client.exe上注入了有解密程序的dll
[*]当client.exe运行的时候解密的api也会被执行,把资源文件读到内存中进行解密
[*]然后游戏加载的是解密后的资源文件,所以游戏能够正常加载。”



这样的技术方法在别的软件看过几次,是可以实现的。
所以大佬们有知道的请指点一下,有现成的工具或者方法等等。







ingIM 发表于 2024-8-5 16:04

单独编写一个启动器/登录器或者使用DLL劫持, 里面hook到游戏加载res的api, 通过判断是否游玩mod版游戏来决定是否调用解密api
启动游戏->是否加载mod->加载mod则先调用解密api将资源加载至内存或其他位置->将解密后的资源作为参数调用游戏加载资源函数
AheadLib 通过DLL生成DLL劫持代码,
MinHook Hook用的api,
然后通过调试去找一下游戏加载资源的函数, 根据情况编写自己的解密函数
根据描述游戏资源是打包成一个文件的所以应该只用hook一处加载dat包的代码, 对于只加载一次的资源文件这种方法应该比较简单, 如果资源需要多次加载也只需加个判断

如果想要更高的安全性可以单独把从包中提取音频, 图片, 模型的函数也进行hook然后在打包前对每项资源单独进行加密, 不过我感觉这些提取函数很可能就是加载资源函数的一部分, 所以这样加密可能需要重写加载资源的函数

或者通过游戏加载mod的某些特征或者游戏脚本来加载解密用的DLL, 比如某游戏加载某个mod是通过游戏脚本语言来实现的, 该mod通过这种脚本来调用了自己的DLL实现了新的特性, 我知道的不多, 靠楼主自己研究咯

225298658 发表于 2024-8-5 19:39

可以实现的,以前和朋友做个单机的游戏消遣的时候,用的是传奇的引擎,后面考虑到资源可能会被人扒去做其他版本使用
后面我自己搞了DLL,对整个游戏的资源做了加密,方式和7楼说的差不多!

HOOK CreateFileW ,游戏读取资源时候,HOOK的地方写个匹配,自动读取目录下加密过的文件,解密,游戏加载!
还有就是在匹配到文件的时候,可以用CreateMetaFileA,实现加密资源文件不落地,将加资源放进DLL里面


shaokui123 发表于 2024-8-5 13:27

@lies2014 这方面不知道大佬有研究吗

shaokui123 发表于 2024-8-5 13:30

记一次某游戏 mod 文件加密逆向过程 - 『脱壳破解区』 - 吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn
https://www.52pojie.cn/thread-1939477-1-1.html
@ltr0030
这位大佬的帖子是解包的,研究的很厉害,不知道加密过程是否有可以指点的

董督秀 发表于 2024-8-5 13:40

你说的游戏资源加密器有现成的工具,我尝试脱壳过这个工具,由于是国外软件和某些原因,不能提供。
给你个思路,用对称加密或非对称加密对原始二进制文件进行加密,目前我只有c源码的实现。解密端编译成dll并导出相关函数,需要调用的时候就加载解密dll并调用这个函数。

shaokui123 发表于 2024-8-5 14:06

董督秀 发表于 2024-8-5 13:40
你说的游戏资源加密器有现成的工具,我尝试脱壳过这个工具,由于是国外软件和某些原因,不能提供。
给你个 ...

大佬好
这个思路大概了解是这样,但是技术水平确实小白,还是期待简单一些的工具或者详细的技术指导吧

shaokui123 发表于 2024-8-5 14:14



类似这样的工具也试了,不适用,本身游戏文件体量就大,这类工具加密后各种调用问题

艾莉希雅 发表于 2024-8-5 15:03

问题有一些语焉不详
我就按我猜的来想吧
如果是我的话,我会搞个dll去劫持client的文件读取,具体客户端用啥读的就劫持啥比如说什么CreateFileA啊之类的
启动器向客户端塞dll
dll的话在劫持的方法中写个匹配,匹配到我要读的那个文件的时候就走解密或者是去哪抄个虚拟文件系统这样

shaokui123 发表于 2024-8-5 16:49

艾莉希雅 发表于 2024-8-5 15:03
问题有一些语焉不详
我就按我猜的来想吧
如果是我的话,我会搞个dll去劫持client的文件读取,具体客户端 ...

嗯嗯,基本上就你这个意思
但是编程汇编功力不够,最好有简单点的工具能实现,比如楼上提到的游戏资源加密器等

shaokui123 发表于 2024-8-5 16:50

ingIM 发表于 2024-8-5 16:04
单独编写一个启动器/登录器或者使用DLL劫持, 里面hook到游戏加载res的api, 通过判断是否游玩mod版游戏来决 ...

能理解这么深刻也是编程高手啊
小白功力不行,最好能有个简单工具或者详细教材
页: [1] 2
查看完整版本: 非PE 类文件的读取加密