最近有点工作要做,所以往往是晚上上班,白天睡觉
巧不巧,最近尼基塔给塔科夫上架到Steam了,SPT原有的正版验证也自然是要跟进,然后两天之内发了两个版,把SPT原有的一万年没改过的正版验证函数改了几次
于是,我们的SPT Fuyu 2.0阵亡了两次。
要更新也很简单,找到新的特征码,然后加上就好了。但这样也有弊端,最重要的一点就是,SPT发版的时候我刚进入梦乡,醒来已经是十几小时之后了,那怎么及时更新嘛。
更何况,每次更新就把新的特征码加进列表,为了兼容旧版本又不得不留着旧版本,但凡他多更新几次,这特征码列表得叠成杀人书。
而且说实话,每次更新又要重新修补,这又是多一步操作了。
但一转头,想起来,原先最古老的思路(创建注册表项和文件),应该是能在更新后存活的。但我自己说过,这会留文件和注册表项,极其的不优雅,我总不能委曲求全然后打自己的脸吧。
废话说多了,直接进入正题。
既然SPT检查文件和注册表都是通过WindowsAPI,那我们直接挂钩,在需要的时候伪造返回值即可。
我们用到的工具有:Procmon。
怎么操作,怎么设置过滤项,百度说得很清楚,此处略过。
直接一盯,好了,知道用的是RegOpenKey检查是不是存在了
顺便往旁边一盯,是用RegQueryKey获取注册表项的值,明白了。
盯文件检查也是同理,为了截图再走一圈好麻烦,一样略过。
那我们怎么Hook,我们用MinHook,怎么用文档也写得很明白了,我们主要讲思路。
直接检查是不是我们要“伪装”的注册表项,至于是哪个,能看到这一步的自然不用我再赘述
反正检查到只要是这个注册表项,就返回成功,告诉你确实有这个注册表项,完毕。保险起见,我给包装过的和底层的都钩住了。
至于注册表键值,直接返回我们的虚拟目录,完毕。它根本不需要存在于文件系统中,因为接下来我们会把文件系统访问的API也挂钩
和注册表同理,你问文件,有的!
你问文件是啥,我想让它是啥就告诉你啥。
然后问题就解决了。
那么怎么用呢?总不能每次都手动注入dll吧
那就采用Dll Proxy的方法,请使用Dll Proxy Generator
打开IDA,在导入表里找个软柿子,就user32.dll挺好的
然后
其余略,可以直接看源代码
https://github.com/M3351AN/SPT-Fuyu/blob/32754921ca7bea72800c6dba21d8c679dbe64855/spt_fuyu_hook.cc
然后拖到启动器同目录,每次启动启动器都会自动加载,完事。
以上便是SPT Fuyu3.0的思路


















没看明白,但感觉很牛,赞